OpenSUSE installeren met PXE boot

Ga naar: navigatie, zoeken


Inleiding

SUSE Linux is een distributie die vrij regelmatig met nieuwe versies komt. Daarom zou het ideaal zijn om systemen te kunnen installeren zonder telkens nieuwe CD's of DVD's te moeten branden. In dit artikel bespreken we de beste manier om SUSE volledig over het netwerk te installeren.

PXE is een manier om computers op te starten zonder diskette, harde schijf of CD-ROM. De BIOS start meteen via het netwerk op met behulp van het PXE-protocol. Om dit mogelijk te maken heeft u een server nodig die geschikt is voor PSE en een client-computer die een code-module heeft die PXE kan draaien voor de opgegeven netwerkinterface. De meeste nieuwere moederborden met een on-board netwerkpoort hebben al deze module als onderdeel van hun BIOS-image. Als u wilt opstarten vanaf een netwerkkaart (ISA/PCI/etc), dan dient u de juiste module op een BootROM (alleen van toepassing als de netwerkkaart een ROM-socket heeft) te zetten of in de BIOS-image (alleen van toepassing als u een geschikt image-programma beschikbaar hebt, zoals van AMIFLASH). Er zijn maar weinig besturingssystemen die PXE-serverconfiguratie ondersteunen - maar Windows 2000 Server en SUSE Linux bieden het.

Voorbereiding

Voor een succesvolle netwerkinstallatie hebt u het volgende nodig:

  • een bestaande SUSE Linux (die dhcp en tftp host),
  • een internetverbinding (bij voorkeur breedband),
  • een computer met ondersteuning voor PXE boot.

DHCP- & TFTP-server instellen

DHCP instellen

PXE is gebaseerd op een BOOTP-server die alle essentiƫle informatie verzendt waarmee het systeem zijn netwerklaag kan starten. Die taak kan worden gedaan met de welbekende DHCPd-server die met SUSE wordt meegeleverd. Hier is een voorbeeld van zo'n configuratie: (standaardconfiguratiebestand is /etc/dhcpd.conf):

host target_host {
     hardware ethernet xx:xx:xx:yy:yy:yy;
     fixed-address 192.168.1.10;
     server-name "192.168.1.1";
     next-server 192.168.1.1;
     filename "/tftpboot/pxelinux.0";
}

Merk op dat we 2 regels voor de PXE-boot hebben toegevoegd. Het is inderdaad noodzakelijk om het IP-adres van de TFTP-bootserver (server-name) en de bestandsnaam dat de PXE-bootstrap (filename) bevat op te geven. U herstart vervolgens de DHCPd-server als volgt:

# rcdhcpd restart

Let op: Afhankelijk van welke TFTP-server u gebruikt en of deze in een chroot-omgeving draait kan het zijn dat "filename" dient te worden opgegeven zonder het bijhorende pad. Bij de standaard TFTP-server van openSUSE en bij een RedHat-server is dat het geval. Op deze servesrs ziet "filename" er als volgt uit:

filename "pxelinux.0";

Met de ISC DHCP-server versie 3 (meegeleverd met openSUSE) is het mogelijk om de DHCP-server zo in te stellen dat die alleen reageert op boot-verzoeken. Op die manier kan deze DHCP-server parallel draaien met een aandere standaard DHCP-server. Dit kan wenselijk zijn in het geval dat de standaard DHCP-server niet kan worden ingesteld om een bootserver- of bootbestandsnaam aan te leveren (bij veel DSL-routers is dat het geval). De PXE-client zal de DHCP-aanbiedingen die geen bootserver- of bootbestandsnaam bevatten negeren.

Hieronder vindt u een compleet configuratiebestand voor dit scenario:

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none; ddns-updates off;
allow booting;

option domain-name "my.domain";
option domain-name-servers my.dnsserver;
option routers my.router;
  
# definieer regels im DHCP-requests van PXE- en Etherboot-clients te identificeren.
class "pxe" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
}
class "etherboot" {
    match if substring (option vendor-class-identifier, 0, 9) = "Etherboot";
}
  
subnet 192.168.1.0 netmask 255.255.255.0 {
    option broadcast-address 192.168.1.255;
    pool {
         default-lease-time 180; # geen lange lease-tijd vereist voor opstarten
         max-lease-time 360;     # opgestart systeem doet eigen dhcp-request
         server-name "mynbootserver";
         next-server mynbootserver.; # in het geval uw lokale DNS alleen
                                    # ongekwalificeerde domeinen blijft volgen '.'
         filename "pxelinux.0";
         allow members of "pxe";
         allow members of "etherboot"; # allow etherboot, too
         range 192.168.1.201 192.168.1.211;
     }
}

atftpd instellen

Het is aan te bevelen om het pakket atftp te gebruiken omdat atftp de enige vrije TFTP-server is die RFC volledig ondersteunt. Eenmaal geĆÆnstalleerd dient u te controleren of alles OK is in het bestand /etc/sysconfig/atftp. Hier een voorbeeldconfiguratie:

ATFTPD_OPTIONS="--daemon --user tftp -v"
ATFTPD_USE_INETD="no"
ATFTPD_DIRECTORY="/srv/tftp"

Merk in dit voorbeeld op dat de hoofdmap voor TFTP is gezet op /srv/tftp. U dient de TFTP-server als volgt de (her)starten:

Opmerking: de standaard TFTP-server die met RedHat Enterprise Linux wordt meegeleverd werkt goed zonder verdere configuratie. Start de service eenvoudigweg met commando:

chkconfig tftp on

tftpd-hpa instellen

tftpd-hpa is de FTFP-server van H. Peter Anvin, beschikbaar in het pakket "tftpd". In de standaardopzet is deze geconfigureerd om op te starten vanuit xinetd en zal de map die in /etc/xinetd.d/tftp is opgegeven worden gebruikt als hoofdmap. Meestal is dat /tftpboot. Opties om als gebruiker zonder privileges uit te voeren kunnen via xinetd worden doorgegeven (oftewel via /etc/xinetd.d/tftp).

PXE-boot opzetten

Alles ophalen

Voordat u de PXE-omgeving opzet dient u het pakket syslinux te installeren. Dit pakket levert een zeer bruikbaar bestand:

 /usr/share/syslinux/pxelinux.0

Als u syslinux niet kunt installeren, dan kunt u dit kleine bestand hier downloaden.

PXE-boot opbouwen

U hebt nu in principe alles wat u nodig hebt om uw PXE-bootomgeving op te bouwen. Ga naar de hoofdmap van TFTP (standaard is /srv/ftp) en maak de eerste structuur aan zoals hieronder wordt aangegeven:

# cd /srv/tftp
# mkdir tftpboot
# cd tftpboot
# mkdir pxelinux.cfg

Kopieer het PXE-bootstrap-bestand naar de map tftpboot:

# cp /usr/share/syslinux/pxelinux.0 /srv/tftp/tftpboot

Maak nu het configuratiebestand voor PXE aan. Deze zit niet diep in zijn structuur van het bestand syslinux.cfg.

# vi /srv/tftp/tftpboot/pxelinux.cfg/default

Hier is een voorbeeld van zo'n configuratiebestand, pas deze aan aan uw eigen configuratie.

default linux
prompt   1
timeout  30
 
# Install Linux
label linux
  kernel linux
  append initrd=initrd splash=silent showopts
 

Opmerking: Als u een RedHat-gebaseerde server gebruikt, dan heeft uw standaardconfiguratie nog enkele extra opties nodig voor de regel die met "append" begint:

append root=/dev/ram0 load_ramdisk=1 initrd=initrd splash=silent showopts ramdisk_size=4096 init=linuxrc

Dit configuratiebestand refereert naar 2 belangrijke bestanden: linux en initrd. Deze bestanden dienen te worden gedownload vanuit de netwerkinstallatiebron van SUSE (of een mirror daarvan). Merk op dat de bron afhankelijk is van uw hardware (i386 of x86_64).

  • dus voor i386:
# cd /srv/tftp/tftpboot
# wget http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/boot/i386/loader/initrd
# wget http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/boot/i386/loader/linux
  • dus vooor x86_64:
# cd /srv/tftp/tftpboot
# wget http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/boot/x86_64/loader/initrd
# wget http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/boot/x86_64/loader/linux

Opmerking: Als u een RedHat-gebaseerde server gebruikt, dan dient uw mappenstructuur voor de TFTP-server er als volgt uit te zien:

/tftpboot 
/tftpboot/pxelinux.0 
/tftpboot/initrd.img 
/tftpboot/vmlinuz 
/tftpboot/pxelinux.cfg 
/tftpboot/pxelinux.cfg/default

PXE opstarten

U moet er voor zorgen dat de computer waarop de installatie moet plaatsvinden zodanig is ingesteld dat deze via het netwerk kan opstarten en te controleren of PXE is geactiveerd. Daarna zal alles naar verwachting werken. Veel plezier met PXE!

Valkuilen / bekende problemen

PXELINUX-boot is erg traag

Het kan zijn dat het tijdens het laden an PXELINUX lijkt alsof het wel erg lang duurt om door al de verschillende regels te lopen zoals deze:

pxelinux.cfg/01-88-99-aa-bb-cc-dd
pxelinux.cfg/C000025B
pxelinux.cfg/C000025
pxelinux.cfg/C00002
pxelinux.cfg/C0000
pxelinux.cfg/C000
pxelinux.cfg/C00
pxelinux.cfg/C0
pxelinux.cfg/C
pxelinux.cfg/default

U dient er zeker van te zijn dat u next-server in het bestand /etc/dhcpd.conf hebt ingesteld op het adres van uw TFTP-server. Als u geen hostnaam hebt, zoals getoond in de voorbeelden, voeg dan een regel als deze toe:

next-server 192.168.77.254;

Geen opties geaccepteerd

Als uw waarschuwingen krijgt zoals de volgende in /var/log/messages:

in.tftpd: tftp: client does not accept options

Dit is normaal. PXELINUX blijkt niet alle opties te accepteren, maar dit heeft geen effect op het opstarten.

Socket-fouten tijdens het draaien van uw openSUSE's in.tftp

Als u foutmeldingen als deze krijgt:

in.tftpd: cannot bind to local socket: Address already in use

dan zijn waarschijnlijk de opties voor de server in /etc/xinet.d/tftp niet goed ingesteld. Controleer ze zorgvuldig.

Links voor aanvullende informatie

-- MightyBob 16:34, 1 april 2006 (UTC)