Een introductie tot Netwerk booting en Etherboot

ArticleCategory: [Choose a category for your article]

System Administration

AuthorImage:[Here we need a little image form you]

[Ken Yap]

TranslationInfo:[Author and translation history]

original in en Ken Yap

en to nl Rano Kuhl

AboutTheAuthor:[A small biography about the author]

Ken woont in Sydney, Australië. De eerste keer dat hij met Unix in aanraking kwam was in 1979 en hij gebruikt Linux de laatste 4 jaar voor tekstverwerking, het Internet en als ondersteuning voor zijn hobby electronica. Wanneer hij niet met Linux of met zijn dagelijks werk bezig is, houdt hij van rondreizen, het ontmoeten van interessante mensen, het maken van nieuwe gerechten of genieten van de omgeving tijdens een wandeling. Hij werkt bij een multinationaal bedrijf als onderzoekend wetenschapsman.

Abstract:[Here you write a little summary]

Dit is een geavanceerd artikel dat uitlegt hoe je een bootstrap moet instellen op je computer vanuit een programma dat is opgeslagen in het non-volatile geheugen (niet vluchtig geheugen dat gegevens opgeslagen houdt ook nadat de stroom toevoer is onderbroken) zonder toegang tot de harde schijf. Het is een ideale techniek voor het onderhouden en configureren van een gros aan linux bakken.

ArticleIllustration:[This is the title picture for your article]

[Illustratie]

ArticleBody:[The article body]

Wat is netwerk booting?

Netwerk booting is een oud idee. De hoofdgedachte is dat de computer een bootstrap code heeft in het non-volatile geheugen, bijvoorbeeld een ROM chip die ervoor zorgt dat er contact gemaakt wordt met een server en ervoor zorgt dat er systeem bestanden worden verkregen over een netwerk verbinding. Het doel is om voor het opstarten het gebruik van de harde schijf te vermijden. Er zijn verschillende redenen om dit te doen. Eén daarvan is om de kosten te verminderen voor het in stand houden van de software op verschillende systemen. Met netwerk booting worden de bestanden bewaard op een centrale server en kan plaatselijk worden geupdate. Een andere reden is voor het gebruik van computers op plaatsen waar de harde schijf niet robuust genoeg is. Dit kan bijvoorbeeld een computer op een fabrieksvloer zijn waar de harde schijf te kwetsbaar is. Tot besluit, een ander doel is een systeem dat kan wisselen tussen andere besturingssystemen zonder het opnieuw opstarten van de software.

Netwerk booting gaat vaak gepaard met disk booting. Bijvoorbeeld, een systeem zou Windows kunnen draaien vanaf een harde schijf, soms start Linux vanaf het netwerk. Bijvoorbeeld: een vriend van mij maakt hier gebruik van voor het opnieuw opstarten van Windows over het netwerk. Wanneer de Windows installatie wordt aangetast, zoals dit dikwijls voorkomt, kan de systeembeheerder een schone installatie opnieuw laden bij het opstarten van Linux via het netwerk en een geautomatiseerd scriptje zorgt voor het formatteren van de harde schijf en een kopie van een schone Windows installatie.

Hoe werkt dit?

Alvorens je kan booten over het netwerk, moet je computer kunnen beschikken over 1. een identiteit, 2. een image van een besturingssysteem en 3. uiteraard een werkend bestandssyteem.

Neem een computer zonder harde schijf (DC, Diskless Computer) die ROM geheugen heeft waarmee je van het netwerk kan booten. Het mag één of verscheidene identieke DCs zijn. Hoe kunnen we deze computer nu onderscheiden van anderen? Er is één gegeven dat uniek is voor deze computer (eigenlijk zijn netwerk adapter) en dat is zijn Ethernet adres. Elke Ethernet adapter in de wereld heeft een uniek 48 bit Ethernet adres, omdat elke Ethernet hardware fabrikant adresblokken zijn toegekend. Gewoonlijk worden deze adressen geschreven in hexadecimale digits met elk twee groepen van twee digits gescheiden door een dubbelepunt, bijvoorbeeld: 00:60:08:C7:A3:D8.

De protocollen die gebruikt worden voor het verkrijgen van een IP adres, aan de hand van een Ethernet adres, zijn Boot Protocol (BOOTP) en Dynamic Host Configuration Protocol (DHCP). DHCP is een evolutie van BOOTP. In onze discussie geldt, tenzij op een andere manier aangegeven, dat iets dat toepasbaar is op BOOTP ook toepasbaar op DHCP is. (Eigenlijk is het een beetje gelogen dat BOOTP en DHCP alleen maar Ethernet adressen vertalen. Als toekomstplan hebben de ontwerpers middelen gemaakt voor BOOTP en DHCP om met elk type hardware adres te werken. Maar Ethernet wordt door de meeste mensen gebruikt.)

Een voorbeeld van een BOOTP uitwisseling gaat als volgt:

DC: Hallo, mijn hardware adres is 00:60:08:C7:A3:D8, wat is mijn IP adres?

BOOTP server: (Zoekt het adres op in de database) Uw naam is aldebaran, uw IP adres is 192.168.1.100, uw server is 192.168.1.1, het bestand waarvan je zou moeten booten is /tftpboot/vmlinux.nb (en nog wat andere informatie).

Op de eerste plaats kun je je afvragen hoe de DC nu het adres van de BOOTP server heeft gevonden. Het antwoord is: niet. Het BOOTP verzoek werd uitgezonden via een broadcast op het lokale netwerk en de BOOTP server die dit verzoek kan beantwoorden zal dat ook doen.

Na het verkrijgen van een IP adres moet de DC een image van een besturingssysteem downloaden en deze uitvoeren. Een ander Internet protocol wordt hiervoor gebruikt, genaamd Trivial File Transfer Protocol (TFTP). TFTP is een soort uitgeklede versie van FTP ---er is geen verificatie en het maakt gebruik van het User Datagram Protocol (UDP) in plaats van het Transmission Control Protocol (TCP). UDP werd gekozen boven TCP voor het gemak. De implementatie van UDP op de DC kan beperkt zijn, zodat de code gemakkelijk past op een ROM. Omdat UDP block georiënteerd is, in tegenstelling tot stream georiënteerd, gebeurd de overdracht block voor block, zoals dit:

DC: Geef mij block 1 van /tftpboot/vmlinux.nb.
TFTP server: Hier is het..
DC: Geef mij block 2.

enzovoort, totdat het hele bestand is overgedragen. Handshaking is een simpele bevestiging van elk block schema en packet loss wordt opgevangen door het opnieuw verzenden bij een timeout. Wanneer de blocks zijn ontvangen geeft de netwerk boot ROM de controle over aan de image van het besturingssysteem op het ingangspunt.

Uiteindelijk, om het besturingssysteem draaiende te krijgen, moet een root bestandssysteem worden toegewezen. Het protocol dat Linux en andere Unixes gebruiken is normaal gesproken Network File System (NFS), hoewel andere keuzes mogelijk zijn. In dit geval hoeft de code niet in de ROM aanwezig te zijn, maar kan deel zijn van het besturingssysteem zijn dat we zojuist hebben gedownload. Echter, het besturingssysteem moet in staat zijn om het root bestandssysteem te draaien, dus NFS, in plaats van een harde schijf. Linux heeft de benodigde configuratie variabelen voor het maken van een versie die dit ondersteund.

Netbooting in de praktijk

Behalve commerciële boot ROMs zijn er twee bronnen voor vrij beschikbare pakketten voor netwerk booting. Zij heten Etherboot en Netboot. Beide kunnen worden gevonden op de Etherboot home page. Eerst moet je controleren of je netwerkkaart wordt ondersteund door Etherboot of Netboot. Uiteindelijk moet je iemand vinden die voor jouw de code op een EPROM (Erasable Programmable Read Only Memory) zet, maar in het begin kun je netwerk booting doen vanaf een floppy.

Om een boot floppy te creëren is een speciale boot block verstrekt in de distributie. Dit kleine programma van 512 byte groot laadt de disk blocks achtereenvolgens van de floppy, in het geheugen en wordt uitgevoerd. Om dus een boot floppy te maken hoef je alleen maar het boot block met de Etherboot binary, die de stuurprogramma's van de netwerkkaart bevat, aan een te schakelen, zoals dit:

cat floppyload.bin 3c509.lzrom > /dev/fd0

Voor je de netwerk boot floppy kunt gebruiken, moet je drie services activeren op Linux: BOOTP (of DHCP), TFTP en NFS. Je hoeft ze niet alle drie tegelijk activeren, maar stap voor stap. Zorg ervoor dat elke stap werkt alvorens je verder gaat naar de volgende stap.

Ik neem aan dat je de bootpd server van een distributie hebt geïnstalleerd of de source hebt gecompileerd. Je moet zorgen dat deze server nu wacht op bootp verzoeken. Er zijn twee manieren om dit te realiseren: één manier is om bootpd op te starten als een netwerk service, dat betekent dat hij altijd 'luisterd' wanneer de computer 'up' is en de andere manier is het starten vanuit inetd. Bij die laatste moet /etc/inetd.conf een regel bevatten zoals deze:

bootps dgram udp wait root /usr/sbin/tcpd bootpd

Als je /etc/inetd.conf hebt gewijzigd, moet je inetd opnieuw starten door het proces een HUP signaal te verzenden.

Vervolgens moet je bootp een database toekennen om Ethernet adressen te mappen naar IP adressen. Deze database is /etc/bootptab. en bevat regels in het volgende formaat:

aldebaran.foo.com:ha=006008C7A3D8:ip=192.168.1.100:bf=/tftpboot/vmlinuz.nb

Andere informatie kan worden gespecificeerd, maar we beginnen simpel.

Start nu de DC met de floppy en deze zal nu je Ethernetkaart detecteren en een BOOTP verzoek uitzenden. Als alles goed gaat, moet de server reageren op de DC met de benodigde informatie. Omdat /tftpboot/vmlinux.nb nog niet bestaat, zal het mislukken als hij het bestand probeert in te laden.

Nu zul je een speciale kernel moeten compileren, een kernel die de optie voor het mounten van het root bestandssysteem van NFS geselecteerd heeft. Ook moet je de optie selecteren die je het IP adres van de kernel geeft van de originele BOOTP reply. Ook moet je de driver voor je netwerkkaart in de kernel compileren, niet als een module. Het is mogelijk om een ramdisk te downloaden die het laden van modules ondersteund, maar dit is iets wat je later ook nog kunt doen.

Je kunt de zImage niet installeren die direct vanaf de kernel compilatie wordt gecreëerd. Deze moet eerst worden omgezet in een tagged imaged. Een tagged image is een normale kernel image met een speciale header die de netwerk bootloader verteld waar de bytes in het geheugen moeten worden gealloceerd en op welk adres het programma moet starten. Je kunt een programma genaamd mknbi-linux gebruiken voor het maken van deze tagged image. Deze utilitie vindt men in de Etherboot distributie. Nadat je de image hebt gegenereerd, sla je deze op in de /tftpboot directory onder de naam die is gegeven in /etc/bootptab. Zorg ervoor dat dit bestand door iedereen kan worden gelezen, omdat de tftp server geen speciale rechten heeft.

Ik neem aan dat je TFTP van een distributie hebt geïnstalleerd of de source hebt gecompileerd. Gewoonlijk start TFTP op vanuit inetd met een regel zoals die hier is gegeven in /etc/inetd.conf.

tftp dgram udp wait root /usr/sbin/tcpd in.tftpd -s /tftpboot

Start inetd opnieuw met een HUP signaal en je kunt de boot opnieuw uitproberen. Deze keer zou het de kernel image moeten downloaden en deze starten. Je zult merken dat het booten verder gaat, tot het punt dat er een root bestandssysteem moet worden gemount. Dan is het tijd om de NFS partities te configureren en te exporteren om verder te gaan.

Om verschillende redenen is het geen goed idee om het root bestandssysteem van de server te gebruiken als root bestandssysteem van de DC's. Een simpele reden is dat daar verschillende configuratie bestanden aanwezig zijn en de DC zou misschien de verkeerde informatie pakken. Een andere reden is de beveiliging. Het is gevaarlijk om schrijfrechten toe te kennen (en schrijfrechten zijn nodig voor het root bestandssysteem, om verschillende redenen) op de root van de server . Echter, het goede nieuws is dat een root bestandssysteem voor de DC niet erg groot is, ongevoor zo'n 30 MB en een groot gedeelte kan worden geshared tussen verscheidene DC's.

Voor het samenstellen van een root bestandssysteem is het ideaal als je weet waar je besturingssysteem bepaalde bestanden verwacht. Een kritisch punt voor het booten zijn de apparaat bestanden (/dev), bestanden in /sbin en /etc. Je kunt veel werk vermijden door het maken van een kopie van het bestaande root bestandssysteem en het wijzigen van enkele bestanden voor de DC. In de Etherboot distributie zitten een zelfstudiecursus en links naar een paar shell scripts die zo'n DC root bestandssysteem aan de hand van een bestaand root bestandssysteem server creëeren. In de Etherboot documentatie bevinden zich ook troubleshooting tips daar dit vaak het lastigste gedeelte is van de setup.

De DC experts kunnen het root bestandssysteem van de gebouwde kernel inzien op /tftpboot/<IP address van de DC>, in het geval /tftpboot/192.168.1.100. Dit kan naar wens worden ingesteld bij het configureren van de kernel.

Maak of wijzig nu /etc/exports op de server en voeg een regel toe als:

/tftpboot/192.168.1.100 aldebaran.foo.com(rw,no_root_squash)

De rw toegang is nodig voor verscheidene systeem services. Het no_root_squash attribuut voorkomt dat het NFS systeem het root ID 'mapped' aan een ander systeem. Als dit niet is gegeven, kunnen verscheidene daemons en loggers dit niet waarnemen.

Start of herstart de NFS services (rpc.portmap en rpc.mountd) en probeer de boot opnieuw. Als je slaagt zou de kernel in staat moeten zijn om een root bestandssysteem te mounten en te booten tot aan het login scherm. Waarschijnlijk zul je verschillende dingen vinden die verkeerd geconfigureerd zijn en die een kleine aanpassing vergen die past bij het booten zonder disk. de meest voorkomende zwakte is het vertrouwen op de bestanden onder /usr tijdens het boot proces, welke normaal gesproken wordt geïmporteerd van de server, later in het boot proces. Twee mogelijke oplossingen zijn: 1. Zorg voor de benodigde bestanden in een kleine /usr directory op het root bestandssysteem, welke dan zal worden gevuld als /usr wordt geïmporteerd, en 2. Wijzig de zoekpaden, zodat de programma's kijken in het root bestandssysteem. De te bewerken bestanden staan onder /tftpboot/192.168.1.100 (denk eraan, dit is de root directory op de DC).

Je kunt ook andere directories van de server mounten, zoals /usr (welke dan geëxporteerd kan worden als alleen-lezen).

Wanneer je tevreden bent, als je kan booten over het netwerk zonder enige problemen, kun je de code op een EPROM plaatsen. Een EPROM programmeur vraagt er ongeveer $100 US voor en dat is geen goedkope investering voor een hobbyist die dit maar zelden gebruikt. Soms verschijnt er een op de markt voor gebruikte artikelen voor een spotprijs, maar met de waarschuwing dat de software die nodig is om dit aan te sturen ook beschikbaar is. Een vakkundig electronica hobbyist zou er een kunnnen bouwen door middel van het gebruik van verscheidene gratis ontwerpen die op het internet gepubliceerd zijn, maar voor het grootste deel van de lezers is de beste oplossing waarschijnlijk een kennis die hier toegang voor heeft. Misschien iemand in de electronica hobbyist groep of iemand die werkt in de electronische industrie.

Een kleine opmerking over EPROM technologie: De bits van een EPROM zijn geprogrammeerd door het injecteren van electronen met een verhoogd voltage in de 'floating gate' van een 'field-effect' transistor waar een 0 bit gewenst is. De electronen die zich daar bevinden zorgen ervoor dat de transistor geleid, leest als 0. Om de ERPROM te wissen worden de electronen voldoende energie gegeven om zo uit de floating gate te ontsnappen door het bombarderen van de chip met ultraviolette bestraling door het kwarts scherm. Om een vertraagde uitwissing over een aantal jaren door middel van zonlicht en fluorescent licht te voorkomen, is dit kwarts scherm bij normaal gebruik overdekt met een afgesloten label.

Er is een andere technologie genaamd EEPROM oftewel Electrically Erasable PROM, soms Flash PROM genoemd. Hier worden de bits verwijderd door een elektrisch signaal. Dit betekent dat men een ultraviolet eraser moet hebben als men de EPROM wil hergebruiken, maar dit eist een bijkomend programma van een electrische kringloop om de erase phase te ondersteunen. Voor iemand die handig is met electronica, is er een toegewijdt circuit ontwerp en software voor een EEPROM bord in de Etherboot distributie. Het bord kun je in een ISA bus slot op een pc plaatsen en boot een netwerkkaart die in een ander slot is gevestigd.

Gebruiken van Netwerk Booting

X-terminals zijn een natuurtalent in het gebruik van netwerk booting. De afwezigheid van een harde schijf in de terminal maakt het stiller en draagt bij aan een prettige werkomgeving. De machine zou onder de beste omstandigheden een geheugen moeten hebben van 16 MB of meer en de beste videokaart die je kan vinden. Dit is ideaal voor het gebruik van een high-end 486 of een low-end Pentium die volledig ontleed zijn van de hardware.

Andere mensen hebben netwerk booting gebruikt voor vele machines, waar het gebruik van de DC laag is en waar geen harde schijf in zit. Bijvoorbeeld een computerlokaal.

Voor meer informatie

Als eerste adviseer ik je om op de Etherboot homepage te kijken:
http://etherboot.sourceforge.net

Hier vind je links naar andere bronnen inclusief een mailingslist. Hiervoor moet je je inschrijven en problemen en oplossingen worden hier bediscussieerd.

Happy netbooting!