#!/bin/bash # # Nach Setup-Datei für c't Bankix Update suchen Message () { /bin/plymouth message --text="$1" echo "$1" } Error () { /bin/plymouth message --text="$2" /bin/plymouth message --text="Datenspeicherung fehlgeschlagen." echo "$2" sleep 30 exit $1 } SETUP_FILE=/.setup-savesettings if [ ! -e ${SETUP_FILE} ]; then Message "Keine Systemeinstellungen zu sichern." exit 0 fi # Setup-Datei einlesen read -d "" -a SETUP < ${SETUP_FILE} Message "Systemeinstellungen und Updates speichern:" # Parameter STICKDEV und SERIAL extrahieren STICKDEV="" SERIAL="" for ((i=0; i<${#SETUP[*]}; i++)) { case "${SETUP[$i]}" in STICKDEV=*) STICKDEV=${SETUP[$i]#STICKDEV=} ;; SERIAL=*) SERIAL=${SETUP[$i]#SERIAL=} ;; esac } # Zur Sicherheit nochmal Device und Seriennummer überprüfen [ "${STICKDEV}" -a -b "${STICKDEV}" ] || Error 1 "USB-Laufwerk nicht auffindbar." # Device-Path von hinten her aufrollen, bis das USB-Device-Verzeichnis # mit den Angaben zur Seriennummer erreicht ist if [ "${SERIAL}" ]; then devname=${STICKDEV##*/} devname=${devname%%[0-9]} curpath=/sys/block/$(readlink "/sys/block/${devname}") while [ "${curpath}" ]; do if [ -e "${curpath}/uevent" ]; then if grep -q DEVTYPE=usb_device "${curpath}/uevent"; then break fi fi curpath=${curpath%/*} done [ "${curpath}" -a -e "${curpath}/serial" ] || Error 1 "Unbekanntes USB-Laufwerk." read serno < ${curpath}/serial [ "${SERIAL}" == "${serno}" ] || Error 1 "Falsches USB-Laufwerk oder Laufwerk wurde entfernt." fi SQDIR="" if grep -q "^/dev/sd[a-z][0-9]* /cdrom" /proc/mounts; then # System läuft vom USB-Stick, also auch die Einstellungen hier speichern Message " USB-Laufwerk beschreibbar einbinden..." SQDIR=/cdrom MEDIA="disk" mount -o remount,rw ${SQDIR} ## >/dev/null 2>/dev/null || Error 1 "Konnte USB-Laufwerk nicht beschreibbar einbinden -- evtl. Hardware-Schreibschutz aktiv?" else Message " USB-Laufwerk als Zwischenspeicher einbinden..." SQDIR=/mnt/ctbankix MEDIA="cd" umount -f ${STICKDEV} >/dev/null 2>/dev/null mount -o rw ${STICKDEV} ${SQDIR%/*} >/dev/null 2>/dev/null || Error 1 "Konnte USB-Laufwerk nicht einbinden." mkdir -p ${SQDIR} fi COW=/cow EXCLUDES=${SQDIR}/excludes # Ausnahmenliste erstellen und aufräumen Message " Dateien zusammenstellen..." apt-get clean # User-Home sichern, allerdings Histroy und Caches auslassen echo ".setup-savesettings" >> ${EXCLUDES} echo ".setup-homestick" >> ${EXCLUDES} echo "etc/mtab" >> ${EXCLUDES} echo "home/ctbankix/.bash_history" >> ${EXCLUDES} echo "boot/*" >> ${EXCLUDES} echo "media/*" >> ${EXCLUDES} echo "var/log/*" >> ${EXCLUDES} echo "var/cache/apt/archives/*" >> ${EXCLUDES} echo "tmp/*" >> ${EXCLUDES} cd ${COW} # relative Pfade für Wildcard-Excludes find . -name '*.wh.*' | cut -b 3- >> ${EXCLUDES} # Gelöschte Dateien im COW cd - [ -e "${EXCLUDES}" ] || Error 1 "Dateiliste nicht auffindbar." # Squashfs bauen Message " Dateiarchiv packen..." rm -f ${SQDIR}/settings.squashfs mksquashfs ${COW} ${SQDIR}/settings.squashfs -ef ${EXCLUDES} -wildcards >/dev/null 2>/dev/null || Error 1 "Konnte Dateien nicht zusammenpacken, ggf. ist nicht genug Platz auf dem USB-Laufwerk." rm -f ${EXCLUDES} 2>/dev/null sync if [ "${MEDIA}" = "cd" ]; then # echo "2. Session bauen" cd ${SQDIR%/*} Message " DVD untersuchen..." TRACKPOS=$(cdrskin --drive_not_o_excl dev=/dev/cdrom -msinfo 2>/dev/null) [ "$TRACKPOS" ] || Error 1 "Abgeschlossene DVD: Die c't-Bankix-DVD darf nicht abgeschlossen sein, damit das Update als 2. Session gespeichert werden kann." # LENGTH=$(genisoimage -print-size -quiet -J -R -C ${TRACKPOS} -dev /dev/cdrom ctbankix 2>/dev/null) # [ "$LENGTH" ] || Error 1 "Fehler beim Einbinden des Original-Images." # # # Prüfen, ob noch genug Platz ist: # DATASIZE=$(du -B 2048 ${SQDIR}/settings.squashfs) # DATASIZE=${DATASIZE%%$'\t'*} # DISKCAP=$(cdrskin --drive_not_o_excl dev=/dev/cdrom -atip 2>/dev/null | grep "ATIP start of lead out:") # DISKCAP=${DISKCAP#*: } # DISKCAP=${DISKCAP%% *} # if [ -z "${DISKCAP}" ]; then # Message " Speicherplatz der CD nicht bestimmbar, versuche trotzdem zu brennen..." # elif [ ${DISKCAP} -le $((${TRACKPOS#*,} + ${DATASIZE})) ]; then # Error 1 "CD zu klein, um die Systemeinstellungen und Updates zu speichern. Bitte laden Sie sich eine aktualisierte Version von c't Bankix herunter oder installieren Sie c't Bankix auf einem USB-Laufwerk." # fi Message " Update als 2. Session auf DVD brennen..." genisoimage -quiet -J -R -C ${TRACKPOS} -dev /dev/cdrom ctbankix 2>/dev/null | \ cdrskin --drive_not_o_excl -waiti -tao dev=/dev/cdrom tsize=${LENGTH}s speed=4 driveropts=burnproof - >/dev/null 2>/dev/null || Error 1 "Fehler beim Brennen der 2. Session." cd - umount -f ${SQDIR%/*} >/dev/null 2>/dev/null elif [ "${MEDIA}" = "disk" ]; then mount -o remount,ro ${SQDIR} fi Message "Fertig." sleep 2