Vorab mal die entsprechenden Referenzen im Web:

Mike Passwalls Site: <http://mike.passwall.com/macnc/>;
(Mike hat auch Patches für den dhcpd, pflegt sie aber nicht mehr, weshalb man hier eher für Grundlagen vorbeischauen sollte, dann aber entweder die Patches von Alistair für dhcpd 2.0.x oder die von Rob für dhcpd 3.x nehmen sollte)

Alistair Ridells Seite: <http://frank.watsons.edin.sch.uk/~ali/nb/>;
(Sehr ausführliche Anleitung, inkl. Patches)

Rob Lineweavers Patch: (<http://software.harrisonburg.k12.va.us/linux/src/>;)

Die Frage, ob man mit dhcpd 2.x oder 3.x arbeitet, hängt wohl primär davon ab, ob man das Feature von dhcpd 3.x braucht, dynamisch auch einen DNS-Server updaten zu können. Für mich nicht unbedingt wichtig, da ich Netbooting als etwas Statisches betrachte, d.h. eigentlich vor der Einrichtung von Netboot-Konfigurationen auch gleich die entsprechenden IP-Adressen nebst DNS-Einträgen fixiere.

Im Folgenden gehe ich also einfach mal von dhcpd 2.0.5 mit Alistairs Patches aus...

Netbooting funktioniert wie folgt: Ein Mac, dessen [n] Taste beim Hochfahren gedrückt wird oder der im Kontrollfeld entsprechend "Netzwerk" als Startlaufwerk vergeben bekommen hat, schickt einen "Netboot Request" ins Netz hinaus. Ältere Macs benutzten dazu BOOTP, die neueren DHCP. An der Stelle kommen auch die dhcpd Patches ins Spiel, die nun eben auf eine derartige Anfrage auch mit korrekten Antworten reagieren können. Der Mac bekommt in der Folge vom DHCP-Server eine IP-Adresse übermittelt und als Teil der DHCP-Antwort ebenfalls noch, von wo er sich ein MacOS ROM File laden soll (per TFTP) und wo letzten Endes die einzelnen Disk-Images liegen, mit denen er dann starten soll (und mit welchem Namen und welchem Paßwort er sich am jeweiligen AFP-Server anmelden soll).

Um das möglichst reibungslos zum Laufen zu bringen, würde ich den TFTP-Server (beliebig) mit einigen '-v' starten, um die Verbosity zu erhöhen, d.h. man auch mitbekommt, wenn sich ein Mac das ROM-File zieht. Der Zugriff auf die Disk-Images erfolgt per AFPoverTCP mit einer erwähnenswerten Einschränkung: Die Authentifizierung des Clients erfolgt mittels Cleartext UAM, d.h. per Klartextpasswort (das hat mich graue Haare gekostet, weil ich diese UAM auf meinem Test-Server verboten hatte - Details können hier <news:B8B06552.1D302%Thomas.Kaiser@phg-online.de> nachgelesen werden ;-)

Ich habe mir hier so geholfen, daß ich einfach ein Volume erzeugt habe, auf das die Images kommen und die ROM-Datei(en). Ich weiss nicht genau, wie sich die einzelnen ROM-Dateien konkret auswirken - habe hier einfach die von 9.2.1 genommen (<http://users.phg-online.de/tk/netboot/images-volume.gif>;). Bzgl. der Images sei noch erwähnt, daß Boot- und Applications-Image im Finder auf "geschützt" gestellt werden sollten, das private Image jedoch nicht, da auf dieses alle Schreibvorgänge abgewickelt werden (je Client eines --> daher bei mir einfach gleich mit der entsprechenden MAC-Adresse des Macs versehen)

Was passiert im Einzelnen:

  1. Mac einschalten und [n] drücken:

    Der Mac sieht sich nach einem Netboot-Server um, bekommt eine IP-Adresse aufgrund der Konfiguration mitgeteilt und als Teil der DHCP-Antwort ebenfalls, wo er sich die ROM-Datei per TFTP und die drei Images per AFPoverTCP ziehen soll. Im Log sieht das so aus:

       Mar 10 03:03:58 netboot-1 dhcpd: DHCPDISCOVER from 00:30:65:8d:60:e2 via
                                        eth0
       Mar 10 03:03:58 netboot-1 dhcpd: Received BootP request from Macintosh
                                        netboot client
       Mar 10 03:03:58 netboot-1 dhcpd: DHCPOFFER on 195.30.238.154 to
                                        00:30:65:8d:60:e2 via eth0
    
  2. Der Mac zieht sich das ROM File (dazu den Switch -v beim Aufruf des tftpd benutzen, sonst wird das nicht gelogged):
       Mar 10 02:03:58 netboot-1 in.tftpd[4518]: RRQ from 195.30.238.154
                                        filename /Mac OS ROM
    
  3. Der Mac etabliert nun eine AFPoverTCP Verbindung, um sich das Boot-Image, das Applications-Image und das private Image zu holen. Falls hier der Pfad auch nur eines der Images nicht stimmt oder das private Image nicht beschreibbar ist, dann geht es nicht weiter. Andernfalls hat der Mac nach kurzer Zeit fertig gebootet. Sollte irgendwas mit der Authentifizierung an sich nicht klappen, dann erlebt man 5-mal das Auftauchen von "login user xy", "logout user xy" Meldungen...
       Mar 10 03:04:14 netboot-1 afpd[4519]: ASIP session:548(2) from
                                             195.30.238.154:3265(0)
       Mar 10 03:04:14 netboot-1 afpd[4519]: cleartext login: user-1
       Mar 10 03:04:14 netboot-1 afpd[4519]: login user-1 (uid 501, gid 501)
                                             AFP2.2
    
  4. Das startende MacOS erfrägt nun als Teil des normalen MacOS Bootvorgangs abermals mittels einer "normalen" DHCP-Anfrage seine TCP/IP Konfiguration
       Mar 10 03:04:46 netboot-1 dhcpd: DHCPREQUEST for 195.30.238.154 from
                                        00:30:65:8d:60:e2 via eth0
       Mar 10 03:04:46 netboot-1 dhcpd: DHCPACK on 195.30.238.154 to
                                        00:30:65:8d:60:e2 via eth0
    
  5. Auf dem Mac kann nun ganz normal gearbeitet werden. Alle Änderungen sowohl auf dem Boot- als auch dem Applications-Image werden nicht zurück auf diese Images geschrieben, sondern auf dem privaten Image gespeichert (und nach dem Ausschalten verworfen). D.h. daß der Mac beim nächsten Hochfahren exakt wieder den Stand hat, den er beim letzten Starten hatte.

Im Moment schreib ich im Rahmen eines kommerziellen Projekts ein GUI für die Macs, die auf Netboot umgestellt werden sollen und ein Failover-Konzept samt -Skripts, damit ein ausfallender Netboot-Server direkt von einer Ersatz- oder Lastverteilungsmaschine übernommen werden kann. Bei Interesse kann man mich diesbzgl. per PM erreichen ;-)

Ach ja: Bzgl. der Konfiguration noch was:

TFTP: In der etc/inetd.conf entsprechend den TFTP Eintrag "aufgebohrt":
      in.tftpd -s /usr/local/netboot/volumes/images/TFTP_root/ -v

      (-s deshalb, weil das dann in einer chroot Umgebung läuft und TFTP
      Clients dann nur Zugriff auf den Inhalt dieses einen Ordners haben)

DHCP: <http://users.phg-online.de/tk/netboot/troubleshooting/dhcpd.conf.txt>;

AFP:  Um Klartextpasswörter zu ermöglichen darauf achten, daß entweder in
      der afpd.conf oder in der netatalk.conf (je nachdem, welche zum
      Einsatz kommt) auch '-uamlist uams_clrtxt.so' vorkommt, da die
      primitive AFP-Client Funktionalität, die im MacOS ROM steckt, nur
      Klartextpasswörter unterstützt.

Die oben beschrieben Lösung sollte auf Free-, Open-, NetBSD, Linux, Solaris und True64 UNIX laufen. Unter MacOS X theoretisch auch, allerdings scheitert hier die Kompilierung von Netatalk im Moment noch aus mir unbekannten Gründen. Da aber MOSX ja bereits mit dem AppleFileServer einen AFP-Server an Bord hat, kann man max. 10 Clients damit booten (oder halt beliebige, wenn MOSXS zum Einsatz kommen sollte, welches aber auch gleich Netbooting 'out of the box' bietet - wenngleich ohne Failover-Features, etc.)

Thomas Kaiser, 25.3.2002