|
|
Besonderheiten Diskless-Clients:
|
Eine Diskless-Workstation ist ein PC der ohne Festplattenspeicher betrieben wird. Er holt seine Daten (Kernel, Root-Filesystem, Daten/Programme) über das Netz von einem Fileserver. Auf dem Client wird nur ein Netzwerkkarte mit BOOT-ROM oder BOOT-Diskette als Festwertspeicher benötigt.
Ablauf des Bootvorgangs des Diskless-Clients:
Zuerst benötigt man einen Kernel der speziell für die Anforderungen der Diskless Client angepasst ist (in meinem Fall 2.2.15).
Dazu Installiert man bei Debian die Pakete "kernel-headers-2.2.15" und "kernel-source-2.2.15" mit "dselect". Nun muß man den Kernel-Source noch entpacken. Dazu wechselt man in das Verzeichnis "/usr/src" und entpackt die Archive mit "tar xIvf kernel-headers-2.2.15.tar.bz2" und "tar xIvf kernel-source-2.2.15.tar.bz2".
Nun muß man das Verzeichnis "kernel-source-2.2.15" in "linux" umbenennen. Im Verzeichnis kernel-headers befinden sich wichtige Header zu ihnen sollte man einen Symbolischen Link einbauen. Dazu geht man in das Verzeichnis "/usr/scr/linux/include/", benennt das Verzeichnis Linux um oder löscht es. Dann kann man mit dem Befehl
"ln -s /usr/scr/linux/include/linux/include/linux /usr/scr/linux/kernel-headers-2.2.15" eine Verknüpfung mit dem Kernel Headern machen.
Nun kann man mit dem Aufruf "make menuconfig" unter X-Windows den Kernel komfortabel konfigurieren und an die Hardwareumgebung anpassen. Vor allem der Netzwerkkarten-Treiber muß in den Kernel integriert werden (z.B. der NE2000 Treiber) aber auch spezielle Optionen für das Boot des Diskless-Client sind erforderlich.
Nach dem Konfigurieren des Kernel kann man den Kompiliervorgang starten.
Dazu führt man den Befehle "make clean" zur Bereinigung eines alten Kompiliervorganges aus.
Dann startet man "make dep" um Abhängigkeiten zu analysieren.
Zum Schluß startet man den Kompiliervorgang mit "make bzImage" (bzImage = max. komprimierter Kernel).
Dann sollte man auch noch "make bzdisk" starten um ein Bootdiskimage des Kernel zu erstellen.
Das Diskimage kann mit dem Befehl "dd if=bzdisk of=/dev/fd0" auf eine Diskette geschrieben werden.
Dann muß man noch folgende Befehle eingeben:
mknod /dev/boot255 c 0 255
rdev /dev/fd0 /dev/boot255
Um den Kernel Bootfähig zu machen benötigt man das Programm "mknbi-linux" aus dem Paket "netboot", das man mit "dselect" installieren kann.
Nun startet man das Programm: mknbi-linux -x -k bzImage -o bzBootImage
Damit wird aus dem Kernel ein bootfähiges Image erzeugt. Mit dem Aufruf können auch noch mehr Parameter übergeben werden z.B. mit -d /DC-ROOT
kann das Rootverzeichnis, das vom NFS-Server bereitgestellt werden muß, angegeben werden.
Gibt man hier diesen Parameter nicht an so verwendet der Kernel standardmäßig das Verzeichnis "ftpboot/<IP-Adresse>" (er fügt automatisch die IP-Adresse zum Verzeichnis hinzu) somit kann der Kernel für mehrere Clients verwendet werden und er mountet immer ein Client abhängiges Verzeichnis.
Man kann das Rootverzeichnis aber auch über den DHCP Server übergeben (siehe DHCP Server konfigurieren).
Für den Boot-Vorgang des Diskless-Client ist der DHCP Server von besonderer Bedeutung. Er liefert vor allem die IP-Adresse und den Dateinamen des Bootimages an den Client. Man kann sogar das Root Verzeichnis an den Kernel übergeben. Dazu muß man in den entsprechende Netzwerksektion einen Spezifischen Eintrag für den Client machen. Dazu muß man die MAC-Adresse (Physikalischen Adresse) der Netzwerkkarte kennen.
client1 {
hardware ethernet 00:51:4f:03:53:0e;
allow booting;
fixed-address 192.168.0.22;
option root-path "/var/lib/diskless/default/root";
filename "bzBootImage";
server-name "Linux DHCP-Server (with Booting support)";
}
Weiter Infos zum DHCP Server (Installation).
Das TFTP-Protokoll (Trivial File Transfer Protokoll) dient wie das FTP-Protokoll zum Übertragen von Dateien im Netz.
In unserem Fall wird es benötigt um das Kernel-Image vom Server zum Client zu übertragen.
Das einfache Protokoll ist klein Genug, daß es auch auf dem beschränkten Platz auf dem BOOT-ROM implementiert werden kann.
Zuerst muß man die Pakete "tftpd" und "tftp" mit "dselect" installieren. Danach kann man in der Konfigurationsdatei "/etc/inetd.conf" folgenden Eintrag finden.
#:BOOT: Tftp service is provided primarily for booting. Most sites # run this only on machines acting as "boot servers." tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /ftpboot/
Am Ende der Zeile gibt man den Home-Verzeichnis des TFTP-Servers an. Hier muß die das Kernel-Image zu finden sein. Man sollte also das erstellte Kernel-BootImage dorthin kopieren. Wenn man Änderungen am Home-Verzeichnis durchführt darf man nicht vergessen den inetd-Server neu zu starten: /etc/init.d/inetd restart.
Mit Folgender Befehlsfolge kann der TFTP- Server sowie die korrekte Konfiguration überprüft werden.
tpft
connect 127.0.0.1
get bzBootImage
quit
Nun muß man das Root-Verzeichnis des Diskless Clients erstellen. Als Verzeichnisname verwendete ich, wie im Abschnitt "Kernel Konfiguration" angeben, ("ftpboot/<IP-Adresse>"). Nun muß man praktisch Linux ohne Installationsprogramm in das Verzeichnis installiern und konfigurieren. Dies ist aber nicht so kompliziert wie es vermutlich klingt. Es gibt zwei Möglichkeiten wie man das Problem löst.
Dazu muß man die Datei "/stable/main/disks-i386/base2_2.tgz" von der ersten Debian-CD in das Root-Verzeichnis entpacken. Danach hat man ein komplettes Linux-Root-Verzeichnis allerdings fehlen noch einigen Konfigurationen.
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> 128.168.0.24:/ftpboot/192.168.0.22 / nfs rsize=8192,wsize=8192,defaults,rw 0 0 proc /proc proc defaults 0 0 # Uncomment the following entry if you use a 2.2.x or newer kernel for # UNIX98-style pty handling #none /dev/pts devpts gid=5,mode=620 0 0 /dev/fd0 /floppy auto defaults,user,noauto 0 0 #/dev/cdrom /cdrom iso9660 defaults,ro,user,noauto 0 0
Dazu muß das Programm "diskless" mit "deselct" installiert werden. AUCHTUNG die Pakete "diskless-image-simple" und "diskless-image-secure" dürfen nicht installiert werden.
Dann muß man die Daten base2_2.tgz und die Datei diskless-image-simple in ein Verzeichnis kopieren.
Dann kann man mit dem Aufruf "diskless-newimage" ein default Root-Verzeichnis erstellen (diese wird von allen Diskless Clients verwendet).
In der Datei "etc/diskless-host/exports" im Verzeichnis des Root-Verzeichnis befindet sich eine NFS-Server Konfiguration die in die Konfiguration des NFS-Servers übernommen werden müssen.
Dann kann man mit dem Aufruf "diskless-newhost" wir ein Root-Verzeichnis für einen Client erzeugt das nur spezifische Daten enthält (/var, /tmp, /log, /etc).
Diese Aufruf kann für jeden weiteren Client gemacht werden, wobei nur etwa 5 MB pro Client anfallen da ja eine zentrales ROOT-Verzeichnis für Librarys und Programme zur Verfügung steht.
Eine genauere Anleitung kann man auf Seite 2 finden.
Nun hat man das Root-Verzeichnis erstellt zur korrekten Funktion mußen jetzt nur noch das Verzeichnis für den Client freigegeben werden. Ich verwendetet den im Kernel integrierten NFS-Server, der über die Datei "/etc/exports" konfiguriert wird. Zuerst gibt man das freizugebende Verzeichnis und dann den Host (IP-Adresse) an. In Klamma können noch zusätzliche Parameter bzw. Einstellungen angegeben werden.
ftpboot/192.168.0.22 192.168.0.22(rw,no_root_squash) 127.0.0.1(rw,no_root_squash)Das Verzeichnis muß für Schreib- und Lesezugriffe freigegeben werden auch die Option "no_root_squash" muß gemacht werden. Bei Änderungen in der Konfigurationsdatei muß der Server neu gestartet werden:
/etc/initd/kernel-nfs-server restart
Wenn man das Verzeichnis auch gleich für den eigenen Rechner (loopback) frei gibt kann man die Konfiguration mit dem Aufruf "mount -at nfs 127.0.0.1ftpboot/192.168.0.22 /tmp/DC-root" testet.Wenn man mit dem Programm "diskless" arbeitet so muß man noch zusätzlich die clientspezifischen Verzeichnisse freigeben (siehe Seite 2)
Nun kommt der letzte Schritt die Erstellung des Boot-ROM-Images. Dazu benötigt man das Paket "netboot" das mit "dselect" installiert wird. Dann kann man "makerom" das Programm starten. Nun muß man einige Konfigurationen bezüglich der Netzwerkkarte (Punkt 2,3 und 4) und der Boot-ROM-Funktion angeben:
"dd if=image.flo of=/dev/fd0" auf eine Diskette geschrieben werden.
Anmerkung: Typenbezeichnig in kBit
Berchnung Größe in kByte: Typenbezeichnung/8
Zuerst kann man mit der Diskette mit dem bzdisk-Image versuchen zu Booten. Hierbei muß der Kernel nicht erst übertragen werden sondern kann direkt von der Diskette geladen werden.
Gelingt dies ohne Probleme, d.h. kann das Root-Verzeichnis von NFS-Server gemountet werden so ist zumindest die Konfiguration des DHCP-Servers und NFS-Servers korrekt, auch das Root Filesystem wurde korrekt erstellt.
Nun kann man versuchen mit der netboot-Bootdiskette hochzufahren. Nach dem Start sollte die korrekt IP-Adresse und die Kernel-Datei ermittelt werden.
Dann sollte der Kernel fehlerfrei übertragen und gestartet werden.
Wenn auch dies funktioniert so kann man das Boot-ROM in die Netzwerkkarte geben und von der Netzwerkkarte booten.
Wenn Fehler aufträten können die Log-Dateien oft helfen, z.B. die DHCP Log-Dateien im Verzeichnis "/var/dhcp".
Sinnvoll ist es auch die Server bzw. Programme einzeln zu testen.
Weiters sind zusätzliche Informationen zu dem Thema im Internet, den man-Pages und in den LINUX-HOW-TOs zu finden.