|
|
|
|
![]() Druckversion |
Einen PC komplett übers Netz zu booten, d.h. einen PC ohne
Diskettenlaufwerk oder Festplatte ausrüsten zu müssen, klingt zuerst
etwas seltsam, ist aber mit etwas Aufwand durchaus
erreichbar.
Nach dem Booten eines PCs versucht normalerweise das Bios eine angeschlossene
Festplatte, ein Diskettenlaufwerk oder ein CD-Rom-Laufwerk zu finden, von
dem der PC booten kann.
Daraufhin stellt sich einem schnell die Frage, was das nun für Vorteile
mit sich bringen sollte?
Außerdem kann man mittels Netzwerkbooten aus einem alten PC einen
funktionierenden X-Server basteln. Bevor es aber jetzt an die Konfiguration geht, noch eine kleine
Als nächstes noch eine Warnung in ganz anderer Hinsicht.
Da das Betriebssystem nicht auf einer Festplatte gespeichert wird, sondern
übers Netz geladen wird, muß das Bios über entsprechende Mittel Verfügen,
um einen Download des Kernels ausführen zu können.
Das Paket netboot (Homepage unter http://www.han.de/~gero/netboot.html)
bietet die entsprechende Software und Treiber, um ein derartiges Bootrom
selbst zu erzeugen (dazu später mehr).
Um nun das Bootrom zu erzeugen, sollten Sie sich die neueste Version von
netboot vom Server http://www.han.de/~gero/netboot.html
herunterladen. (aktuelle stabile Version ist 0.8.1).
>> tar zxvf netboot-0.8.1.tar.gz -C /tmp/Wechseln Sie in das erzeugte Verzeichnis und starten Sie die Konfiguration cd /tmp/netboot ./configure make make installDabei kann es durchaus passieren, daß das Kompilieren des Pakets mit einer Fehlermeldung abbricht (so zumindest auf unseren Systemen). Dies ist weniger tragisch, da nur Komponenten nicht kompiliert werden können, die wir nicht benötigen. (Sollte auch bei Ihnen der Befehl make mit einer Fehlermeldung abbrechen, gehen Sie in das Verzeichnis makerom um dort den Befehl make auszuführen, gleiches im Verzeichnis mknbi-linux und bootrom. Führen Sie danach den Befehl make install aus). Als nächstes erzeugen wir ein Bootrom. Dafür benötigen Sie vorher noch einige Informationen über Ihre Netzwerkkarte.
Kartentyp:
Interrupt/IO-Adresse/MAC-Adresse:
cat /var/log/dmesgzeigt Ihnen nochmal die Bootmeldungen. Dort suchen Sie nach einem Eintrag der folgenden Form: eth0: RealTek RTL-8029 found at 0x7400, IRQ 5, 00:E0:7D:82:5F:B6Dort finden Sie die IRQ-Nummer (hier 5) und die IO-Adresse (hier 0x740 -- ohne die letzte Null). Außerdem sollten Sie sich die letzten 6 Buchstaben- und Zahlenkombination (die sog. MAC-Adresse) notieren. Hierbei handelt es sich um eine weltweit eindeutige Nummer, die Ihre Netzwerkkarte eindeutig identifiziert. Sollte die Karte nicht fest im Kernel kompiliert sein, sondern nur als Modul, müssen Sie das Modul laden (insmod eth0 oder bei automatischem Laden der Module ein Ping starten) und dann mittels cat /proc/ioports und cat /proc/interrupts den Eintrag Ihrer Netzwerkkarte suchen.
Haben Sie nun alle diese Daten notiert, können wir mit dem Generieren des Bootroms
beginnen: >> ./makeromWir erhalten daraufhin folgende Ausgabe: Bootrom configuration program, Version 0.8.1 (netboot) Copyright (C) 1995-1998 G. Kuhlmann The following 3 kernels are available: (1) kernel.bin (2) kernelm.bin (3) kernel86.bin Select the kernel you wish to use [1]: Hier wählt man den im Bootrom zu installierenden Kernel. Wir benötigen nur einen minimalen Kernel, deshalb wählen wir die 2. Auf die folgende Frage Do you want the bootrom to look for boot drives (y/n) [no] ?sollte man mit no antworten, wenn der spätere PC immer übers Netz booten soll und keine bootfähigen Laufwerke besitzt. Im nächsten Schritt wird der zu installierende Netzwerktreiber abgefragt: The following 10 network drivers are available: (0) user defined network driver (1) 3c501.com (2) 3c503.com (3) 3c509.com (4) arcether.com (5) dc21x4.com (6) e100bpkt.com (7) ne1000.com (8) ne2000.com (9) ne2100.com (10) smc_wd.com Select the network driver you wish to use [0]:Wer im Besitz einer NE2000-Karte ist, sollte hier die 8 wählen. (Falls Sie später Probleme mit den Treibern haben sollten, z.B. wenn Ihre Karte nicht erkannt wird, ist es empfehlenswert, die neuesten Treiber von der CRYNWR-Treiber-Sammlung zu beziehen. Wählen Sie in einem solchen Falle die 0 und geben Sie den absoluten Pfad zu den heruntergeladenen Treibern an.) Jeder Treiber benötigt die Angabe des Interrupt und IO-Adresse und der Paket-Interrupt-Nummer. (Treiber anderer Karten - d.h. nicht NE2000 - können noch weitere Angaben benötigen.) Die Reihenfolge der Angaben ist <packet_int_no> <int_level> <io_addr> also in unserem Beispiel Enter command line arguments for network driver: 0x62 5 0x740Die Angabe der Paket-Interrupt-Nummer wird nur intern von Bootrom benötigt und sollte meistens frei wählbar zwischen den Werten 0x60 bis 0x66, 0x68 bis 0x6f und 0x78 bis 0x7e sein. Die Meinungen, welcher Wert geeignet ist, sind unterschiedlich. Versuchen Sie ruhig einen niedrigen Wert und einen hohen Wert aus, falls der Treiber nicht auf Anhieb funktionieren sollte. Bei Plug&Play-Karten kann es vorkommen, daß automatisch eine hohe IO-Adresse ausgewählt wird. Dies kann aber zu Problemen bei den netboot-Treibern führen. Karten mit Jumper-Einstellungen sind deshalb vorzuziehen, da man dann die volle Kontrolle über die gewählten Ressourcen hat, und nicht auf die zumeist unglückliche Wahl der Plug&Play-Treiber angewiesen ist. Die folgenden drei Fragen können getrost mit no beantwortet werden Do you want to use the ANSI display driver (y/n) [yes] ? no Do you want to use the packet driver debugger (y/n) [no] ? no Do you want to specify an additional program (y/n) [no] ? noAls nächstes wird gefragt, in welchem Format das Bootrom abgespeichert werden soll. Dies ist abhängig davon, welchen Code Ihr Eprom-Brenner versteht, oder was für einen Typ von Chip Sie brennen wollen. Die Disketten-Treiber werden bei jeglicher Wahl auch erzeugt. Available output file types (floppy image gets always created): (1) Raw binary (2) Image for programming a FlashCard across the network (3) Intel hex (4) Motorola hex (5) Tektronix hex Select the format you wish to use [1]:Damit wär dieser Schritt erstmal geschafft. In dem Verzeichnis makerom befinden sich nun die Dateien image.flo für die Boot-Diskette und eine weitere Datei Image.???, wobei die Endung davon abhängig ist, welchen Output-Typ Sie im letzten Schritt gewählt haben. Um nun die Boot-Diskette zu erzeugen, legen Sie eine leere Diskette in Ihr Floppy-Laufwerk (Diskette nicht mounten!) und führen den Befehl >> dd if=image.flo of=/def/fd0Somit wäre das Bootrom auf der Diskette.
In diesem Abschnitt geht es darum, wie der Server zu konfiguieren ist, von dem
der netzbootende PC seinen Kernel und u.U. das Dateisystem erhält.
START_DHCPD="yesden Wert yes und unter DHCPD_INTERFACE="eth0"Ihr Netzwerkdevice eingetragen ist. Die Variable START_DHCRELAY="no"sollte i.A. auf no eingestellt sein, außer Sie wissen ganz genau, was Sie damit bewirken. Bei anderen Distributionen erfolgt die Installation des DHCP-Server anders, z.B. durch Verlinken des DHCP-Init-Skripts in dem jeweiligen Run-Level. Lesen Sie notfalls in der Dokumentation Ihrer Distribution nach. Die Konfigurationsdatei des DHCP-Servers liegt unter /etc/dhcpd.conf und sollte etwa folgendermaßen aussehen
Nach dem Neustart des DHCP-Servers (unter SuSE z.B.) >> /sbin/init.d/dhcp restartsollte die neue Konfgurationsdatei eingelesen werden Shutting down service dhcpd done Starting service dhcpd doneunter RedHat-basierenden Distributionen liegt das entsprechende DHCP-Skript unter /etc/rc.d/init.d/.
Um zu testen, ob der DHCP-Test auch richtig konfiguriert ist, benutzt man
am besten das Programm bootpc welches bei den meisten Distributionen
mit installiert wird (Homepage unter http://www.damtp.cam.ac.uk/linux/bootpc/). >> bootpc SERVER='192.168.0.1' IPADDR='192.168.0.119' BOOTFILE='pc2/kernel.net' NETMASK='255.255.255.0' NETWORK='192.168.0.0' BROADCAST='192.168.0.255' GATEWAYS_1='192.168.0.13' GATEWAYS='192.168.0.13' DNSSRVS_1='192.168.0.13' DNSSRVS='192.168.0.13' HOSTNAME='pc1' DOMAIN='netmag.de' SEARCH='netmag.de'Ohne Angabe von Optionen benutzt bootpc die MAC-Adresse der im PC befindlichen Hardware. Man kann aber mittels der Option --hwaddr auch die Einstellungen für PCs mit anderer MAC-Adresse erfragen. Zur Fehlersuche eignet sich die Option --verbose.
Wie kommt nun der Kernel während des Bootens vom Server zum Client?
Wie man aus diesem kurzen Überblick erkennen kann, müssen wir auf den Server
noch das TFTP-Protokoll installieren. Dies ist zumeist nicht aktiviert,
da es erhebliche Sicherheitsmängel aufweist, denn es unterstützt
(normalerweise) keine Paßwort-Abfrage, und sollte deshalb nur in Netzwerken
benutzt werden, bei denen der Port des TFTP-Protokolls von außerhalb
nicht erreichbar ist (z.B. geschützt durch eine Firewall). Um den TFTP-Server zu aktivieren benötigt man in der Datei /etc/inetd.conf folgenden Eintrag:
Der letzte Eintrag /tftpboot teilt dem TFTP-Server mit,
daß das Verzeichnis /tftpboot auf dem Server als Stamm-Verzeichnis
anzusehen ist. Ein Neustarten des inetd-Prozesses (oder notfalls auch ein Neustarten des Servers) bewirkt, daß die Änderungen an der inetd.conf sich auch auswirken.
Da die Clients nach dem Booten das gesamte Dateisystem übers Netz beziehen,
muß der NFS-Server entsprechend konfiguriert werden, so daß
er es diesem PCs auch erlaubt, die benötigten Verzeichnisse zu mounten.
Die Grundverzeichnisse werden mit Schreib- und Leseberechtigung gemountet,
das /usr-Verzeichnis nur mit Leseberechtigung. Zusätzlich müssen alle Boot-Clients noch mit Ihrem Namen angemeldet werden. Entweder auf dem DNS-Server, falls einer im Netz existiert, oder auf den Rechnern mit einem Eintrag in der Datei /etx/hosts
Nach dem Neustart des NFS-Daemons (oder notfalls des ganzen Servers) sind auch diese Änderungen aktiviert, und wir können uns ganz der Konfiguration der Clients zuwenden.
In den nächsten Schritten geht es darum, für den Client einen funktionierenden Kernel und eine bootende Installation zu erstellen.
Zunächst muß man den Kernel kompilieren, der auf dem Client gebootet werden
soll.
>> make xconfigaus und Konfigurieren einen Kernel so, daß er auf der Hardware des zu bootenden Clients auch läuft. Beachten Sie dabei, daß nur die wirklich notwendigen Komponenten in den Kernel integriert werden und die zum Booten benötigten Treiber alle fest in Kernel integriert werden. Für jeden Netz-bootenden PC sind folgende Einstellunge überlebenswichtig:
BOOTP und RARP sollten deaktiviert werden, da wir stattdessen DHCP benutzen. (Versuchen sie erstmal einen minimalen Kernel zu benutzen, um dann später die benötigten Hardwarekomponenten hinzuzufügen.) Danach muß der Kernel kompiliert werden >> make config >> make dep >> make clean >> make zImagekopieren Sie den erzeugten Kernel arch/i386/boot/zImage ins /tmp/netboot/mknbi-linux-Verzeichnis: >> cp arch/i386/boot/zImage /tmp/netboot/mknbi-linux/Denn in den nächsten Schritten muß der Kernel noch etwas nachbearbeitet werden, damit er auch übers Netz gebootet werden kann. Im Verzeichnis /tmp/netboot/mknbi-linux führen wir dann folgenden Befehl aus: ./mknbi-linux/mknbi -d rom -i rom -k zImage -o bootImageDamit wird aus dem Kernel zImage ein Netzwerkbootender Kernel bootImage gemacht. Das reicht aber noch nicht ganz aus: Sollte das Device /dev/nfs noch nicht existieren erstellen wir dieses mit dem Befehl (als root) mknod /dev/nfs b 0 255und geben dem Kernel noch den letzten Schliff: rdev bootImage /dev/nfsSomit ist der Kernel für alles vorbereitet. Als nächstes installieret man auf dem Server das Verzeichnis, aus dem die Clinets später Ihr Dateisystem empfangen. Dafür legt man standardmäßig das Verzeichnis /tftpboot an: >> mkdir /tftpbootin dieses Verzeichnis legt man dann die Unterverzeichnisse für die verschiedenen Clients an: >> mkdir /tftpboot/pc1 >> mkdir /tftpboot/pc2In diese Verzeichnisse werden dann die bearbeiteten Kernel kopiert >> cp bootImage /tftpboot/pc1/ >> cp bootImage /tftpboot/pc2/In diese Unterverzeichnisse wird dann das Dateisystem der Boot-PCs angelegt. Am einfachsten ist es, die Verzeichnisse einer bereits installierten Distribution in diese Verzeichnisse zu kopieren. Wollen Sie also auf den Clients die selbe Linux-Version wie auf dem Server haben, kopieren Sie die Verzeichnisse (als root): >> cp -a /bin /tftpboot/pc1/ >> cp -a /sbin /tftpboot/pc1/ >> cp -a /boot /tftpboot/pc1/ >> cp -a /dev /tftpboot/pc1/ >> cp -a /etc /tftpboot/pc1/ >> cp -a /lib /tftpboot/pc1/ >> cp -a /var /tftpboot/pc1/ >> cp -a /bin /tftpboot/pc1/Außerdem müssen noch folgende Unterverzeichnisse angelegt werden: >> mkdir /tftpboot/pc1/home >> mkdir /tftpboot/pc1/proc >> mkdir /tftpboot/pc1/tmp(Gleiches muß natürlich auch für die Installation des pc2 ausgeführt werden.) Falls Sie auf den boot-Clients die selben Benutzer wie auf dem Server einrichten wollen, sollten Sie auch das home-Verzeichnis mittels NFS mounten.
Jegliche weitere Konfiguration der Clients ist stark davon abhängig, was für
eine Distribution Sie verwenden.
Und die zu ändernden Bereiche in der RC.conf
Mit diesen Einstellungen sollte der PC wenigstens booten und zum Eingabeprompt
kommen. Häufig erhält man beim ersten Booten noch viele Fehlermeldungen.
Am besten loggt man sich am Client selbst ein und behebt diese Fehler.
![]() Ein netzbootender PC in einer Pappschachtel. Ohne Festplatte, nur Netzwerkkarte, Soundkarte und VGA-Karte und Diskettenlaufwerk. Keine Lüfter. (Bauweise zur Nachahmung nicht empfohlen)
Es sollte einen schon sehr wundern, wenn alles auf Anhieb funktioniert.
Ihr System benutzt aus Sicherheitsgründen tcpwrapper.
Sollte die Bootdiskette nicht wie gewünscht funktionieren, liegt dies zumeist
an fehlerhaften Einstellungen der Bootrom-Optionen.
Wird Ihre Karte richtig erkannt, aber die Boot-Daten vom Server nicht
empfangen (nur die Informationen von bootpc, noch nicht der Kernel selbst),
so kann dies am fehlerhaften Routing auf Seiten des Servers liegen.
(Schauen Sie auch in die Datei /var/log/messages für einen Eintrag der Form
Network not reachable) default 192.168.0.1Ihrer Routing-Tabelle hinzu, wobei hier die IP-Adresse des Gateways (zumeist die Server-IP selbst) benutzt wird.
Bekommt der Client die Bootp-Daten vom Server, kann aber den Kernel nicht
herunterladen, liegt dies zumeist an einer falschen Konfiguration der Pfadangabe
in der /etc/dhcp.conf.
Weitere mögliche Fehler finden Sie am Ende der Anleitung von
http://www.ltsp.org/download/lts/doc/lts.html
Der Einsatz von Boot-PCs eignet sich besonders, um aus alten
Rechnern noch funktionierende X-Terminals zu basteln.
Allerdings hat dieser Patch zwei nicht zu unterschätzende Nachteile:
Zunächst holt man sich ein für den gewünschten Kernel benötigten Patch von http://www.instmath.rwth-aachen.de/~heine/nfs-swap/nfs-swap.html. (Es stehen nicht für alle Kernel-Versionen geeignete Patches zur Verfügung.) Vor dem Einspielen des Patches sollte man sich eine Kopie des Kernels machen. >> mkdir /usr/src/hacking >> cp -a /usr/src/linux /usr/src/hacking/danach geht man in das Verzeichnis /usr/src/hacking/linux und führt dort das Einspielen des Patches aus: gunzip -c /path/to/linux-2.*.*-nfs-swap.diff | patch -p1 -l -sDanach muß man den Kernel erneut kompilieren und zusätzlich folgende Optionen aktivieren:
Der Kernel muß wie oben beschrieben mittels mknbi und rdev
zum Netzwerkbooten vorbereitet werden und an die Stelle des vorher benutzen
Kernels kopiert werden. >> cat /proc/meminfoaus. Wir erhalten als Ausgabe etwa:
Wie man sieht, existiert noch kein Swap-Speicher. Dies werden wir schleunigst ändern. >> dd if=/dev/zero of=/SWAPFILE bs=1k count=20480 >> mkswap /SWAPFILE 20480 >> swapon /SWAPFILEDanach schauen wir nochmal mittels >> cat /proc/meminfound erhalten nun
Wir haben nun 20 MB zusätzlichen Swap-Speicher installiert! Endlich ist es geschafft, aber Sie wurden ja gewarnt, daß die Installation eines netzbootenden-PCs durchaus nicht trivial ist.
Links:
Platz für Kommentare & Fragen:
|
|
|