Inhaltsverzeichnis

Live-Stick Docking Station

Erstellt d4e Live-Sticks mit grafischer Oberfläche

Voraussetzungen

Hauptskript

Skript liegt hier: /root/usb/do.sh

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

Hilfs-Skript, um alle angeschlossenen Geräte auszulesen, erzeugt für Zenity formatierte Ausgabe:

Skript liegt hier: /root/usb/list_devices.sh

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 

Desktop-Verknüpfung

/root/Desktop/livestick.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