# !/ bin /bash
#
############ OBECNE NASTAVENI ####################
# USB MOUNTPOINT−na jakou cestu se ma USB disk namapovat (/mnt/sda1)
# HD MOUNTPOINT−na jakou cestu se ma HDD namapovat (/mnt/hda1)
# USB DEVPOINT −jak je systemem USB rozpoznano (/ dev/sda)
# HD DEVPOINT −jak je systemem HDD rozpoznan (/ dev/hda1)
# MODULES DIR −Cesta k ’modules’ adresari
# DEFAULT FILE NAME−Defaultni nazev souboru konfigurace
# LOGY−vhodne pro odaleni chybicek, napriklad pri jinem umisteni USB klicenky atp.
# SAVECONF LOG−logy o nahrati / aktualizaci modulu (pokud neni potreba pouzit /dev/null)
# SAVECONF ERR−logy o neexistujicich cestach a chybach branicich v dokonceni skriptu
# (pokud neni potreba pouzit /dev/null ) USB MOUNTPOINT=/mnt/sda1
# TMPDIR −adresar kam se zkopiruji kopie vsech zmenenych souboru
# adresar musi existovat, podadresar se vytvori sam
# CHANGES −cesta k adresari se zmenami−changes
# DIRS TO SAVE −jmenny´ seznam adresaru, ktere jsou v $CHANGES a maji se zalohovat
# odeleno mezerou napr. DIRS TO SAVE=”etc opt root var”
# INC CHANGE={1|0} −ulozene zmeny se tykaji POUZE aktualne pozmenenych souboru!!!!
Pokud je potreba
# zachovat i predchozi zmeny, je treba zkopirovat image puvodniho modulu ulozeneho
# v pameti. !!! POZOR!! Kopiruje se vzdy jen image z nazvem
$DEFAULT FILE NAME !!!
TMPDIR=/tmp
CHANGES=/mnt/live/memory/changes DIRS TO SAVE=”etc opt root”
INC CHANGE=1 case”$1” in
−load )
if [ −e $SAVECONF ERR ];then rm $SAVECONF ERR
fi
if [ −e $SAVECONF LOG ];then rm $SAVECONF LOG
fi
date>>$SAVECONF LOG
echo>>$SAVECONF LOG
echo”Mounting USB...”
mkdir $USB MOUNTPOINT
# Unmounting sda∗
for mnt in ” ” 1 2 3; do
echoumount $USB DEVPOINT$mnt done
mount $USB DEVPOINT $USB MOUNTPOINT echo”Mouting HDA”
mount $HD DEVPOINT $HD MOUNTPOINT echo”End mouting...”
if [ ”$2” = ” ” ]; then
MODUL USB=$USB MOUNTPOINT/$DEFAULT FILE NAME# Soubor na USB MODUL HD=$MODULES DIR/$DEFAULT FILE NAME# Cil kam se bude kopirovat else
MODUL USB=$USB MOUNTPOINT/$(basename ”$2” .lzm).lzm# Soubor na USB MODUL HD=$MODULES DIR/$(basename ”$2” .lzm).lzm# Cil kam se bude kopirovat fi
echoMODUL USB=$MODUL USB>>$SAVECONF LOG echoMODUL HD=$MODUL HD>>$SAVECONF LOG
echo>>$SAVECONF LOG
# Existuje adresar modules if [ ! −d $MODULES DIR ];then
echoVytvarim ”$MODULES DIR” ...>>$SAVECONF LOG echo”Vytvarim ”$MODULES DIR” ...”
mkdir $MODULES DIR if [$?−ne 0 ]; then
echoVytvoreni ”$MODULES DIR” selhalo!>>$SAVECONF ERR exit 1
fi
echo>>$SAVECONF LOG
# Vse se zda v poradku else
echoAdresar ”$MODULES DIR” existuje>>$SAVECONF LOG echo”Adresar ”$MODULES DIR” existuje [OK]”
fi
# Kontrola existence souboru na pametovem mediu
if [ −e $MODUL USB ];then # −e/TRUE−existuje soubor ...
echo”Modul $MODUL USB... [OK]”
# Kontrola adresare s moduly if [ −d $MODULES DIR ];then
echo”$MODULES DIR existuje [OK]”
# Porovna´me, zda se stary a novy´ modul lisi
if [ −e $MODUL HD ] && ! cmp $MODUL HD $MODUL USB>/dev/null;then echo”Prepisuji soubor ”$MODULES DIR” souborem ”$MODUL USB””>>
$SAVECONF LOG
echo”∗∗∗Prepisuji starou konfiguraci ∗∗∗”
cp $MODUL USB $MODULES DIR chmod 755 $MODUL HD
echo””>>$SAVECONF LOG
echo”∗∗∗∗ls −l $MODULES DIR ∗∗∗∗”>>$SAVECONF LOG ls −l $MODULES DIR>>$SAVECONF LOG
date>>$SAVECONF LOG
echo”===== UPDATE =====”>>$SAVECONF LOG
echo””>>$SAVECONF LOG
echo”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”
echo” Konfigurace aktualizovana...”
echo”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”
shutdown−nrF now# Po uspesnem zavedeni je potreba jeste restartovat
# Pokud neexistuje configuracem tak ji jen nahrajeme elif [ ! −e $MODUL HD ];then
echoKopuruji modul ”$MODUL USB”do”$MODULES DIR”>>$SAVECONF LOG echo”∗∗∗Kopiruji konfiguraci ... ∗∗∗”
cp $MODUL USB $MODULES DIR chmod 755 $MODUL HD
echo””>>$SAVECONF LOG
date>>$SAVECONF LOG
echo”===== COPY =====”>>$SAVECONF LOG
echo””>>$SAVECONF LOG
echo”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”
echo” Nova konfigurace nahrana...”
echo”∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗”
shutdown−nrF now# A restartujeme
# Soubory se zdaji byt shodne, pokracujeme dal else
echoSoubor je shodny.>>$SAVECONF LOG echo”∗∗∗Soubory jsou shodne....preskakuji ∗∗∗”
echo” ∗∗∗∗ls $MODULES DIR ∗∗∗∗ ” ls $MODULES DIR>>$SAVECONF LOG
echo””>>$SAVECONF LOG
fi else
echoNeexistuje adresar ”$MODULES DIR”>>$SAVECONF ERR fi
else
echoNeni mozne nacist modul $MODUL USB !
echoNeni mozne nacist modul $MODUL USB !>>$SAVECONF ERR fi
exit 0
;;
−debug )
if [ −e $SAVECONF ERR ];then rm $SAVECONF ERR fi
#find −name modules−type d>/root/find−modules.log
date>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗ Parametry ∗∗∗∗∗”>>$SAVECONF LOG echop0=$0, p1=$1, p2=$2, p3=$3>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗ lsusb ∗∗∗∗∗”>>$SAVECONF LOG lsusb>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗ fdisk−l ∗∗∗∗∗”>>$SAVECONF LOG fdisk −l>>$SAVECONF LOG
#umount /dev/sda1 /mnt/usbflash
echo>>$SAVECONF LOG
echo>>$SAVECONF LOG
echo”∗∗∗∗∗ ls −l /mnt ∗∗∗∗∗”>>$SAVECONF LOG ls −l /mnt/>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗ ls −l /mnt/live ∗∗∗∗∗”>>$SAVECONF LOG ls −l /mnt/live >>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗∗ ls−l $HD MOUNTPOINT ∗∗∗∗∗∗∗”>>$SAVECONF LOG ls −l $HD MOUNTPOINT>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
∗∗∗∗∗∗∗ls−l usbflash∗∗∗∗∗∗∗>>$SAVECONF LOG ls −l /mnt/usbflash>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo”∗∗∗∗∗ ls −l / ∗∗∗∗∗”>>$SAVECONF LOG
ls −l / >>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
echo” ”>>$SAVECONF LOG
exit 0
;;
−−help )
echo”Pouzˇitı´: ‘ basename $0‘”>&2
echo”Pouzˇitı´: ‘ basename $0‘ [OPTION] SOURCE”>&2
echo”Uklada konfiguraci nebo ji nacita behem startu”>&2 echo”Argumenty:”>&2
echo”\”\” − ulozeni configurace na USB klicenku pod defaultnim nazvem”>&2 echo”−save −ulozeni konfigurace (defaultni nazev je $DEFAULT FILE NAME)”>&2 echo”−load −nacte $DEFAULT FILE NAME z USB klicenky behem startu a pouzije”
>&2
echo”−debug − debugovaci mod pro testovaci ucely (specialni logy a vypisy)”>&2 echo”−h / −help − vypise tuto napovedu”>&2
echo””>&2
echo”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−”>&2 echo””>&2
echo”Usage: ‘basename $0‘”>&2
echo”Usage: ‘basename $0‘ [OPTION] SOURCE”>&2
echo”Saving configuration or load it on startup from USB stick”>&2 echo”Arguments:”>&2
echo”\”\” − save configuration on USB stick by default name”>&2
echo”−save −save configuration (default name if $DEFAULT FILE NAME)”>&2 echo”−load −load $DEFAULT FILE NAME from USB stick on startup and apply
changes”>&2
echo”−debug − debug mode for testing purposes (special logs and prints)”>&2 echo”−h / −help − print this help”>&2
;;
−h )
echo”Pouzˇitı´: ‘ basename $0‘”>&2
echo”Pouzˇitı´: ‘ basename $0‘ [OPTION] SOURCE”>&2 echo”Uklada konfiguraci nebo ji nacita behem startu”>&2 echo”Argumenty:”>&2
echo”\”\” − ulozeni configurace na USB klicenku pod defaultnim nazvem”>&2 echo”−save −ulozeni konfigurace (defaultni nazev je $DEFAULT FILE NAME)”>&2 echo”−load −nacte $DEFAULT FILE NAME z USB klicenky behem startu a pouzije”
>&2
echo”−debug − debugovaci mod pro testovaci ucely (specialni logy a vypisy)”>&2 echo”−h / −help − vypise tuto napovedu”>&2
echo””>&2
echo”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−”>&2 echo””>&2
echo”Usage: ‘basename $0‘”>&2
echo”Usage: ‘basename $0‘ [OPTION] SOURCE”>&2
echo”Saving configuration or load it on startup from USB stick”>&2 echo”Arguments:”>&2
echo”\”\” − save configuration on USB stick by default name”>&2
echo”−save −save configuration (default name if $DEFAULT FILE NAME)”>&2 echo”−load −load $DEFAULT FILE NAME from USB stick on startup and apply
changes”>&2
echo”−debug − debug mode for testing purposes (special logs and prints)”>&2 echo”−h / −help − print this help”>&2
;;
” ” )
umount $USB DEVPOINT
mount $USB DEVPOINT $USB MOUNTPOINT
#TMPDIR=/home/icewind/TEMP
#CHANGES=/home/icewind/TEMP/changes if [ −d $TMPDIR ];then
TMPDIR=”$TMPDIR/tmpConfigSave”
else
echo”Chyba v docasne´m adresari. Adresar neexistuje.”
exit 1 fi
echo”Pripravuji docasny adresar ($TMPDIR)”
if [ −d $TMPDIR ];then rm−rf $TMPDIR fi
mkdir−p $TMPDIR #−p/no err if exist
if [ $INC CHANGE = 1 ] && [−e $MODULES DIR/$DEFAULT FILE NAME ];then echo”Kopiruji predchozi zmeny”
for DIR in /mnt/live /memory/images/$DEFAULT FILE NAME/∗;do if [ −d ”$DIR” ]; then
cp−aR $DIR $TMPDIR fi
done else
echo”Nenalezl jsem modul $MODULES DIR/$DEFAULT FILE NAME. Preskakuji kopirovani konfigurace...”
fi
for DIR in $DIRS TO SAVE;do cp−aR $CHANGES/$DIR $TMPDIR done
# cp−aR $CHANGES/{etc,home,opt,root,var}$TMPDIR #−a/archive, R/recursive
echo”Promazavam soubory ’.wh.∗’”
find $TMPDIR−typef−name ”.wh.∗”−delete # .wh.??
echo”Promazavam docasne soubory...(Caches)”
for CACHE in $(find $TMPDIR−typed−name ”Cache”) ;do# find typ/dir, name/”Chache”
if [ −n $CACHE ];then rm−Rf $CACHE/∗
fi done
if [ −d $TMPDIR/var/lib/pacman ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/lib/pacman fi
if [ −d $TMPDIR/var/cache/pacman ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/cache/pacman fi
if [ −d $TMPDIR/var/run ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/run fi
if [ −d $USB MOUNTPOINT ];then
DESTINATION=”$USB MOUNTPOINT”/”$DEFAULT FILE NAME”
else
echo”Neexistuje $USB MOUNTPOINT. Ukladam do $(pwd)...”
DESTINATION=”$(pwd)”/”$DEFAULT FILE NAME”
fi
if [ −e $DESTINATION ];then
echo”Mazu puvodni soubor, budu prepisovat...”
rm−f $DESTINATION fi
echo”Vytvarim modul $DESTINATION....”
echo””
mksquashfs $TMPDIR $DESTINATION−b 256KB>mksquashfs.log if [ $?−ne 0 ]; then
echo”Error building module”
catmksquashfs.log exit 1
fi echo
echo”Uklizim soubory po vytvorene zaloze”
if [ −d $TMPDIR ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR fi
echoSoubor\”$DESTINATION\” byl uspesne vytvoren.
chmod oga−x $DESTINATION
echo”Pripravuji docasny adresar ($TMPDIR)”
if [ −d $TMPDIR ];then rm−rf $TMPDIR fi
mkdir−p $TMPDIR #−p/no err if exist
if [ $INC CHANGE = 1 ] && [−e $MODULES DIR/$DEFAULT FILE NAME ];then echo”Kopiruji predchozi zmeny”
for DIR in /mnt/live /memory/images/$DEFAULT FILE NAME/∗;do if [ −d ”$DIR” ]; then
cp−aR $DIR $TMPDIR fi
done else
echo”Nenalezl jsem modul $MODULES DIR/$DEFAULT FILE NAME. Preskakuji kopirovani konfigurace...”
fi
for DIR in $DIRS TO SAVE;do cp−aR $CHANGES/$DIR $TMPDIR done
# cp−aR $CHANGES/{etc,home,opt,root,var}$TMPDIR #−a/archive, R/recursive
echo”Promazavam soubory ’.wh.∗’”
find $TMPDIR−typef−name ”.wh.∗”−delete # .wh.??
echo”Promazavam docasne soubory...(Caches)”
for CACHE in $(find $TMPDIR−typed−name ”Cache”) ;do# find typ/dir, name/”Chache”
if [ −n $CACHE ];then rm−Rf $CACHE/∗
fi done
if [ −d $TMPDIR/var/lib/pacman ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/lib/pacman fi
if [ −d $TMPDIR/var/cache/pacman ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/cache/pacman fi
if [ −d $TMPDIR/var/run ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR/var/run fi
if [ ”$2” = ” ” ] && [−d $USB MOUNTPOINT ];then
DESTINATION=”$USB MOUNTPOINT”/”$DEFAULT FILE NAME”
elif [ ”$2” = ” ” ] && [ ! −d $DESTINATION ];then
echo”Neexistuje vy´chozı´ cesta /mnt/sa1. Ukla´da´m do $(pwd)”
DESTINATION=”$(pwd)”/”$DEFAULT FILE NAME”
else
echo”Zmeˇneˇne´ jme´no, ukla´da´m do $(pwd)”
DESTINATION=”$(pwd)/$(basename ”$2” .lzm).lzm”
fi
if [ −e $DESTINATION ];then
echo”Mazu puvodni soubor, budu prepisovat...”
rm−f $DESTINATION fi
echo”Vytvarim modul $DESTINATION....”
echo””
mksquashfs $TMPDIR $DESTINATION−b 256KB>mksquashfs.log if [ $?−ne 0 ]; then
echo”Error building module”
catmksquashfs.log
exit 1 fi echo
echo”Uklizim soubory po vytvorene zaloze”
if [ −d $TMPDIR ];then #−d/TRUE−existuje adresar ...
rm−rf $TMPDIR fi
echoSoubor\”$DESTINATION\” byl uspesne vytvoren.
chmod oga−x $DESTINATION exit 0
;;
∗ )
echo”Pouzˇitı´: ‘ basename $0‘”>&2
echo”Pouzˇitı´: ‘ basename $0‘ [OPTION] SOURCE”>&2 echo”Uklada konfiguraci nebo ji nacita behem startu”>&2 echo”Argumenty:”>&2
echo”\”\” − ulozeni configurace na USB klicenku pod defaultnim nazvem”>&2 echo”−save −ulozeni konfigurace (defaultni nazev je $DEFAULT FILE NAME)”>&2 echo”−load −nacte $DEFAULT FILE NAME z USB klicenky behem startu a pouzije”
>&2
echo”−debug − debugovaci mod pro testovaci ucely (specialni logy a vypisy)”>&2 echo”−h / −help − vypise tuto napovedu”>&2
echo””>&2
echo”−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−”>&2 echo””>&2
echo”Usage: ‘basename $0‘”>&2
echo”Usage: ‘basename $0‘ [OPTION] SOURCE”>&2
echo”Saving configuration or load it on startup from USB stick”>&2 echo”Arguments:”>&2
echo”\”\” − save configuration on USB stick by default name”>&2
echo”−save −save configuration (default name if $DEFAULT FILE NAME)”>&2 echo”−load −load $DEFAULT FILE NAME from USB stick on startup and apply
changes”>&2
echo”−debug − debug mode for testing purposes (special logs and prints)”>&2 echo”−h / −help − print this help”>&2
;;
esac exit 0
Vy´pis 4: Zdrojovy´ ko´d rc.saveconf