Tips en Trucs

SystemRescueCd 1.5.6 ombouwen naar een Backupsysteem (PinBack 10.6).

Nieuw

Update 12/08/2010: in de procedure voor het maken en dus ook het terugzetten van de backup van Linux wordt nu partclone gebruikt. Door het gebruik van partclone verloopt het maken en terugzetten van een backup veel sneller.

Naast het gebruik van de recente SystemRescueCd versie (met recente stuurprogramma's voor nieuwe hardware) is PinBack een modulair systeem geworden. Door het menu te verhuizen van een centraal script naar de bootmanager kunnen modules toegevoegd of verwijderd worden. De bootmanager is dan ook in PinBack opgenomen en is dus niet meer afhankelijk van een Linux besturingssysteem. Pinback wordt nu gestart vanaf USB-stick. Dit zorgt voor een flexibelere en snellere ontwikkeling, daar USB-sticks steeds beschrijfbaar zijn, kan je de scripts rechtstreeks aanpassen zonder telkens een nieuwe CD te moeten branden. Daarnaast starten en werken USB-sticks sneller dan CD's. PinBack werkt op 64 bits processors met een 64 bits besturingssysteem en maakt intensiever gebruik van de de aanwezige processor-cores.

Inleiding

Deze tekst beschrijft hoe je SystemRescueCd 1.5.6 verandert in een allround backupsysteem. Dit backup systeem (laten we het PinBack noemen) kan ingezet worden op zowel Windows als Linux systemen, of een combinatie van beiden. Dit project is ontstaan uit noodzaak en wordt in de praktijk gebruikt in een schoolomgeving (SNT-Brugge). PinBack is enkel bruikbaar als de formattering van de harde schijf aan bepaalde eisen voldoet. Zo hebben de computers in klas de volgende harde schijfstructuur:

Mensen die in het bezit zijn van Acronis True Image kunnen deze software integreren (opstarten) via PinBack.

Indeling harde schijf: (BR = Beschikbare Ruimte)
Primair Windows XP NTFS 5% BR sda1
Primair Windows 7 NTFS 20% BR sda2
Primair Backup Linux Ext4 25% BR sda3
Uitgebreide Overblijvende ruimte sda4
Logisch Werkschijf NTFS 25% BR sda5
Logisch Swap partitie Swap Even groot als RAM geheugen sda6
Logisch Linux Linux Ext4 Overblijvende ruimte sda7

Deze indeling kan aangepast worden naargelang de noden van een klas. De hier voor Windows XP voorziene ruimte wordt bij een klassieke Windows 7 installatie vervangen door een bootpartitie van 100 MB. M.a.w. voor Windows 7 zonder Windows XP blijft de structuur gelijkaardig. Als de computer start en werkt met SystemRescueCd 1.5.6, werkt hij ook met PinBack 10.6.

Hoe werk je met PinBack

Deze handleiding wordt in de praktijk gebruikt op de school SNT-Brugge.

De harde schijf indelen (partitioneren).

Waarschuwing: Bij het partitioneren van een harde schijf worden alle gegevens op de schijf gewist.
Herstart de computer vanaf de PinBack USB-stick.
Bij het keuzemenu mag je de voorgestelde keuze bevestigen met Return.
Let daarna op het instellen van het toetsenbord (2 of be voor een belgisch toetsenbord).
Indien de harde schijf op de computer geen derde primaire partitie bevat, krijg je een melding, die je met Return bevestigt.
Daarna druk je Enter om het autorun script af te sluiten.
Wacht tot de prompt verschijnt en start de volgende opdracht:
sh /livemnt/boot/pindapartitioneer.sh
Bij de waarschuwing dat alle gegevens op de schijf vernietigd worden, druk je Return om de schijf te partitioneren (Doorgaan).
Na het partitioneren van de harde schijf zal de computer automatisch herstarten.
Opmerking: De manier van partitioneren kan aangepast worden in het script.

Laat de computer herstarten vanaf de PinBack USB-stick.
Zorg dat je de prompt ziet en voer de volgende opdracht uit:
sh /livemnt/boot/pindaformat.sh
Na het formatteren van de harde schijf zal de computer afgesloten worden. Dit laat je toe de PinBack USB-stick veilig te verwijderen.
Opmerking: De manier van formatteren kan aangepast worden in het script.

Na het formatteren kan je Windows XP op de eerste partitie installeren.

Installatie van PinBack op de derde partitie van de harde schijf.

Herstart de computer vanaf de PinBack USB-stick.
Zorg dat je de prompt ziet en voer de volgende opdracht uit:
sh /livemnt/boot/pindarescue.sh
Na het installeren van PinBack op de harde schijf zal de computer afgesloten worden. Dit laat je toe de PinBack USB-stick veilig te verwijderen.
Opmerking: De manier van installeren kan aangepast worden in het script.

Nu kan je via de pas geïnstalleerde bootmanager een backup maken van de Windows XP partitie (SystemRescueCD > Windows XP backuppen). Om te voorkomen dat iemand van een beschadigd systeem een backup kan maken, kan je het submenu SystemRescueCD met een wachtwoord beveiligen.
Windows XP backuppen

Na het maken van de Windows XP backup, laat je de computer herstarten.
Probeer daarbij Windows 7 te starten. De computer loopt vast met de foutmelding BOOTMGR is missing. Deze stap is echter nodig om tijdens de installatie van Windows 7 de Windows XP partitie tijdelijk te verbergen.
Windows 7 starten
Herstart de computer met de toetscombinatie Ctrl+Alt+Del en installeer Windows 7 op de tweede partitie van de harde schijf.

Bootmanager terug activeren

Bij de installatie van Windows (zowel XP, Vista als 7) worden alle bootmanagers van de harde schijf verwijderd. In ons geval moeten we de bootmanager na de installatie van Windows 7 als volgt heractiveren:
Herstart de computer vanaf de PinBack USB-stick.
Zorg dat je de prompt ziet en voer de volgende opdracht uit:
sh /livemnt/boot/pindaboot.sh
Na het activeren van de bootmanager zal de computer afgesloten worden. Dit laat je toe de PinBack USB-stick veilig te verwijderen.
Opmerking: De manier waarop de bootmanager geactiveerd wordt, kan aangepast worden in het script.

Nu kan je via de geactiveerde bootmanager een backup maken van de Windows 7 partitie (SystemRescueCD > Windows 7 backuppen).

Linux kan zonder problemen naast PinBack en andere besturingssystemen geïnstalleerd worden. Let bij de installatie van openSUSE op de partitie-instellingen: sda6 wordt als swap gebruikt en sda7 wordt als / gebruikt. Daarmee volgen we niet de algemeen geldende regel dat het systeem gescheiden wordt van gebruikers gegevens, maar op een school is deze werkwijze eenvoudiger te onderhouden. Tijdens de installatieprocedure moet je opgeven geen bootmanager te gebruiken. M.a.w. we gebruiken niet de bootmanager van het te installeren Linux systeem, maar van het backupsysteem PinBack.

Na de installatie van openSUSE 11.3 maak je een backup van de Linux partitie.

Een besturingssysteem terugzetten.

Herstart de computer en start via de bootmanager openSUSE terugzetten of Windows 7 terugzetten of Windows XP terugzetten.
Wacht tot het herstellen voltooid is.
Na het herstellen van de partitie kan je kiezen tussen de computer uitschakelen of herstarten. Aan jouw de keuze.

Tips en trucs.

PinBack heeft in het bootmenu nog enkele extra opdrachten (sommige werken alleen indien het netwerk automatisch met DHCP geconfigureerd werd), Rsync server starten (verzenden van rsync backups), een HTTP server starten om de repositories (softwarebronnen) die op de backup partitie opgeslagen werden ter beschikking te stellen voor andere computers (handig voor het installeren van meerdere computers in een klas), een Reverse SSH server starten zodat de computer bereikbaar wordt via het internet (ook indien deze achter een firewall en/of proxy zit). Indien je het bootmenu SystemRescueCD > SystemRescueCD start, start SystemRescueCd zelf, Acronis True Image starten.

De commentaar in de scripts zorgt voor verdere tips en moet ervoor zorgen dat je ze kunt aanpassen naar een eigen flexibel systeem.

Hoe bouw je SystemRescueCD 1.5.6 om tot PinBack 10.6

Download het SystemRescueCd 1.5.6 (of recenter) ISO bestand van de download pagina.

Brand het ISO bestand op een CD en start de computer vanaf de SystemRescueCd (of werk met een virtuele computer). Let daarbij op de keuze van het toetsenbord (2 of be voor een belgisch toetsenbord).

Steek de USB-stick in de computer en wacht tot het systeem de USB-stick gevonden heeft.

De opgestarte SystemRescueCd bevat een script om de USB-stick op te sporen en SystemRescueCd erop te installeren. Daarbij worden alle gegevens op de USB-stick verwijderd, zorg desnoods voor een backup. Start het installatie script met de opdracht
sysresccd-usbstick dialog

Selecteer met de pijltoetsen de USB-stick, activeer de USB-stick met Spatie en bevestig uw keuze met Return.
Indien het script de installatie niet correct kan uitvoeren (geen Installation successfully completed tekst gezien), maak je met de volgende opdrachten de USB-stick eerst manueel volledig leeg (pas daarbij /dev/sdx aan naar het apparaat van de USB-stick):
fdisk /dev/sdx
o Return
w Return
en start het installatie script opnieuw.

Kopieer indien gewenst de map Recovery Manager van de Acronis True Image CD naar de USB-stick. Hernoem de map Recovery Manager naar acronis.

Download het bestand pinback.tar.gz en pak het uit op de USB-stick. Dit tar.gz bestand bevat de map boot met daarin de bootmanager en de hieronder gepubliceerde scripts.

Tip: Test of de SystemRescueCd nu vanaf USB-stick start. Virtuele computers kunnen voorlopig nog niet starten vanaf een USB-stick. Met de bootmanager van PLoP kan de virtuele machine toch vanaf USB-stick starten.

De PinBack USB-stick is klaar.

En verder

Bij het testen en ontwikkelen van systemen zoals PinBack kan je bijna niet zonder een virtuele computer zoals VMware of Virtualbox.
Op een computer waarop PinBack geïnstalleerd is, kan je de scripts op de volgende manier aanpassen:
Start via de bootmanager SystemRescueCD > SystemRescueCD en voer de volgende opdrachten uit:
mount /dev/sda3 /livemnt/boot -o rw,remount
joe /livemnt/boot/autorun
De eerste opdracht maakt de backup partitie beschrijfbaar en met de tweede opdracht pas je met de editor joe het script autorun aan.

De volgende scripts gebruiken we om PinBack op de computers te installeren:
Het script om de harde schijf te partitioneren:

#!/bin/bash
# pindapartitioneer.sh
snt="(C) Stedelijke Nijverheids- & Taalleergangen, Brugge, Dany Pinoy, `date -r $0 +'%d %B %Y'`"
titel="Harde schijf partitioneren"
# part bevat het harde schijf apparaat (sda = eerste niet ide harde schijf)
part=sda
keuze=$(dialog --backtitle "$snt" \
	--title "$titel" \
	--menu "Alle gegevens op de schijf worden door het partitioneren vernietigd?" 0 0 0 \
	"1" "Doorgaan" \
	"2" "Afbreken" \
	2>&1 1>$(tty))
case "$keuze" in
	"2" ) exit;;
esac
# koppel alle partities op de schijf af
swapoff -a
umount /dev/"$part"*
echo ";" > /tmp/partitioneer	# initialiseer partitietabel
sfdisk /dev/"$part" < /tmp/partitioneer
CYLINDERS=`sfdisk -g /dev/"$part" | cut --field=2 --delimiter=' ' `
BYTESCYLINDER=`sfdisk -l /dev/"$part" 2> /dev/null | head -3 | tail -1 | cut --field=5 --delimiter=' '`
# hier kan je het partitioneren aanpassen
echo "0,"$[ $CYLINDERS * 5 / 100]",7,*" > /tmp/partitioneer	# 5% voor Windows XP
echo ","$[ $CYLINDERS * 20 / 100]",7" >> /tmp/partitioneer	# 20% Windows 7
echo ","$[ $CYLINDERS * 25 / 100] >> /tmp/partitioneer		# 25% voor Backup
echo ",,E" >> /tmp/partitioneer					# Extended partition
echo ","$[ $CYLINDERS * 25 / 100]",7" >> /tmp/partitioneer	# 25% voor NTFS Werkschijf
echo ","$[ 2 * 1024 * 1024 * 1024 / $BYTESCYLINDER]",S" >> /tmp/partitioneer	# 2GB Swap partitie
echo ",,L" >> /tmp/partitioneer					# (rest) voor Linux
sfdisk /dev/"$part" < /tmp/partitioneer
reboot	# herstart de computer

Het script om de Windows systeempartities te formatteren:

#!/bin/bash
# pindaformat.sh
snt="(C) Stedelijke Nijverheids- & Taalleergangen, Brugge, Dany Pinoy, `date -r $0 +'%d %B %Y'`"
titel="Harde schijf formatteren"
# part bevat het harde schijf apparaat (sda = eerste niet ide harde schijf)
part=sda
# koppel de swap partitie af
swapoff -a
mkntfs -fQ /dev/"$part"1
mkntfs -fQ /dev/"$part"2
#parted /dev/"$part" rm 1 -s	# verwijder de twee Window 7 spook partities
#parted /dev/"$part" rm 2 -s
halt	# sluit de computer af, waardoor je de USB-stick veilig kunt verwijderen

Het script om PinBack na de installatie van Windows XP op de harde schijf te installeren:

#!/bin/bash
# pindarescue.sh
snt="(C) Stedelijke Nijverheids- & Taalleergangen, Brugge, Dany Pinoy, `date -r $0 +'%d %B %Y'`"
titel="SystemRescueUSB op harde schijf installeren"
# part bevat het harde schijf apparaat (sda = eerste niet ide harde schijf)
part=sda
# de backup partitie formatteren
mkfs -t ext4 /dev/"$part"3
# Pinback op de backup partitie installeren
mount /dev/"$part"3 /mnt/backup
mkdir /mnt/backup/sysrcd
# voor 32bit processors
cp /livemnt/boot/sysrcd.* /livemnt/boot/syslinux/initram.igz /livemnt/boot/syslinux/rescuecd /mnt/backup/sysrcd/
# voor 64bit processors
# cp /livemnt/boot/sysrcd.* /livemnt/boot/syslinux/initram.igz /livemnt/boot/syslinux/rescue64 /mnt/backup/sysrcd/
cp -r /livemnt/boot/boot /mnt/backup
cp /livemnt/boot/autorun /mnt/backup
chmod +x /mnt/backup/rev_ssh.sh
# cp -r /livemnt/boot/acronis /mnt/backup

# de Windows XP bootsector backuppen
mkdir /mnt/backup/backup
dd if=/dev/"$part" of=/mnt/backup/backup/windowsxp.mbr bs=512 count=1
# de bootmanager installeren
grub <<_EOF
root (hd0,2)
setup (hd0)
quit
_EOF
halt	# sluit de computer af, waardoor je de USB-stick veilig kunt verwijderen

Het script om de PinBack bootmanager na de installatie van Windows 7 te activeren:

#!/bin/bash
# pindaboot.sh
snt="(C) Stedelijke Nijverheids- & Taalleergangen, Brugge, Dany Pinoy, `date -r $0 +'%d %B %Y'`"
titel="Bootmanager op harde schijf activeren"
# part bevat het harde schijf apparaat (sda = eerste niet ide harde schijf)
part=sda
# de Windows 7 bootsector backuppen
mount /dev/"$part"3 /mnt/backup
#mkdir /mnt/backup/backup
dd if=/dev/"$part" of=/mnt/backup/backup/windows7.mbr bs=512 count=1
# de bootmanager installeren
grub <<_EOF
root (hd0,2)
setup (hd0)
quit
_EOF
halt	# sluit de computer af, waardoor je de USB-stick veilig kunt verwijderen

PinBack bestaat uit de volgende configuratiebestanden en scripts:
Het configuratiebestand met het hoofdmenu van de bootmanager:

# Het hoofdmenu van de bootmanager
# /boot/grub/menu.lst
# PinBack is geïnstalleerd op (hd0,2), m.a.w. de eerste harde schijf, derde partitie
# PinBack werkt op een scherm met een resolutie van 1280x1024 of vga=0x31A
#   andere resoluties, raadpleeg http://en.wikipedia.org/wiki/VESA_BIOS_Extensions
# default 1 zorgt ervoor dat 'Windows 7 starten' geselecteerd wordt
default 1
gfxmenu (hd0,2)/boot/message

title Desktop -- openSUSE 11.3
    root (hd0,6)
    kernel /boot/vmlinuz root=/dev/sda7 splash=silent quiet vga=0x31A showopts
    initrd /boot/initrd

title Windows 7 starten
    hide (hd0,0)
    unhide (hd0,1)
    rootnoverify (hd0,1)
    chainloader +1
    makeactive
    boot

title Windows XP starten
    hide (hd0,1)
    unhide (hd0,0)
    rootnoverify (hd0,0)
    chainloader +1
    makeactive
    boot

title openSUSE terugzetten
    root (hd0,2)
# voor 32bits processors
    kernel /sysrcd/rescuecd subdir=sysrcd setkmap=be vga=0x31a restorelinux showopts
# voor 64bits processors
#    kernel /sysrcd/rescue64 subdir=sysrcd setkmap=be vga=0x31a restorelinux showopts
    initrd /sysrcd/initram.igz
    boot

title Windows 7 terugzetten
    root (hd0,2)
# voor 32bits processors
    kernel /sysrcd/rescuecd subdir=sysrcd setkmap=be vga=0x31a restorewindows7 showopts
# voor 64bits processors
#    kernel /sysrcd/rescue64 subdir=sysrcd setkmap=be vga=0x31a restorewindows7 showopts
    initrd /sysrcd/initram.igz
    boot

title Windows XP terugzetten
    root (hd0,2)
# voor 32bits processors
    kernel /sysrcd/rescuecd subdir=sysrcd setkmap=be vga=0x31a restorewindowsxp showopts
# voor 64bits processors
#    kernel /sysrcd/rescue64 subdir=sysrcd setkmap=be vga=0x31a restorewindowsxp showopts
    initrd /sysrcd/initram.igz
    boot

title SystemRescueCd
    root (hd0,2)
# de volgende twee regels zorgen voor een wachtwoordbeveiliging
#    password --md5 $1$3UWJW/$hQ3NXVIzVGgNxIzZmbYa7.
#    lock
    configfile /boot/grub/sysrcd.lst

# Wachtwoord, genereren met grub-md5-crypt

Het configuratiebestand met het tweede menu van de bootmanager:

# Het tweede menu van de bootmanager
# /boot/grub/sysrcd.lst
default 0
gfxmenu (hd0,2)/boot/message

title Terug naar het hoofdmenu
    root (hd0,2)
    configfile /boot/grub/menu.lst

title openSUSE backuppen
    root (hd0,2)
# voor 32bits processors
    kernel /sysrcd/rescuecd subdir=sysrcd setkmap=be vga=0x31a backuplinux
# voor 64bits processors
#    kernel /sysrcd/rescue64 subdir=sysrcd setkmap=be vga=0x31a backuplinux
    initrd /sysrcd/initram.igz
    boot

title Windows 7 backuppen
    root (hd0,2)
# voor 32bits processors
    kernel /sysrcd/rescuecd subdir=sysrcd setkmap=be vga=0x31a backupwindows7
# voor 64bits processors
#    kernel /sysrcd/rescue64 subdir=sysrcd setkmap=be vga=0x31a backupwindows7
    initrd /sysrcd/initram.igz
    boot

title Windows XP backuppen
    root (hd0,2)
# voor 32bits processors
    kernel /sysrcd/rescuecd subdir=sysrcd setkmap=be vga=0x31a backupwindowsxp
# voor 64bits processors
#    kernel /sysrcd/rescue64 subdir=sysrcd setkmap=be vga=0x31a backupwindowsxp
    initrd /sysrcd/initram.igz
    boot

title RSync server backup
    root (hd0,2)
# voor 32bits processors
    kernel /sysrcd/rescuecd subdir=sysrcd dodhcp rootpass=******** setkmap=be vga=0x31a rsyncserver
# voor 64bits processors
#    kernel /sysrcd/rescue64 subdir=sysrcd dodhcp rootpass=******** setkmap=be vga=0x31a rsyncserver
    initrd /sysrcd/initram.igz
    boot

title HTTP server repos
    root (hd0,2)
# voor 32bits processors
    kernel /sysrcd/rescuecd subdir=sysrcd dodhcp rootpass=******** setkmap=be vga=0x31a httpserver
# voor 64bits processors
#    kernel /sysrcd/rescue64 subdir=sysrcd dodhcp rootpass=******** setkmap=be vga=0x31a httpserver
    initrd /sysrcd/initram.igz
    boot

title Reverse SSH
    root (hd0,2)
# voor 32bits processors
    kernel /sysrcd/rescuecd subdir=sysrcd dodhcp rootpass=******** setkmap=be vga=0x31a ar_nowait reversessh showopts
# voor 64bits processors
#    kernel /sysrcd/rescue64 subdir=sysrcd dodhcp rootpass=******** setkmap=be vga=0x31a ar_nowait reversessh showopts
    initrd /sysrcd/initram.igz
    boot

#title Acronis True Image
#   root (hd0,2)
#   kernel /acronis/kernel.dat quiet vga=0x31a ramdisk_size=40000
#   initrd /acronis/ramdisk.dat
#   boot

title SystemRescueCd
    root (hd0,2)
# voor 32bits processors
    kernel /sysrcd/rescuecd subdir=sysrcd setkmap=be vga=0x31a
# voor 64bits processors
#    kernel /sysrcd/rescue64 subdir=sysrcd setkmap=be vga=0x31a
    initrd /sysrcd/initram.igz
    boot

Het basisscript van PinBack

#!/bin/bash
# autorun
setterm -blank 0 # Schakel de schermbeveiliging uit
#for i in 1 2 3 4 5 6 7 8 9; do	# Numlock inschakelen
#	/usr/bin/setleds +num < /dev/tty${i} > /dev/null 
#done
snt="(C) Stedelijke Nijverheids- & Taalleergangen, Brugge, Dany Pinoy, `date -r $0 +'%d %B %Y'`"
titel="Automatisch systeemherstel"
function herstart	# Computer herstarten
{
	$(dialog --title "$titel" \
		--infobox "De computer wordt automatisch herstart.\nU hoeft enkel te wachten..............." 4 45 2>&1 1>$(tty))
	init 6
	sleep 3000	
}
function afsluiten	# Computer afsluiten
{
	$(dialog --title "$titel" \
		--infobox "De computer wordt automatisch afgesloten.\nU hoeft enkel te wachten..............." 4 45 2>&1 1>$(tty))
	init 0
	sleep 3000
}
function herafsluiten	# Keuze aanbieden om de computer uit te schakelen of te herstarten
{
	keuze=$(dialog --backtitle "$snt" \
		--title "$titel" \
		--menu "       Backup teruggezet, wat nu?" 10 45 2 \
		"1" "Computer uitschakelen" \
		"2" "Computer opnieuw starten" \
		2>&1 1>$(tty))
	case "$keuze" in
		"1" ) afsluiten;;
		"2" ) herstart;;
	esac
}
# Bepaal het type harde schijf
part=""
if [ -e /dev/hda3 ]; then	# Harde schijf aangesloten via IDE
	part="hda"
elif [ -e /dev/sda3 ]; then 	# Harde schijf aangesloten via SCSI of SATA
	part="sda"
else	# Harde schijf aangesloten via SCSI of SATA
	echo `grep "[sh]d[abcd]" /proc/partitions | head -1` | cut -d ' ' -f4 > /tmp/hardeschijf
	part="`cat /tmp/hardeschijf`"
	keuze=$(dialog --backtitle "$snt" \
		--title "$titel" \
		--msgbox "Er is geen derde primaire partitie op deze computer!!!\nPinBack zal pas functioneren na het partitioneren van de harde schijf." 7 70 \
		2>&1 1>$(tty))
fi
# Bepaal of er een tweede harde schijf is, en van welk type
part1=$(cat /proc/partitions | grep -w hda)	# tweede schijf is hda
if [ "$part1" ]; then
	part1=$(echo $part1 | awk '{print $4}')
fi
if [ "$part1" = "$part" ]; then	# Neen, de eerste schijf is hda
	part1=""
fi
if [ ! "$part1" ]; then
	part1=$(cat /proc/partitions | grep -w sda)	# tweede schijf is sda
	if [ "$part1" ]; then
		part1=$(echo $part1 | awk '{print $4}')
	fi
	if [ "$part1" = "$part" ]; then	# Neen, de eerste schijf is sda
		part1=""
	fi
fi
if [ ! "$part1" ]; then
	part1=$(cat /proc/partitions | grep -w hdb)	# tweede schijf is hdb
	if [ "$part1" ]; then
		part1=$(echo $part1 | awk '{print $4}')
	fi
fi
if [ ! "$part1" ]; then
	part1=$(cat /proc/partitions | grep -w sdb)	# tweede schijf is sdb
	if [ "$part1" ]; then
		part1=$(echo $part1 | awk '{print $4}')
	fi
fi
# Als de kernel opstartregel in de bootmanager de optie backuplinux bevat (zie configuatiebestand bootmanager)
if [ "`grep backuplinux /proc/cmdline`" ]; then
	mount /dev/"$part"3 /livemnt/boot -o rw,remount	# backup partitie beschrijfbaar maken
	# Oude backup overschrijven? # Update 12/08/2010
	if [ -e /livemnt/boot/backup/sntlinux.partclone.gz ]; then
		$(dialog --backtitle "$snt" \
			--title "$titel" \
			--yesno "Wilt u de oude backup behouden?" 5 35 2>&1 1>$(tty))
		if [ $? -eq "0" ]; then
			mv -f /livemnt/boot/backup/sntlinux.partclone.gz /livemnt/boot/backup/sntlinux.partclone.gz.ori
		fi						
	fi
# 	$(dialog --backtitle "$snt" \
# 		--title "$titel" \
# 		--infobox "Bezig met het aanmaken van de backup.\nEven geduld.........................." 0 0 2>&1 1>$(tty))
# 	fsarchiver -j2 -o savefs /livemnt/boot/backup/sntlinux.fsa /dev/"$part"7	# -j2 = gebruik twee processor cores
	clear
	echo "SNT Linux backuppen"
	printf '====================\n'
	partclone.extfs --clone --source /dev/"$part"7 | gzip -c > /livemnt/boot/backup/sntlinux.partclone.gz
	# Einde update 12/08/2010
	if [ $? ]; then
                $(dialog --backtitle "$snt" \
			--title "$titel" \
			--msgbox "Backup met succes afgerond." 5 47 2>&1 1>$(tty))
	else
                $(dialog --backtitle "$snt" \
			--title "$titel" \
			--msgbox "Backup onderbroken met foutmelding." 5 47 2>&1 1>$(tty))
                fi
	mount /dev/"$part"3 /livemnt/boot -o ro,remount
	herafsluiten
	# Indien geen keuze gemaakt werd toch de computer afsluiten
	afsluiten
fi
# Als de kernel opstartregel in de bootmanager de optie restorelinux bevat (zie configuatiebestand bootmanager)
if [ "`grep restorelinux /proc/cmdline`" ]; then
	# Update 12/08/2010
# 	$(dialog --backtitle "$snt" \
# 		--title "$titel" \
# 		--infobox "Bezig met terugzetten van de backup.\nEven geduld........................." 0 0 2>&1 1>$(tty))
# 	fsarchiver -j2 restfs /livemnt/boot/backup/sntlinux.fsa id=0,dest=/dev/"$part"7	# -j2 = gebruik twee processor cores
	clear
	echo "SNT Linux terugzetten"
	printf '=====================\n'
	zcat /livemnt/boot/backup/sntlinux.partclone.gz | partclone.restore --output /dev/"$part"7
	# Einde update 12/08/2010
	herafsluiten
	afsluiten
fi
# Als de kernel opstartregel in de bootmanager de optie reversessh bevat (zie configuatiebestand bootmanager)
if [ "`grep reversessh /proc/cmdline`" ]; then
	mount /dev/"$part"3 /livemnt/boot -o rw,remount	# backup partitie beschrijfbaar maken
	# script rev_ssh.sh starten na het beindigen van dit script
	echo "/livemnt/boot/rev_ssh.sh" >> /root/.zshrc
fi
# Als de kernel opstartregel in de bootmanager de optie backupwindows7 bevat (zie configuatiebestand bootmanager)
if [ "`grep backupwindows7 /proc/cmdline`" ]; then
	mount /dev/"$part"3 /livemnt/boot -o rw,remount	# backup partitie beschrijfbaar maken
	# Oude backup overschrijven?
	if [ -e /livemnt/boot/backup/windows7.img.gz ]; then
		$(dialog --backtitle "$snt" \
			--title "$titel" \
			--yesno "Wilt u de oude backup behouden?" 5 35 2>&1 1>$(tty))
		if [ $? -eq "0" ]; then
			mv -f /livemnt/boot/backup/windows7.img.gz /livemnt/boot/backup/windows7.img.gz.ori
		fi						
	fi
	clear
	echo "Windows 7 backuppen"
	printf '===================\n'
	# Backup indien aanwezig de WinRE bootpartitie van Windows 7
#	ntfsclone --save-image -o - /dev/"$part"1 | gzip -c > /livemnt/boot/backup/winre7.img.gz
	ntfsclone --save-image -o - /dev/"$part"2 | gzip -c > /livemnt/boot/backup/windows7.img.gz
	if [ $? ]; then
                $(dialog --backtitle "$snt" \
			--title "$titel" \
			--msgbox "Backup met succes afgerond." 5 47 2>&1 1>$(tty))
	else
                $(dialog --backtitle "$snt" \
			--title "$titel" \
			--msgbox "Backup onderbroken met foutmelding." 5 47 2>&1 1>$(tty))
                fi
	mount /dev/"$part"3 /livemnt/boot -o ro,remount
	herafsluiten
	afsluiten
fi
# Als de kernel opstartregel in de bootmanager de optie restorewindows7 bevat (zie configuatiebestand bootmanager)
if [ "`grep restorewindows7 /proc/cmdline`" ]; then
	clear
	echo "Windows 7 terugzetten"
	printf '=====================\n'
	gunzip -c /livemnt/boot/backup/windows7.img.gz | ntfsclone --restore-image --overwrite /dev/"$part"2 -
	# achterdeur om bij het opstarten van Windows 7 een programma te laten starten
	mount /dev/"$part"2 /mnt/custom
	if [ -e /mnt/custom/ProgramData/Microsoft/Windows/Start\ Menu/Programs/Startup/startup.exe ]; then
		rm -f /mnt/custom/ProgramData/Microsoft/Windows/Start\ Menu/Programs/Startup/startup.exe
	fi
	cp /livemnt/boot/startup.exe /mnt/custom/ProgramData/Microsoft/Windows/Start\ Menu/Programs/Startup/
	sync
	umount -l /mnt/custom
	herafsluiten
	afsluiten
fi
# Als de kernel opstartregel in de bootmanager de optie backupwindowsxp bevat (zie configuatiebestand bootmanager)
if [ "`grep backupwindowsxp /proc/cmdline`" ]; then
	mount /dev/"$part"3 /livemnt/boot -o rw,remount	# backup partitie beschrijfbaar maken
	# Oude backup overschrijven?
	if [ -e /livemnt/boot/backup/windowsxp.img.gz ]; then
		$(dialog --backtitle "$snt" \
			--title "$titel" \
			--yesno "Wilt u de oude backup behouden?" 5 35 2>&1 1>$(tty))
		if [ $? -eq "0" ]; then
			mv -f /livemnt/boot/backup/windowsxp.img.gz /livemnt/boot/backup/windowsxp.img.gz.ori
		fi						
	fi
	clear
	echo "Windows XP backuppen"
	printf '====================\n'
	ntfsclone --save-image -o - /dev/"$part"1 | gzip -c > /livemnt/boot/backup/windowsxp.img.gz
	if [ $? ]; then
                $(dialog --backtitle "$snt" \
			--title "$titel" \
			--msgbox "Backup met succes afgerond." 5 47 2>&1 1>$(tty))
	else
                $(dialog --backtitle "$snt" \
			--title "$titel" \
			--msgbox "Backup onderbroken met foutmelding." 5 47 2>&1 1>$(tty))
                fi
	mount /dev/"$part"3 /livemnt/boot -o ro,remount
	herafsluiten
	afsluiten
fi
# Als de kernel opstartregel in de bootmanager de optie restorewindowsxp bevat (zie configuatiebestand bootmanager)
if [ "`grep restorewindowsxp /proc/cmdline`" ]; then
	clear
	echo "Windows XP terugzetten"
	printf '======================\n'
	gunzip -c /livemnt/boot/backup/windowsxp.img.gz | ntfsclone --restore-image --overwrite /dev/"$part"1 -
	herafsluiten
	afsluiten
fi
# Als de kernel opstartregel in de bootmanager de optie backuprsync bevat (zie configuatiebestand bootmanager)
# deze module wordt niet op school gebruik
# deze module maakt van evoluerende systemen een backup naar een speciaal opgezette rsync server, 
# deze rsync server synchroniseert zich via deze module met de op deze computer aanwezige partities
if [ "`grep backuprsync /proc/cmdline`" ]; then
	printf '\033[0m'; clear # Kleuren standaard
	echo "Uitvoeren Rsync backup:"
	printf '=======================\n'
	backupip=$(dialog --backtitle "$snt" \
		--title "$titel" \
		--inputbox "\n Welk IP-adres heeft de Rsync server?" 0 0 "192.168.1." \
		2>&1 1>$(tty))
	rsync $backupip::
	if [ $? -ne 0 ]; then
		printf '\033[1;31;40m Kon geen verbinding met backupserver opbouwen.\033[0m\n' # Rode letters
		printf '\033[1;32;40m Druk Return om door te gaan.' # Groene letters op zwarte achtergrond
		read Keypress
	else
		rsync -avHxh --numeric-ids --progress --delete --exclude="lost+found/" /livemnt/boot/ $backupip::backup/"$part"3 2>>/tmp/rsync.error | tee -a /tmp/rsync.log
		mount /dev/"$part"7 /mnt/backup
		rsync -avHxh --numeric-ids --progress --delete --exclude="lost+found/" /mnt/backup/ $backupip::backup/"$part"7 2>>/tmp/rsync.error | tee -a /tmp/rsync.log
		umount -l /dev/"$part"7
		# het logboek en foutenrapport van de backup naar de rsync server sturen
		rsync /tmp/rsync.log $backupip::backup
		rsync /tmp/rsync.error $backupip::backup
		# de rsync server een bericht sturen dat de backup voltooid is.
		touch /tmp/stop
		rsync /tmp/stop $backupip::backup
		# na het beëindigen van de backup wordt de computer automatisch afgesloten
		printf '\033[1;32;40m De computer wordt binnen de minuut afgesloten.' # Groene letters op zwarte achtergrond
		sleep 60
		afsluiten
	fi
	herafsluiten
	afsluiten
fi
# Als de kernel opstartregel in de bootmanager de optie rsyncserver bevat (zie configuatiebestand bootmanager)
# Start een rsync server waarbij de backup partitie door andere computers bereikbaar wordt (alleen lezen)
# Dit kan niet gebruikt worden met de voorgaande module, wel met een speciaal rsync script
if [ "`grep rsyncserver /proc/cmdline`" ]; then
	echo "uid = root" > /etc/rsyncd.conf
	echo "gid = root" >> /etc/rsyncd.conf
	echo "[backup]" >> /etc/rsyncd.conf
	echo "path = /livemnt/boot" >> /etc/rsyncd.conf
	echo "comment = Backup" >> /etc/rsyncd.conf
	# schrijven mogelijk maken, bijvoorbeeld voor een backup server (zie vorige module)
#	echo "read only = false" >> /etc/rsyncd.conf
#	mount /dev/"$part"3 /livemnt/boot -o rw,remount	# backup partitie beschrijfbaar maken
	rsync --daemon
	$(dialog --backtitle "$snt" \
		--title "$titel" \
		--msgbox "Rsync daemon gestart.\nHet IP-adres van deze computer is `/sbin/ifconfig eth0 | grep 'inet ' | cut -d : -f2 | cut -d ' ' -f1`" 0 0 2>&1 1>$(tty))
	herafsluiten
	afsluiten
fi
# Als de kernel opstartregel in de bootmanager de optie httpserver bevat (zie configuatiebestand bootmanager)
# Deze HTTP server maakt de softwarebronnen toegankelijk, ideaal om een linux netwerkinstallatie op andere computers uit te voeren)
if [ "`grep httpserver /proc/cmdline`" ]; then
	thttpd -r -d /livemnt/boot/opensuse4snt/repos
	$(dialog --backtitle "$snt" \
		--title "$titel" \
		--msgbox "HTTP server gestart.\nHet IP-adres van deze computer is `/sbin/ifconfig eth0 | grep 'inet ' | cut -d : -f2 | cut -d ' ' -f1`" 0 0 2>&1 1>$(tty))
	herafsluiten
	afsluiten
fi
exit
# Acronis TrueImage aan menu.lst (Grub) toevoegen
# ===============================================
#		LABEL acronis
#		KERNEL /acronis/kernel.dat
#		APPEND rw initrd=/acronis/ramdisk.dat /s mbrcrcs=on vga=788 load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=100000 quiet

Script om een Reverse SSH verbinding op te bouwen met een computer achter een firewall en/of router

#!/bin/bash
# rev_ssh.sh
# Met dit script wordt een Reverse SSH verbinding naar de computer computer.thuis.be met het account gebruiker opgebouwd
# computer.thuis.be kan vervangen worden door een IP adres, maar deze zijn bij thuisgebruikers meestal variabel
# Variabele IP adressen kan je aan een naam koppelen via diensten zoals dyndns.
# De computer waarop dit script wordt gestart, zal om de zoveel tijd (tot 20 minuten tussen twee pogingen) een SSH tunnel naar uw computer thuis proberen op te bouwen
# Indien uw computer thuis de verbinding kan aanvaarden (ingeschakeld is, poort 22 moet in de router de tunnel doorsturen (forward) naar de thuiscomputer die de verbinding kan aanvaarden)
# Het gebruik van de FTP server kan je indien gewenst verwijderen (veiliger)

# alleen op eerste terminal opstarten
if [ $(tty) != "/dev/tty1" ]; then exit; fi
echo Reverse SSH actief
# maak een nieuwe sleutel aan
rm -r -f $HOME/.ssh
ssh-keygen -t rsa -q -f $HOME/.ssh/id_rsa -N ""
# functie om een bestand op een ftp server te plaatsen
function send_ftp {
ftp -n "ftp.server.be" <<_EOF
user gebruiker wachtwoord
binary
put $1 $2
quit
_EOF
}
# publiceer de publieke sleutel op de ftp server
send_ftp "$HOME/.ssh/id_rsa.pub" "public_html/id_rsa.pub"

REMOTE_HOST=gebruiker@computer.thuis.be
# willekeurige poort gebruiken (veiliger)
REMOTE_PORT=$((2000 + RANDOM%63000))
# extern IP adres opzoeken
echo "IP adres: `wget -O - -q icanhazip.com`" > $HOME/rev_ssh.log
# hoe maak ik thuis een verbinding met deze computer
echo "Connect: ssh $USER@localhost -p $REMOTE_PORT" >> $HOME/rev_ssh.log
# ssh opdracht om de tunnel met uw thuis computer op te bouwen
COMMAND="ssh -o StrictHostKeyChecking=no -o BatchMode=yes -N -R $REMOTE_PORT:localhost:22 $REMOTE_HOST"
# ruim bij het verlaten van dit script alles op
function on_exit()
{
	pkill -f -x "$COMMAND"
}
trap on_exit EXIT
# opdracht om de tunnel te testen
TUNNELTEST="netstat -an | egrep \"tcp.*:$REMOTE_PORT.*LISTEN\""
# het logboek op het scherm volgen
(tail -f $HOME/rev_ssh.log) &
# eindeloze lus
while true; do
	# Tijdstempel
	echo "Tijd: `date`" >> $HOME/rev_ssh.log
	# bekende verbindingen verwijderen (thuis krijgt uw computer regelmatig een nieuw IP adres)
	rm -f $HOME/.ssh/known_hosts
	# Is er reeds een ssh tunnel actief?
	echo -n "Tunneltest: " >> $HOME/rev_ssh.log
	ssh -o StrictHostKeyChecking=no -o BatchMode=yes $REMOTE_HOST "$TUNNELTEST" >> $HOME/rev_ssh.log 2>&1
	if [ $? -ne 0 ] ; then
		# Neen, bouw een nieuwe ssh tunnel op
		pkill -f -x "$COMMAND" >> $HOME/rev_ssh.log
		echo -n "Tunnel activeren: " >> $HOME/rev_ssh.log
		($COMMAND >> $HOME/rev_ssh.log 2>&1) &
	fi
	# logboek op ftp server plaatsen
	send_ftp "$HOME/rev_ssh.log" "public_html/rev_ssh.log"
	# wacht tussen 0 en 20 minuten om de ssh tunnel te testen of opnieuw op te bouwen
	sleep $((RANDOM%20))m
done

Script om thuis de Reverse SSH verbinding te aanvaarden

#!/bin/bash
# rev_ssh_client.sh
# Dit script aanvaard de Reverse SSH tunnel
# en wordt dus op de thuiscomputer computer.thuis.be door gebruiker gestart

# bekende verbindingen en sleutels verwijderen (elke verbinding gebruikt nieuw aangemaakte sleutels)
rm -r -f $HOME/.ssh
# haal de nieuwe publieke sleutel van de http/ftp server
wget -O $HOME/id_rsa.pub http://ftp.server.be/map/naar/id_rsa.pub
# sleutel toevoegen aan de sleutelbos
mkdir $HOME/.ssh
cat $HOME/id_rsa.pub > $HOME/.ssh/authorized_keys
rm $HOME/id_rsa.pub
# SSH dienst opstarten
sudo /etc/init.d/sshd start
# Reverse SSH logboek ophalen en tonen
wget -O $HOME/rev_ssh.log http://ftp.server.be/map/naar/rev_ssh.log
more $HOME/rev_ssh.log

Script waarmee de lokale softwarebronnen gesynchroniseerd worden

#!/bin/bash
# pindarsync.sh
# Op een andere computer moet een Rsync server gestart zijn.
# Dit script staat op de USB-stick waarmee PinBack geïnstalleerd wordt
# en wordt opgestart nadat de computer vanaf de USB-stick werd opgestart.
# Dit script synchroniseert de softwarebronnen van de Rsync server (bron) met deze op de computer waarop dit script wordt gestart (doel).

snt="(C) Stedelijke Nijverheids- & Taalleergangen, Brugge, Dany Pinoy, `date -r $0 +'%d %B %Y'`"
titel="RSync client (doel)"
ipadres=$(dialog --backtitle "$snt" \
		--title "$titel" \
		--inputbox "\n Welk IP-adres heeft de Rsync server?" 9 42 "10.0.0." \
		2>&1 1>$(tty))
mount /dev/sda3 /mnt/custom
rsync -avHxh --numeric-ids --progress --delete $ipadres::backup/opensuse4snt/ /mnt/custom/opensuse4snt/ 2>>/tmp/rsync.error | tee -a /tmp/rsync.log
cat /tmp/rsync.error
printf '\n\033[1;32;40mControleer bovenstaande meldingen op ERRORS.\n' # Groene letters op zwarte achtergrond