Erstellt d4e Live-Sticks mit grafischer Oberfläche
Skript liegt hier: /root/usb/do.sh
#!/bin/sh ############################################# # # # desktop4education # # 27.12.2010 # # # ############################################# # Pfade anpassen IMAGE="/home/live/datatraveler.img" DATA=`/root/usb/list_devices.sh` # Variablen, die sonst noch benoetigt werden: ICON="/root/usb/icon.png" TITLE="d4e Live-Stick erstellen" OUTPUT_ZENITY="/root/usb/.zenity" OUTPUT_DD="/root/usb/.dd" if [ ! -r "$IMAGE" ] ; then zenity --error --title="$TITLE" --window-icon="$ICON" --text="Die Abbild-Datei \"$IMAGE\" existiert nicht oder ist nicht lesbar. Programm wird beendet." exit 1 fi echo "zenity --list --title=\"$TITLE\" --window-icon=\"$ICON\" --text=\"Wähle eine Laufwerk aus:\" --column= --column=Gerät --column=Bezeichnung --column=Größe --width=500 --radiolist --height=300 $DATA" > $OUTPUT_ZENITY DEVICE=`sh $OUTPUT_ZENITY` rm $OUTPUT_ZENITY if [ "$DEVICE" == "" ] ; then zenity --info --title="$TITLE" --window-icon="$ICON" --text="Es wurde kein Gerät ausgewählt. Das Programm wird beendet." exit 0 fi FLASH="/dev/$DEVICE" GERAET=`expr substr $DEVICE 1 3` LIST=`grep "$GERAET" /proc/mounts | awk {' print $1 '}` for i in $LIST do umount -df $i done if grep -q "^${FLASH}" /proc/mounts && ! umount -df "$FLASH"; then zenity --error --window-icon="$ICON" --title="$TITLE" --text "Gerät kann nicht ausgehängt werden. Alle Programme schließen!" exit fi echo > $OUTPUT_DD dd if=$IMAGE of=$FLASH bs=4M 2> $OUTPUT_DD & ENDE=`ls -la $IMAGE | awk -F" " '{ print $5 }'` GROESSE=`du -h $IMAGE | awk -F" " '{ print $1 }'` PID=`pgrep -l '^dd$' | awk -F" " '{ print $1 }'` sleep 1 prozent(){ while true; do kill -USR1 $PID > /dev/null 2>&1 STATUS=`tail -3 $OUTPUT_DD | grep Bytes | awk '{ print $1 }'` if [ "$STATUS" == "" ] ; then STATUS=0 fi PROZENT=$(echo "($STATUS / $ENDE * 100)" | bc -l) PROZENT=$(echo "($PROZENT+0.5)/1" | bc ) echo $PROZENT echo -n "# " echo -n $(tail -3 $OUTPUT_DD | grep Bytes | awk '{ print $3" "$4 }' | tr -d "(" | tr -d ")" ) echo -n " von $GROESSE" echo -n " (" echo -n $(tail -3 $OUTPUT_DD | grep Bytes | awk '{ print $8" "$9 }') echo -n ")" echo PID_NOW=`pgrep -l '^dd$' | awk -F" " '{ print $1 }'` if [ "$PID" != "$PID_NOW" ] ; then break fi sleep 1 done } prozent | zenity --progress --percentage=0 --auto-close --title="$TITLE" --window-icon="$ICON" fg $PID > /dev/null 2>&1 wait kill -9 $PID > /dev/null 2>&1 rm $OUTPUT_DD sync | zenity --progress --auto-close --pulsate --text "Synchronisiere Dateisystem..." --title="$TITLE" --window-icon="$ICON" zenity --info --text "Fertig" --title="$TITLE" --window-icon="$ICON" exit
Hilfs-Skript, um alle angeschlossenen Geräte auszulesen, erzeugt für Zenity formatierte Ausgabe:
Skript liegt hier: /root/usb/list_devices.sh
#!/bin/sh for i in $(ls -1d /sys/block/sd? 2>/dev/null); do device="${i##/sys/block/}" echo -n FALSE $device echo -n " \"" echo -n "$(cat $i/device/vendor 2>/dev/null) $(cat $i/device/model 2>/dev/null)\" \"$(awk '{print ($1 / 2048) "MB"}' $i/size 2>/dev/null)\" " done echo
/root/Desktop/livestick.desktop
[Desktop Entry] Encoding=UTF-8 Version=1.0 Type=Application Terminal=false Name[de_AT]=Live-Stick erstellen Exec=/root/usb/do.sh Icon[de_AT]=usb Name=Live-Stick erstellen Icon=usb