#!/bin/bash #usbinstall.sh # Arg 1: usb device for installation # Arg 2: boot file # Arg 3: iso file #~ # openmamba-usbinstall è uno script per la generazione automatica di una chiavetta di boot per openmamba snapshot. #~ # Se i file necessari sono presenti sul disco fisso verranno utilizzati quelli altrimenti #~ # scaricherà direttamente la versione attuale dal sito di openmamba. #~ # se il file iso è presente nella home verrà usato direttamente altrimenti si aprirà un dialogo dove sarà possibile cercarlo. #~ # (c) 2009 ercole 'ercolinux' carpanetto - ercole69@gmail.com #~ # (c) 2009-2010 Silvan Calarco - silvan.calarco@mambasoft.it # License: GPL v.3 #%Changelog: # 17/10/11 (michiamophil) # * Script modificato organizzando il codice in funzioni, chiamate dal modulo installazione.py # 06/01/12 (michiamophil) # * "sudo u/mount -> udisks" # * export $1, $2, $3 -> OPENMAMBA_* #=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ #-------------------------------------(DBUS)----------------------------------------- #=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ function dbus_properties_get_string() { REPLY=`dbus-send --system --print-reply --dest=$1 $2 \ org.freedesktop.DBus.Properties.Get string:$3 string:"$4"` [ $? -eq 0 ] || return 1 echo $REPLY | sed "s|.*string.*\"\(.*\)\"|\1|" return 0 } function dbus_properties_get_stringlist() { # FIXME: only returns first element REPLY=`dbus-send --system --print-reply --dest=$1 $2 \ org.freedesktop.DBus.Properties.Get string:$3 string:"$4"` [ $? -eq 0 ] || return 1 echo $REPLY | sed "s|.*array.*\[ string \"\(.*\)\" ]|\1|" return 0 } function dbus_properties_get_uint64() { REPLY=`dbus-send --system --print-reply --dest=$1 $2 \ org.freedesktop.DBus.Properties.Get string:$3 string:$4` [ $? -eq 0 ] || return 1 echo $REPLY | sed "s|.*uint64 \(.*\)|\1|" return 0 } function dbus_properties_get_bool() { REPLY=`dbus-send --system --print-reply --dest=$1 $2 org.freedesktop.DBus.Properties.Get string:$3 string:$4` [ $? -eq 0 ] || return 1 echo $REPLY | sed "s|.*boolean \(.*\)|\1|" return 0 } # Set progressbar (only if $DBUS_USBINSTALL = 1) # Arg 1: value% set_pbar() { if [ "$DBUS_USBINSTALL" == "1" ]; then dbus-send --print-reply --session --dest=org.openmamba.usbinstall /org/openmamba/usbinstall org.openmamba.usbinstall.Set_progressBar int32:$1 fi } # Set status label (only if $DBUS_USBINSTALL = 1) # Arg 1: string set_status() { if [ "$DBUS_USBINSTALL" == "1" ]; then dbus-send --print-reply --session --dest=org.openmamba.usbinstall /org/openmamba/usbinstall org.openmamba.usbinstall.Set_description "string:$1" fi } ####################################(DBUS)########################################### #=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ #-------------------------------------(MAIN)----------------------------------------- #=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ export SELECT_USB=$1 export SELECT_BOOT=$2 export SELECT_ISO=$3 set_status "Smonto la chiavetta" DEVICEISMOUNTED=`dbus_properties_get_bool org.freedesktop.UDisks /org/freedesktop/UDisks/devices/${SELECT_USB/*\/}1 \ org.freedesktop.UDisks.Device DeviceIsMounted` if [ "$DEVICEISMOUNTED" = "true" ]; then LANG=C udisks --unmount ${SELECT_USB}1 | grep failed && { echo "Error: fail to umount the usb key (${SELECT_USB}1)" exit 1 } fi set_pbar 2 set_status "Formattazione della chiavetta in corso..." sudo fdisk $SELECT_USB < ./fdisk_template set_pbar 5 sudo mkfs.ext3 ${SELECT_USB}1 -L openmamba_live sleep 1 LANG=C udisks --mount ${SELECT_USB}1 set_pbar 30 # Riceve la mountdir della chiavetta da dbus MOUNTDIR=`dbus_properties_get_stringlist org.freedesktop.UDisks /org/freedesktop/UDisks/devices/$(basename $SELECT_USB)1 \ org.freedesktop.UDisks.Device DeviceMountPaths` set_status "Estrazione del file di boot in corso..." pushd $MOUNTDIR >/dev/null sudo chmod 777 ./ gunzip -c $SELECT_BOOT | cpio -i set_pbar 38 set_status "Scrittura del bootloader in corso..." sudo extlinux --install boot sudo install-mbr -e 1 $SELECT_USB set_pbar 45 set_status "Copia del file iso di openmamba in corso..." # Copy code ORIG_SIZE=`stat -c %s $SELECT_ISO` cp $SELECT_ISO ./ & DEST_SIZE=0 while [ $ORIG_SIZE -gt $DEST_SIZE ]; do DEST_SIZE=$(stat -c %s ./"`basename $SELECT_ISO`") percentuale=$((45 + ( 50 * $DEST_SIZE ) / $ORIG_SIZE )) set_pbar $percentuale sleep 2 done ln -fs `basename $SELECT_ISO` ./openmamba-live.iso popd >/dev/null set_pbar 98 set_status "Smonto la chiavetta" LANG=C udisks --unmount ${SELECT_USB}1 | grep failed && { echo "Error: fail to umount the usb key (${SELECT_USB}1)" exit 2 } set_pbar 100 ####################################(MAIN)###########################################