Die Linux-Installation erfüllt dabei mindestens eine Doppelfunktion: Von hier aus kann das gesamte System gesichert und zum Teil auch administriert werden, außerdem stehen sämtliche Vorteile zur Verfügung, die dieses hervorragende Multiuser-OS gerade für den Einsatz auch als Arbeitsplatz-Betriebssystem in Schulen mit sich bringt.
Die Einrichtung des NT-Raumes wird hier in groben Zügen dokumentiert:
Zunächst ist ein Rechner unter Linux als NFS-Server einzurichten: Entsprechende Schalter in /etc/rc.config überprüfen bzw. setzen, mit
mkdir /backup; chmod 777 /backupein zu exportierendes Verzeichnis mit Schreib- und Leserechten erstellen, dieses mit dem Eintrag
/backup (rw,no_root_squash)in der Datei /etc/exports als NFS-Laufwerk festlegen und das Netzwerk z.B. mit "init 1" und "init 5" (SuSE 7.1) neu starten.
Auf dem Musterclient (pc-01), dessen Platte geklont werden soll, wählt man nach dem Booten mit CD1 der SuSE-Distribution (Eingabe "manual" am Bootprompt) zunächst das entsprechende Netzwerkkartenmodul, indem man aus dem Hauptmenü von Linuxrc das Untermenü "Kernelmodule (Hardware-Treiber)" und dort "Netzwerktreiber laden" aufruft. Danach kehrt man ins Hauptmenü zurück, wählt "Installation / System starten" und startet das Rettungssystem erst einmal in der Version "Netzwerk (NFS)", um hier die erforderlichen IP-Adressen einzugeben. Nach der Eingabe der Nameserver-IP wird die folgende Aktion (NFS-Laufwerk mounten, um ein Rettungssystem von dort zu starten) mit der Escape-Taste abgebrochen. Die Tatsache, dass auf /backup kein Rettungssystem-Image gefunden werden kann, würde zwangsläufig zu einer Fehlermeldung führen, die dann mit der Eingabetaste quittiert werden müsste. Danach kann mit den gemachten Einstellungen das Rettungssystem erneut geladen werden, diesmal von "CD-ROM". Nun lässt sich mit dem Befehl
mount -t nfs 192.168.0.1:/backup /mnt
das NFS-Verzeichnis in den lokalen Verzeichnisbaum des Rettungssystems einhängen (als IP die des NFS-Servers angeben). Telnet und ftp sollten ebenfalls funktionieren...
Nach diesen Vorbereitungen hat man die Möglichkeit, quasi "von außen" die Platte des Clients auf das entfernte NFS-Laufwerk zu kopieren, wobei mehrere Varianten denkbar sind:
Die erste Variante erstellt ein 1:1-Abbild der gesamten Platte (/dev/hda) oder einer bestimmten Partition (/dev/hda1 oder /dev/hda2 oder ...) und legt dieses auf dem NFS-Server als Image ab:
dd if=/dev/hda of=/mnt/pc-01.hda
Dasselbe mit Komprimierung:
dd if=/dev/hda | gzip -9 | dd of=/mnt/pc-01.hda.gz
Zurück geht es analog auf dem nächsten Rechner (pc-02):
dd if=/mnt/pc-01.hda of=/dev/hda
bzw.
dd if=/mnt/pc-01.hda.gz | gunzip -c | dd of=/dev/hda
Die zweite Variante mit tar ist deutlich platzsparender, da nicht alle Sektoren (auch die unbelegten), sondern nur die Dateien kopiert werden. Sie setzt auch nicht wie die erste Variante eine identische Partitionierung von pc-01 und pc-02 voraus. Es können allerdings nur einzelne Partitionen gesichert werden. Für eine Windowsinstallation in der ersten Partition ergäbe sich:
mkdir /windows mount -t vfat /dev/hda1 /windows tar cfz /mnt/windows.tgz /windows
Zum Zurückschreiben analog:
mkdir /windows mount -t vfat /dev/hda1 /windows rm -rf /windows/* cd / tar xfz /mnt/windows.tgz
Die dritte Zeile löscht zuvor sämtliche alte Dateien der Windowspartition (Vorsicht!), was bei einer späteren Restauration als Alternative zu "format c:" (unter Windows) sinnvoll wäre.
Weitere Hinweise zu diesem Thema findet man unter
http://lbs.hh.schule.de/ak/linux/neu/skopie.htm
und
http://pckp.theochem.uni-stuttgart.de/winbackup.html.
Ich übernehme keine Verantwortung für eventuelle Schäden ;-)
Mit fdisk (verfügbar im Rettungssystem der ersten CD der SuSE-Distibution) kann diese Partitionierung bequem vorgenommen werden. Zu beachten ist, dass das Windows der zweiten Partition nur dann gestartet werden kann, wenn die erste Partition ausgeblendet und die zweite als aktiv markiert wird. Auch dies lässt sich mit fdisk manuell durch Umtragen der Partitionstyp-ID von 0x0c (= normal) auf 0x1c (= versteckt) bewerkstelligen. Eine eigene Bootpartition ist übrigens bei modernen BIOS-Versionen nicht mehr nötig, da seit SuSE 7.1 auch Partitionen jenseits der 1024-Zylindergrenze direkt gestartet werden können.
Für den alltäglichen Betrieb wird der Bootmanager LILO eingesetzt, der sich so konfigurieren lässt, dass er beim Start einer Windowspartition diese aktiviert und die jeweils andere nach dem beschriebenen Schema automatisch ausblendet.
Um bei der Installation der Clients möglichst effizient vorzugehen, wird ein Rechner mit einer großen Zusatzfestplatte (45 GB) ausgestattet und als "Hilfsserver" ausgebaut: In der vorgesehenen Partition (s.o.) wird zunächst Linux installiert, die Zusatzplatte als /backup-Verzeichnis gemountet (in YaST1 unter "Einstellungen zur Installation -> Ziel-Partitionen/Dateisysteme festlegen") und dieses in /etc/exports mit Schreib- und Leserechten für alle anderen Clients eingetragen. Mit YaST1 wird der Rechner sodann als NFS-Server deklariert und durch einem Neustart (oder alternativ "init 1", dann "init 5") der NFS-Dämon aktiviert. Mit
mount /cdrom; cp -r /cdrom/* /backup/suse7.1; umount cdrom; eject /cdromwerden nun nacheinander alle 7 CD-ROMs in ein gemeinsames Verzeichnis auf der Backup-Platte kopiert, welches im nächsten Schritt von den Clients als Installationsverzeichnis gemountet wird.
Dazu ist beim Booten auf den Clients mit der ersten SuSE-CD-ROM (wie schon zuvor bei der Partitionierung mit fdisk) "manual" einzugeben, sobald der Bootprompt erscheint. Man kommt dann ins Hauptmenü von Linuxrc, wo bei "System installieren" das Quellmedium NFS anzugeben ist. Die Installation läuft nach Eingabe der entsprechenden IP-Adressen (192.168.0.1xx mit xx=01 bis 15 für die Clients und xx=00 für den NFS-Server) und des Installationsverzeichnisses auf dem Server (also /backup/suse7.1) und nach der Wahl der Installationsart (hier YaST2) genau wie mit der üblichen Installation mit CD-ROMs ab. Jedoch entfällt hier der lästige Wechsel der Medien, außerdem kann die Installation der Clients parallel ablaufen. Bei 15 Rechnern (Standardinstallation mit Office) dauert das weniger als zwei Stunden. Zu beachten ist, dass entgegen der Voreinstellung der Bootmanager LILO im MBR installiert wird. Als maximale Auflösung für einen 17-Zöller in der Schule empfehle ich 1024x768, also XGA.
Nachdem sämtliche Clients mit Linux ausgestattet und für das Netzwerk konfiguriert sind, wird auf einem Rechner in der vorgesehenen Partition (diese vorher aktivieren und die andere Windowspartition verstecken, s.o.) eine Musterinstallation von Windows-98 vorgenommen. Nun wird wieder Linux gebootet und das /backup-Verzeichnis mit
mount -t nfs 192.168.0.100:/backup /mntin das lokale Dateisystem eingebunden. Wenn vorher in YaST1 unter "Einstellungen zur Installation -> Ziel-Partitionen/Dateisysteme festlegen" der Mountpunkt /win für die Windowspartition angegeben wurde, erübrigt sich für die Zukunft ein manuelles Mounten. Ansonsten ist analog zu oben
mount -t vfat /dev/hda2 /wineinzugeben. Man wechselt mit "cd /" ins Wurzelverzeichnis und archiviert von dort mit
tar cfz /mnt/win_aktuell.tgz windas installierte Windows als komprimiertes tar-Archiv win_aktuell.tgz im NFS-Verzeichnis.
Das folgende Script fasst die Backup-Prozedur noch einmal zusammen:
#!/bin/sh # win_backup zur Sicherung der lokalen Windowsinstallation über das Netz echo -n "Soll Windows von /dev/hda2 neu auf dem Server gesichert werden? (j/n) " read taste if ["$taste" != "j"]; then exit 0 fi mount -t vfat /dev/hda2 /win mount -t nfs 192.168.0.100:/backup /mnt cd / tar cfz /mnt/win_aktuell.tgz win umount /mnt umount /win echo "Windows wurde als Archiv auf dem Server gesichert."
Die mount-Kommandos sind natürlich nur dann auszuführen, wenn die entsprechenden Verzeichnisse noch nicht eingehängt sind ;-)
Nach der erfolgreichen Archivierung wird nun auf allen anderen Rechnern Linux gestartet und die entsprechende Restore-Prozedur ausgeführt:
#!/bin/sh # win_restore zur Restauration der lokalen Windowsinstallation über das Netz echo "Restauration der Windows-Installation auf /dev/hda2 ..." mount -t vfat /dev/hda2 /win mount -t nfs 192.168.0.100:/backup /mnt rm -rf /win/* cd / tar xfz /mnt/win_aktuell.tgz mv /win/windows/system.dat /win/windows/system.dat.bak sed s/pc-xx/`hostname`/g < /win/windows/system.dat.bak > /win/windows/system.dat umount /mnt umount /win echo "Windows auf /dev/hda2 ist wieder restauriert."
Die Zeile "rm -rf /win/*" zum Löschen aller Windowsdateien ist bei der Erstinstallation sicher überflüssig, jedoch bei einer späteren Installation sehr sinnvoll, um den Originalzustand wieder herzustellen.
Die Modifikation der Registry-Datei system.dat dient dazu, den Rechnernamen unter Windows gleichlautend dem der lokalen Linux-Installation zu setzen. Falls nämlich unter Windows TCP/IP eingerichtet wird, kann zwar die IP-Adresse über DHCP von einem entsprechend konfigurierten Linux-Server bezogen werden, jedoch ist der Rechnername trotzdem noch individuell anzupassen.
Auf diese Weise können mehrere Ausbaustufen der Windows-Installation als entsprechend benannte tar-Archive (z.B. mit "cp win_aktuell.tgz win_98_math1_office_inet.tgz") auf dem Server gespeichert werden und bei Bedarf durch zurückkopieren in win_aktuell.tgz jederzeit wieder ohne Probleme restauriert werden.
Per ssh-Kommando können die lokalen Restaurationsskripts zentral vom Server aus angestoßen werden. Hierzu empfiehlt es sich, mit dem Kommando ssh-keygen (als Root im Homeverzeichnis) einmalig zuvor ein Schlüsselpaar zu generieren und den öffentlichen Schlüssel per
for i in $clients; do scp /root/.ssh/identity.pub $i:/root/.ssh/authorized_keys; doneauf alle Client-PCs zu verteilen. Die Umgebungsvariable $clients ist in /root/.bashrc definiert mit
export clients="pc-00 pc-01 pc-02 pc-03 ... pc-15"
In der Praxis dauert diese Ersteinrichtung bzw. Restauration eines "nackten" weniger als zwei Minuten! Zur Auflösung der in $clients genannten Rechnernamen ist unter Linux eine Datei /etc/hosts mit den Namen der einzelnen Rechnern und ihren IP-Adressen zu erstellen und diese netzweit zu kopieren, um die Rechner direkt über ihre Namen ansprechen zu können und sich die Tipperei mit den Zahlen zu ersparen. Eine entsprechende Datei c:\windows\hosts leistet unter Windows dieselben Dienste, sie kann ebenfalls mit scp auf alle Rechner im Netz verteilt werden.
Schließlich kann die gesamte Windowsinstallation inclusive aller eingerichteten Progamme netzweit zentral vom Linuxserver aus restauriert werden:
for i in $clients; do ssh $i win_restore \&; done
/usr/sbin/isdnctrl dial ipp0zum Einschalten des Internet und ein entsprechendes /bin/loff:
/usr/sbin/isdnctrl hangup ipp0zum Ausschalten des Internet erstellt. Nun können sich Lehrer, die einen Account auf dem Linuxserver haben (sofern sie in der Gruppe dialout aufgenommen sind), von Windows 98 aus über
telnet masterauf dem Server remote einloggen, das Internet per "lon" ein- und über "loff" wieder ausschalten. Die Schüler können dazwischen ohne eigene Anmeldung surfen, jedoch ist eine Kontrolle trotzdem möglich, da in der Datei /var/squid/log/access.log die jeweiligen IP-Adressen der Rechner gespeichert sind, von denen aus die Zugriffe auf Webseiten erfolgen. Die Zuordnung der Schülerinnen und Schüler zu den Rechnern könnte zum Beispiel über eine Unterschriftenliste erfolgen, in die sich die Benutzer zu Beginn des Unterrichts einzutragen haben. Das Verfolgen des Protokolls mit
tail -f /var/squid/log/access.logist sehr aufschlussreich, mit grep kann (in Echtzeit?) nach bestimmten Schlüsselwörtern gefiltert und bei Bedarf ein Alarmsignal ausgelöst werden...
boot = /dev/hda vga = normal read-only menu-scheme = Wg:kw:Wg:Wg lba32 prompt # timeout = 100 message = /boot/message change-rules reset type = win98 normal = 0x0c hidden = 0x1c other = /dev/hda1 label = INiS table = /dev/hda change partition = /dev/hda1 set = win98_normal activate partition = /dev/hda2 set = win98_hidden deactivate other = /dev/hda2 label = Windows_98 table = /dev/hda # password = mein_passwort change partition = /dev/hda1 set = win98_hidden deactivate partition = /dev/hda2 set = win98_normal activate image = /boot/vmlinuz label = Linux root = /dev/hda7 initrd = /boot/initrd password = mein_passwort restrictedAbschließend wird /sbin/lilo aufgerufen, um den Bootmanager mit den neuen Einstellungen zu aktivieren.
".... heute habe ich auf einem Rechner von zwei Schülern unter Windows ein paar Matheprogramme einrichten lassen. Danach habe ich diese Windowsinstallation vom Server aus per ssh auf 15 Clients verteilt, ohne mich auch nur auf einem einzigen Rechner lokal anzumelden. Eine for-Schleife leistete hier gute Dienste:
for i in $clients; do ssh $i win_restore \&; doneNach 3-4 Minuten war das Windows auf 15 Rechnern neu installiert! Runterfahren der Rechner ging dann analog:
for i in $clients; do ssh halt \&; doneLinux ist schon irgendwie genial, oder?"