Linux netwerk installatie

Als je heel vaak óf heel veel verschillende Linux systemen installeert is het opzetten van een PXE netwerk installatie bijzonder makkelijk en tijdbesparend.

Ik installeer regelmatig nieuwe systemen. Ik installeer ook op veel verschillende systemen; met CD, zonder CD, op een klein Atom systeempje, op een uATX systeem of gewoon op een desktop. Je kunt daarvoor een CD branden met de binnengehaalde ISO bestanden. Of een USB stick bootable maken met een install image erop. Maar ja, tegen de tijd dat je die dan weer nodig hebt ben je ze kwijt, heb je ze uitgeleend of heb je toch nét weer een andere versie van het OS nodig. Als je dit herkent dan is het opzetten van een PXE netwerk installatie server ideaal. Nu lees ik op het internet allerlei mooie en uitgebreide instructies zoals hier maar die zijn bijzonder uitgebreid en naar mijn mening foutgevoelig. In deze instructies zal ik laten zien hoe je heel simpel met een paar bestandjes en het aanpassen van hooguit 1 symlink makkelijk kunt switchen tussen installaties van diverse Linux smaken. Wat heb je nodig:

  • Een client die vanaf het netwerk opstart
  • Een DHCP en TFTP server
  • De netboot bestanden van je install of live CD

Je doelsysteem zal op zijn minst moeten kunnen booten vanaf het netwerk. Dit kun je vaak in de BIOS vinden onder 'Integrated Pheriperals'->'Onbaord LAN'->'LAN Boot ROM'. Zorg er ook voor dat de opstart volgorde zo staat dat je netwerk boot aan de beurt komt. De installatie bestanden kun je vaak vinden als je zoekt op 'netboot install'. Meestal heet het bestand gewoon netboot.tar.gz en kun je het vinden op de netwerk servers van je Linux smaak. Voor Ubuntu staat er één op http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/beta/images/netboot/netboot.tar.gz. Vervang i386 door amd64 als je een 64-bit versie wil gebruiken. Hetzelfde kun je doen voor 'jaunty'; vervang door intrepid, hardy of dapper (voor echt ouwe meuk :-) ). Voor een handig lijstje van Ubuntu versies en hun namen klik je hier. Okee als je je systeem, een servertje en het netboot bestand hebt kunnen we aan de slag.

DHCP

Installeer zonodig de DHCP server met apt-get install dhcp3-server. Voeg aan je dhcpd.conf bestand de volgende regels toe:

# Address of the TFTP server next-server 192.168.10.200;
# TFTP serves this file: filename "/pxelinux.0";

Het nummer van de next-server moet het IP adres van je TFTP server zijn en is hetzelfde nummer als waarop deze DHCP server draart. Maar er is niets tegen om de TFTP server op een andere server te draaien. Je mag deze regels gewoon in je normale subnet declaratie zetten. Niet-PXE clients hebben er geen last van. Je config zou er dan zo uit kunnen zien:

subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.0 192.168.0.100;
option routers 192.168.10.200;
option subnet-mask 255.255.255.0;
option domain-name "Timos";
default-lease-time 43200;
max-lease-time 172800;
# General PXE section
# Address of the TFTP server
next-server 192.168.0.10;
# TFTP serves this file:
filename "/pxelinux.0";
}

Ben je nou niet helemaal zeker van je zaak maak dan een aparte groep aan zodat je de ethernet adressen op kunt geven die via TFTP moeten kunnen booten:

# PXE group
group {
# Address of the TFTP server
next-server 192.168.0.10;
# TFTP serves this file:
filename "/pxelinux.0";
# Allowed Clients
host PXEETJE {
hardware ethernet 00:40:43:b4:20:5d;
fixed-address 192.168.0.10;
}
host FREESCALE {
hardware ethernet 00:40:43:b4:25:5c;
fixed-address 192.168.0.10;
filename "/mpimage.bin";
}
}

Je kunt zelfs per host een andere filenaam opgeven zoals je bij de host FREESCALE kunt zien. Maar dat is waarschijnlijk alleen handig als je embedded linux ontwikkeling doet.

TFTP

Installeer de TFTP server met apt-get install tftpd-hpa. Het beste is om ook xinet of netkit-inet te gebruiken zodat de server alleen dan draait wanneer nodig en je ook makkelijker in kunt stellen wie er toegang hebben.

Netboot bestanden

In Ubuntu staat de root van de TFTP server op /var/lib/tftpboot en daar zul je dan ook de netboot bestanden uit moeten pakken. Maak daar een folder aan met een toepasselijke naam en pak het netboot.tar.gz bestand daarin uit:

mkdir /var/lib/tftpboot/jaunty-installer
cp netboot.tar.gz /var/lib/tftpboot/jaunty-installer
tar -xvf netboot.tar.gz
rm -f netboot.tar.gz

Je hebt nu de volgende bestanden in deze folder

lrwxrwxrwx 1 root root   32 2009-05-14 19:58 pxelinux.0 -> ubuntu-installer/i386/pxelinux.0
lrwxrwxrwx 1 root root   34 2009-05-14 19:58 pxelinux.cfg -> ubuntu-installer/i386/pxelinux.cfg
drwxr-xr-x 3 root root 4096 2009-03-23 16:45 ubuntu-installer
-rw-r--r-- 1 root root   56 2009-03-23 16:45 version.info

De bestanden staan nu eigenlijk een folder te diep op de server. Dat gaan we nu fixen.

Flexibiliseer

De symlinks maken om het werkend te krijgen. De client machine zoekt naar het bestand pxelinux.0 zoals hem door de DHCP server is verteld. Dit bestand boot je client en als dat gebeurt is gaat hij meteen op zoek naar pxelinux.cfg. In dit config bestand staat beschreven wat deze netboot set allemaal kan. Het kan bijvoorbeeld een live CD zijn of zoals in ons geval een een Ubuntu x86 jaunty netwerk installatie.In dit config bestand staan ook weer referenties naar bestanden die nodig zijn. In ons geval staat daarin een referentie naar bestanden in een ubuntu-installer folder. Dus in de root van de TFTP server hebben we drie symlinks nodig: pxelinux.0, pxelinux.cfg en ubuntu-installer. Om het onszelf makkelijk te maken zorgen we ervoor dat we één symlink hebben die naar de gewenste netboot wijst en de rest is relatief hiervan:

cd /var/lib/tftpboot
ln -s jaunty-installer boot
ln -s boot/pxelinux.0 pxelinux.0
ln -s boot/pxelinux.cfg pxelinux.cfg
ln -s boot/ubuntu-installer ubuntu-installer

En klaar! Je systeem moet nu opstarten vanaf het netwerk en Ubuntu 9.04 gaan installeren. Nu kun je heel simpel je netwerk boot aanpassen door de boot symlink te veranderen:

rm boot
ln -s intrepid-installer boot

Als dit eenmaal hebt opgezet wordt het echt een eitje om je OS te installeren.

Comments

1

Fijn om eens een leesbaar, stap-voor-stap en niet nodeloos complex artikel hierover te lezen.
Ik ben zeer geïntrigeerd door het zinnetje "Het kan bijvoorbeeld een live CD zijn" hierboven. Ik zou namelijk zeer graag de bestanden op een oude laptop redden door er via netboot (boot niet via USB, cd-station kapot) een live-sessie op te starten. Er staat daarvoor een handleiding op een ubunti-wiki, maar het procédé is zeer omslachtig in verhouding met de voorstelling van zaken hier. Ik weet helaas niet genoeg hoe een live-cd juist werkt om te weten welke aanpassingen aan jouw beschrijving nodig zouden zijn. Zou je dit eventueel in een volgende post eens kunnen bespreken - of me gewoon een mailtje sturen, een paar indicaties zouden al nuttig kunnen zijn.
Groet,
Joris