Zurück zur Einstiegsseite

Die Einrichtung des NT-Raumes

Die Neueinrichtung unseres NT-Raumes ("Neue Technologien") erfolgt mit drei voneinander unabhängigen Systemen, so dass die Benutzer wahlweise unter Windows 98 mit INiS (einer sogenannten pädagogischen Oberfläche), Windows 98 "pur" oder Linux arbeiten können.

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:

Nach oben

Festplatten- und Partitionscloning mit NFS und dem Linux-Rettungssytem

Dieser Abschnitt beschreibt, wie man aus dem Rettungssystem der SuSE-Distribution (hier in der Version 7.1) heraus Zugriff auf das Netzwerk bekommt, um die Clients im Netzwerk Partitions- oder gar plattenweise zu klonen, nachdem ein Musterclient fertig eingerichtet wurde.

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 /backup
ein 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 ;-)

Nach oben

Partitionierung der Clients

Die Arbeitsstationen werden mit zwei Windows-98-Installationen (eine davon mit der pädagogischen Oberfläche INiS) und einer Linux-Installation ausgestattet. Die Partitionierung der 10-GB-Platten entspricht folgendem Schema:
  1. Primäre Partition für Windows 98 mit INiS (2 GB, Typ vfat 32, lba)
  2. Primäre Partition für Windows 98 "pur" (2 GB, Typ vfat 32, lba)
  3. Primäre Partition für die virtuelle Sicherungsplatte für den in INiS integrierten HD-Guard (400 MB, Typ vfat 32, versteckt)
  4. Erweiterte Partition für Linux
  5. /dev/hda5 ist die Swap-Partition für Linux (100 MB)
  6. /dev/hda6 wird als /boot-Partition unterhalb der 1024-Zylinder-Grenze eingerichtet (hierbei reicht ein Zylinder mit ca. 8 MB völlig aus)
  7. /dev/hda7 wird für das Wurzelverzeichnis gemountet (gesamter Rest)

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.

Nach oben

Grundeinrichtung der Clients

Die Linux-Installation mit YaST2 und NFS

In der Ausgangssituation befindet sich auf jeder Clientplatte bereits die Windows-98-Installation mit INiS, die fertig formatierte Windows-98-Partition sowie die Sicherungspartition. Der Rest der Platte wird entsprechend den obigen Angaben für Linux partitioniert.

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 /cdrom
werden 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.

Die Windows-Installation

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 /mnt
in 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 /win
einzugeben. Man wechselt mit "cd /" ins Wurzelverzeichnis und archiviert von dort mit
tar cfz /mnt/win_aktuell.tgz win
das 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; done
auf 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:

  1. Alle Rechner unter Linux hochfahren.
  2. Auf dem Server folgende Schleife starten:
    for i in $clients; do ssh $i win_restore \&; done
    
Das ist alles! Ab einer bestimmten Größe macht die (sehr schnelle, s.o.) Parallelinstallation Probleme. Dann muss das \&-Symbol entfallen, die Rechner werden nacheinander restauriert. Das dauert je nach Anzahl der Clients zwar wesentlich länger, ist aber zuverlässig! Wer es ganz komfortabel möchte, fügt in diesem Fall ein Shutdown-Kommando (ssh $i halt \&;) in die Schleife ein, so dass sich jeder Rechner nach erfolgreicher Bearbeitung automatisch herunterfährt und ausschaltet. Der Administrator kann also nach Hause gehen, während sein Netzwerk komplett erneuert wird ;-)

Nach oben

Weitere Einrichtung des Servers

Ein eigener Server unter SuSE-Linux 7.2 (nachträglich eingerichtet) mit der IP-Adresse 192.168.0.1 und dem Rechnernamen master soll später die Funktionen des Hilfsservers pc-00 übernehmen. Dazu wird die Backup-Platte umgebaut und in das Dateisystem des Servers eingehängt. Auf dem Server wird zunächst die ISDN-Anbindung konfiguriert und Squid mit rcsquid start oder dauerhaft mit einem entsprechenden Eintrag in /etc/rc.config (per Hand oder mit yast) gestartet. Auf den Clients kann nun sowohl unter Linux als auch unter Windows (funktionierender TCP/IP-Sockel vorausgesetzt) das Internet über den Proxy-Port 3128 (neben der IP-Adresse des Servers im Browser einzustellen) erreicht werden. DHCP wird eingerichtet (entsprechende /etc/dhcp.conf ist hier als Beispieldatei einzusehen), um unter Windows eine individuelle Anpassung der IP-Adressen zu vermeiden (s.o.), außerdem wird ein Skript /bin/lon:
/usr/sbin/isdnctrl dial ipp0
zum Einschalten des Internet und ein entsprechendes /bin/loff:
/usr/sbin/isdnctrl hangup ipp0
zum 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 master
auf 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.log
ist sehr aufschlussreich, mit grep kann (in Echtzeit?) nach bestimmten Schlüsselwörtern gefiltert und bei Bedarf ein Alarmsignal ausgelöst werden...

Nach oben

Einrichtung des Bootmanagers LILO

Da LILO bereits bei der Installation mit YaST2 in der für Schülerinnen und Schüler sehr ansprechenden Grafikversion im MBR eingerichtet wurde, braucht die Konfigurationsdatei /etc/lilo.conf nur noch ein wenig modifiziert zu werden, um die Reihenfolge im Auswahlmenü sowie die sogenannten Change-Rules zur Modifikation der Partitionstyp-IDs festzulegen:
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
  restricted
Abschließend wird /sbin/lilo aufgerufen, um den Bootmanager mit den neuen Einstellungen zu aktivieren.

Nach oben


Aus einer E-Mail:

".... 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 \&; done
Nach 3-4 Minuten war das Windows auf 15 Rechnern neu installiert! Runterfahren der Rechner ging dann analog:
for i in $clients; do ssh halt \&; done
Linux ist schon irgendwie genial, oder?"

Zurück zur Einstiegsseite


Rüdiger Franz
Last modified: Thu Aug 23 15:56:48 CEST 2001