#!/bin/bash PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin" export PATH export LANG="de_DE@euro" export LC_MESSAGES="de_DE@euro" export LANGUAGE="de_DE@euro" TMP="/tmp/flash-knoppix.$$.tmp" TMPMOUNT="/tmp/flash-knoppix.$$.tmpmount" FLASH="" TITLE="flash-knoppix" # Requires dialog and (optionally) xdialog DIALOG="dialog" if [ -n "$DISPLAY" ] && type -p Xdialog >/dev/null 2>&1; then ICON="/usr/share/icons/flash-knoppix.xpm" [ -r "$ICON" ] && ICON="--icon $ICON" || ICON="" DIALOG="Xdialog --left --wrap $ICON" export XDIALOG_NO_GMSGS=1 fi ERROR="" bailout(){ umount -df "$TMPMOUNT" 2>/dev/null && eject "$FLASH" 2>/dev/null rmdir "$TMPMOUNT" 2>/dev/null killgauge case "$1" in 0) # Normal end of program $DIALOG -backtitle "Fertig." --title "$TITLE" --timeout 5 --msgbox " Sie können den Datenträger jetzt entfernen. " 0 65 ;; 1) # Cancel with no message true;; *) # Error $DIALOG --title "Fehler" --backtitle "Das hat nicht funktioniert." --msgbox " $ERROR " 0 65;; esac rm -f "$TMP" "$TMP.done" "$TMP.err" exit $1 } gauge(){ rm -f "$TMP.done" status=0 while [ ! -e "$TMP.done" ]; do echo "$((status / 100))" ; status="`expr \( 10000 - $status \) / 100 + $status`"; sleep 1; done | $DIALOG --title "$TITLE" --gauge "$1" 0 75 0 & } # Stop status bar killgauge(){ touch "$TMP.done" ; wait ; rm -f "$TMP.done" } if [ -n "$1" -a -b "$1" ]; then FLASH="$1" else DEVICELIST=() count=0 for i in $(ls -1d /sys/block/sd? 2>/dev/null); do device="${i##/sys/block/}" DEVICELIST[$((count++))]="$device" DEVICELIST[$((count++))]="$(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 rm -f "$TMP" $DIALOG --title "$TITLE" --menu " Bitte das gewünschte Ziel angeben: " 20 75 10 "${DEVICELIST[@]}" 2>"$TMP" || bailout 1 FLASH="/dev/$(<$TMP)" fi if grep -q "^${FLASH}" /proc/mounts && ! umount -df "$FLASH"; then ERROR="$FLASH ist noch gemountet." bailout 2 fi [ "`id -u`" != "0" ] && exec sudo "$0" "$FLASH" unset SUDO_COMMAND if [ -r /mnt-system/KNOPPIX/KNOPPIX ]; then SRC=/mnt-system cd "$SRC" else while [ ! -r KNOPPIX/KNOPPIX ]; do $DIALOG --backtitle "Bitte das Verzeichnis angeben, in dem sich die KNOPPIX-Daten befinden." --dselect . 0 75 2>"$TMP" || bailout 1 SRC="$(<$TMP)" [ -d "$SRC" ] && cd "$SRC" done fi gauge "Bootrecord einrichten auf $FLASH..." rm -f "$TMP.err" syslinux "${FLASH}1" 2>"$TMP.err" || { ERROR="$(<$TMP.err)"; bailout 1; } ms-sys -s "${FLASH}" 2>"$TMP.err" || { ERROR="$(<$TMP.err)"; bailout 1; } sfdisk -A1 "${FLASH}" 2>"$TMP.err" || { ERROR="$(<$TMP.err)"; bailout 1; } killgauge gauge "Schreibe Daten..." mkdir -p "$TMPMOUNT" mount -t vfat -o shortname=winnt "${FLASH}1" "$TMPMOUNT" 2>"$TMP.err" || { ERROR="$(<$TMP.err)"; bailout 1; } cp -Lrf KNOPPIX "$TMPMOUNT" 2>"$TMP.err" || { ERROR="$(<$TMP.err)"; bailout 1; } if [ -r "syslinux.cfg" ]; then cp -Lrf *.msg logo.16 *.kbd linux minirt.gz f[1-9] "$TMPMOUNT" 2>"$TMP.err" || { ERROR="$(<$TMP.err)"; bailout 1; } elif [ -r boot/isolinux/isolinux.cfg ]; then cp -Lrf boot/isolinux/* "$TMPMOUNT" 2>"$TMP.err" || { ERROR="$(<$TMP.err)"; bailout 1; } mv -f "$TMPMOUNT"/isolinux.cfg "$TMPMOUNT"/syslinux.cfg rm -f "$TMPMOUNT"/isolinux.* "$TMPMOUNT"/*.cat else ERROR="Keine Bootkonfiguration gefunden (weder boot/isolinux/isolinux.cfg mnoch syslinux.cfg), der Bootlader wird vermutlich nicht funktionieren." bailout 3 fi bailout 0