[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [debian-knoppix] FloppySave Script



On Wed, May 15, 2002 at 08:57:29PM +0200, Florian Schneider wrote:
> Hallo!
> 
> Einem Kumpel von mir ist gestern die Festplatte abgeraucht. Jetzt möchte
> er sich ein Weilchen mit Knoppix aushelfen. Dummerweise hat er eine
> etwas ältere Version (er sagt, 2.1), die noch nicht über die Funktion
> zum speichern der Benutzereinstellungen verfügt.

Wenn ihm die Knoppix gefällt, warum installiert er sich nicht auf einer
kleinen Platte ein richtiges Linux (Debian, Mandrake, SuSE soll auch
nicht schlecht sein)? Oder hat er jetzt GAR keine Platte mehr? Dann
gibt's in der Tat wenig Optionen. ;-)

> Lässt sich das evtl. nachrüsten? Ist das vieleicht "nur" ein
> Shellscript, dass mir jemand zusenden könnte? Wäre angenehmer als den
> grossen Download der ganzen Distribution ;)

Im Anhang. Das Shellscript sollte reichen.

MfG
-Klaus Knopper
--
Klaus Knopper                  LinuxTag 2002 - Europes largest Linux Expo
Technical Solutions                                 Where .com meets .org
knopper@linuxtag.de                               http://www.linuxtag.de/
Phone +49-(0)180-5-546898                         Fax +49-(0)180-5-546893
#!/bin/bash
# saveconfig - create KNOPPIX configuration floppy
# (C) Klaus Knopper Mar 2002

PATH="/bin:/sbin:/usr/bin:/usr/sbin"
export PATH


# Get root
[ "`id -u`" != "0" ] && exec sudo "$0" "$@"

TMP="/tmp/saveconfig.tmp$$"

bailout(){
rm -f "$TMP" "$TMP.done" "$TMP.err"
exit 0
}

DIALOG="dialog"
[ -n "$DISPLAY" ] && [ -x /usr/bin/gdialog ] && DIALOG="gdialog"

trap bailout 1 2 3 15

# LANGUAGE etc.
[ -f /etc/sysconfig/knoppix ] && . /etc/sysconfig/knoppix
[ -z "$LANG" ] && export LANG
[ -z "$LANGUAGE" ] && export LANGUAGE
[ -z "$CHARSET" ] && export CHARSET

DESKTOPKB="$(du -sk $HOME/Desktop 2>/dev/null | awk '{print $1}')"

# Language-dependent Messages
case "$LANGUAGE" in
de*)
TITLE1="KNOPPIX Konfigurationsfloppy anlegen"
MESSAGE1="Konfigurationsdateien auswählen:"
MESSAGE2="Bitte legen Sie jetzt eine leere DOS- oder ext2-formatierte, schreibbare Diskette ein."
MESSAGE3="Speichere auf Diskette..."
E1="Persönliche Einstellungen (Desktop, Programme)"
E2="Netzwerk Einstellungen (LAN, Modem, ISDN, ASDL)"
E3="Grafik Subsystem Einstellungen (XF86Config)"
E4="Weitere systemweite Einstellungen (Drucker etc.)"
E5="Alle Desktop-Dateien (${DESKTOPKB}kB)"
SUCCESS="Die KNOPPIX-Konfigurationsdiskette wurde erfolgreich angelegt. Ihre Konfigurationsdateien werden beim nächsten KNOPPIX-Bootvorgang in die Ramdisk restauriert, wenn Sie im Bootscreen \"knoppix floppyconf\" angeben."
ERROR="Leider konnte die KNOPPIX-Konfigurationsdiskette NICHT angelegt werden:"
;;
*)
TITLE1="Create KNOPPIX configuration floppy"
MESSAGE1="Chose type of configuration files:"
MESSAGE2="Please insert an empty DOS- or ext2-formatted, writable floppy disk."
MESSAGE3="Saving to floppy..."
E1="Personal configuration (desktop, programs)"
E2="Network settings (LAN, Modem, ISDN, ADSL)"
E3="Graphics subsystem settings (XF86Config)"
E4="Other system configuration (printer etc.)"
E5="All files on the Desktop (${DESKTOPKB}kB)"
SUCCESS="Creation of KNOPPIX configuration floppy was successful. Your configuration files will be reinstalled to the ramdisk on next KNOPPIX boot if you specify \"   knoppix floppyconf\" at the boot prompt."
ERROR="The KNOPPIX configuration floppy could NOT be created:"
;;
esac

$DIALOG --clear --title "$TITLE1" --checklist "$MESSAGE1" 18 75 9 p "$E1" on d "$E5" off n "$E2" on x "$E3" on o "$E4" on 2>"$TMP" || bailout

FILES=""
SAVEHOME=""
SAVEDESK=""
SAVEETC=""
SAVENET=""
SAVEX=""
CHOWNHOME=""
NETFILES='/etc/network|/etc/ppp|/etc/chat|/etc/isdn|/etc/resolv\.conf|/etc/hosts|/etc/hosts\.|/etc/inetd\.conf'
XFILES='/etc/X11'
for i in `tr -d '"' < "$TMP"`; do
case $i in
p) SAVEHOME="yes" ;;
d) SAVEDESK="yes" ;;
n|x|o) SAVEETC="yes"; case "$i" in n) SAVENET="yes";; x) SAVEX="yes";; esac ;;
esac
done

[ -n "$SAVEHOME" -o -n "$SAVEDESK" ] && CHOWNHOME="chown -R $(ls -ld $HOME | awk '{print $3"."$4}') $HOME"

# Find changes in (real) files of dir1 ... dir2
findchanged(){
if [ -d "$1" ]; then
for i in `( cd "$1"; find . -type f | sed 's,^\./,,g' | grep -v ' ' )`; do
cmp -s "$1/$i" "$2/$i" || echo "$1/$i"
done
elif [ -e "$1" ]; then
cmp -s "$1" "$2" || echo "$1"
fi
}

writescript(){
cat >"$1" <<EOT
#!/bin/sh
[ "\`id -u\`" = "0" ] || { echo "You need root privileges to modify the system!" >&2 ; exit 1; }
[ -d "\$1" ] && CONFIGS="\$1/configs.tbz"
[ -f "\$CONFIGS" ] || CONFIGS="/cdrom/KNOPPIX/configs.tbz"
[ -f "\$CONFIGS" ] || CONFIGS="/mnt/floppy/configs.tbz"
if [ -f "\$CONFIGS" ]; then
echo "Extracting config archive \$CONFIGS..."
tar -jpPtf "\$CONFIGS" | while read i; do rm -f "\$i"; done
tar -jpPxf "\$CONFIGS" ; $CHOWNHOME
fi
EOT
return "$?"
}

FLOPPYDIR="$(ls -l /mnt/floppy | awk '{print $NF}')"
umountfloppy(){
mount | grep -q "$FLOPPYDIR" && umount "$FLOPPYDIR" 2>/dev/null
}

KNOPPIXSH="$FLOPPYDIR/knoppix.sh"

while :; do
umountfloppy
$DIALOG --title "$TITLE1" --yesno "$MESSAGE2" 8 65 || bailout
echo "$FLOPPYDIR" | grep -q auto || mount /mnt/floppy
[ "$?" = "0" ] && writescript "$KNOPPIXSH" && break
done

# Just to be on the safe side
umountfloppy

gpid=""

gauge(){
status=0
while [ ! -e "$TMP.done" ]; do echo "$status" ; status="`expr \( 100 - $status \) / 4 + $status`"; sleep 2; done | $DIALOG --title "$TITLE1" --gauge "$MESSAGE3" 8 65 0
}

# Start status bar
if [ "$DIALOG" = "dialog" ]; then
gauge &
else
# Gauge doesn't work yet with gdialog
$DIALOG --title "$TITLE1" --gauge "$MESSAGE3" 8 65 75 &
gpid="$!"
fi

rm -f "$TMP"
touch "$TMP"

[ -n "$SAVEHOME" ] && for i in $HOME/.??* $HOME/office; do findchanged "$i" /etc/skel/$(basename "$i"); done | egrep -v -e '(\.ICEauthority|ksycoka|\.xsession-errors|\.DCOP|\.MCOP|kio_http/cache|favicons|office/user/work)' >"$TMP"
[ -n "$SAVEDESK" ] && for i in $HOME/Desktop; do findchanged "$i" /etc/skel/$(basename "$i"); done >>"$TMP"

IGNORE='/etc/ioctl.save'

if [ -n "$SAVEETC" -a -d /KNOPPIX/etc ]; then
findchanged /etc /KNOPPIX/etc >>"$TMP"
[ -n "$SAVENET" ] || IGNORE="$IGNORE|$NETFILES"
[ -n "$SAVEX" ] || IGNORE="$IGNORE|$XFILES"
fi

rm -f "$TMP.tmp"
egrep -v -e '('"$IGNORE"')' "$TMP" > "$TMP.tmp"
mv -f "$TMP.tmp" "$TMP"

SCRIPTS=""
STARTNET=""
STARTCUPS=""
REINIT=""

while read i; do
case "$i" in
/etc/network/interfaces) STARTNET="yes";;
/etc/cups*) STARTCUPS="yes";;
/etc/inittab) REINIT="yes";;
esac
done <"$TMP"


[ -n "$STARTNET" ] && { echo "pump -k 2>/dev/null ; sleep 1" >>"$KNOPPIXSH" ; SCRIPTS="$SCRIPTS networking"; }
[ -n "$STARTCUPS" ] && SCRIPTS="$SCRIPTS cupsys"

if [ -n "$SCRIPTS" ]; then
echo 'echo "Starting daemons..."' >> "$KNOPPIXSH"
echo "for i in $SCRIPTS; do [ -x /etc/init.d/\$i ] && /etc/init.d/\$i start; done" >> "$KNOPPIXSH"
fi

[ -n "$REINIT" ] && echo 'echo "Reloading INIT." ; init q' >> "$KNOPPIXSH"

rm -f "$TMP.err"
BZIP2=-9 tar -T - -cpPjf "$FLOPPYDIR/configs.tbz" <"$TMP" 2>"$TMP.err"

RC="$?"

umountfloppy

# Stop status bar
[ "$DIALOG" = "dialog" ] && { touch "$TMP.done" ; wait ; rm -f "$TMP.done" ; } || { [ -n "$gpid" ] && kill "$gpid" 2>/dev/null; sleep 1; }

[ "$RC" = "0" ] && $DIALOG --title "$TITLE1" --msgbox "$SUCCESS" 10 65 || $DIALOG --title "$TITLE1" --msgbox "$ERROR `cat $TMP.err`" 10 75

bailout

Reply to: