Jak vyplývá z názvu, bezdiskové stanice nemají zrovna moc možností, kde si lokálně pamatovat konfiguraci a další informace. Řešením je bootování ze sítě s využitím serverů, které stanicím při startu konfiguraci sdělí (BootP/DHCP), které jim poskytnou zavaděč a jádro (TFTP) a které jim zpřístupní část svého diskového prostoru (NFS).
I když stanice disk má, je vhodné konfiguraci sítě uchovávat a spravovat centralizovaně. Pokud je taková stanice navíc mobilní, chce se od ní, aby si sama zjistila konfigurace sítě, ve které se právě nachází (DHCP/IPv6).
Protokol BootP (RFC 951, 1532 a 1542) slouží k získaní konfigurace. Klient ve svém požadavku (BOOTREQUEST) uvádí svou hardwarovou adresu a volitelně svou IP adresu, jméno serveru a požadovaný boot soubor. Server v odpovědi (BOOTREPLY) pošle požadovanou IP adresu, IP adresu gateway, svou IP adresu a jméno.
Protokol DHCP (RFC 2131 a řada dalších) rozšiřuje starší protokol BootP, zachovává stejný formát zpráv. Slouží také k získaní konfigurace, navíc má informace jako: maska podsítě, broadcastová adresa, adresa routeru, doména, adresa DNS serveru atd.
Komunikace:
začíná klient broadcastem požadavku DHCPDISCOVER
server(y) odpovídají svou nabídkou DHCPOFFER
klient si vybere a příjme nabídku posláním DHCPREQUEST
server potvrdí DHCPACK nebo zamítne DHCPNAK
Platnost přidělené IP adresy je většinou omezená, před jejím vypršením musí klient požádat o prodloužení. Když už klient přidělenou IP adresu nepotřebuje, posílá DHCPRELEASE zprávu.
Protokol TFTP (RFC 783 a 1350) slouží pro přenos dat po síti. Jedná se o odlehčené FTP, neumožňuje např. listování adresářů a authentizaci. Spojení se naváže na portu 69 (UDP) a pokračuje na náhodně zvoleném portu.
Typy paketů:
RRQ žádost o čtení, obsahuje jméno souboru a mód (netascii, octet, mail)
WRQ žádost o zápis, obsahuje jméno souboru a mód (netascii, octet, mail)
DATA přenášená data, součástí číslo bloku
ACK potvrzení přijatého paketu, součástí číslo bloku
ERROR chyba, obsahuje kód chyby a zprávu
Ke konfiguraci slouží soubor /etc/dhcpd.conf
,
který není vytvářen automaticky při instalaci. Nejjednodušší je zkopírovat
nějaký konfigurační soubor (třeba vzorový
/usr/share/doc/dhcp-<version-number>/dhcpd.conf.sample
) a upravit jej
pro vlastní potřebu. Důležité je mít subnet
sekci pro každé rozhraní.
Dále je vhodné vytvořit prázdný soubor /var/lib/dhcp/dhcpd.leases
, ve kterém
si server při běhu uchovává informace o přidělených IP adresách.
# cat /etc/dhcpd.conf authoritative; ddns-update-style none; subnet 10.0.40.0 netmask 255.255.255.0 { range 10.0.40.100 10.0.40.199; default-lease-time 21600; max-lease-time 43200; option domain-name "lab.fi.muni.cz"; option routers 10.0.40.1; option ip-forwarding off; option broadcast-address 10.0.40.255; option subnet-mask 255.255.255.0; option domain-name-servers 10.0.40.1; next-server 10.0.40.1; filename "pxelinux.0"; host speo-beta { allow booting; hardware ethernet 00:01:02:19:09:F6; fixed-address 10.0.40.2; } } subnet 10.0.0.0 netmask 255.255.255.0 { }
Konfiguračním souborem je /etc/dhclient.conf
, většinou postačí defaultní
nastavení (prázdný soubor). Získané informace jsou uloženy v souboru dhclient.leases
, jsou
použivány například při nedostupnosti DHCP serveru. Dále uvedený obsah
souboru /etc/sysconfig/network-scripts/ifcfg-eth0
nastavuje použití DHCP
pro konfiguraci sítě při bootování.
DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes
# cat /usr/share/doc/dhclient-3.0pl2/dhclient.conf.sample send host-name "andare.fugue.com"; send dhcp-client-identifier 1:0:a0:24:ab:fb:9c; send dhcp-lease-time 3600; supersede domain-name "fugue.com home.vix.com"; prepend domain-name-servers 127.0.0.1; request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name; require subnet-mask, domain-name-servers; timeout 60; retry 60; reboot 10; select-timeout 5; initial-interval 2; script "/etc/dhclient-script"; media "-link0 -link1 -link2", "link0 link1"; reject 192.33.137.209; alias { interface "ep0"; fixed-address 192.5.5.213; option subnet-mask 255.255.255.255; } lease { interface "ep0"; fixed-address 192.33.137.200; medium "link0 link1"; option host-name "andare.swiftmedia.com"; option subnet-mask 255.255.255.0; option broadcast-address 192.33.137.255; option routers 192.33.137.250; option domain-name-servers 127.0.0.1; renew 2 2000/1/12 00:00:01; rebind 2 2000/1/12 00:00:01; expire 2 2000/1/12 00:00:01; }
/etc/xinetd.d/tftp
. Důležité je
službu povolit a nastavit dobře adresář pro chrootovaný běh.
# cat /etc/xinetd.d/tftp # default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }
PXELinux funguje na principu postupného zavádění. Bootující stanice nejdříve
zjistí konfiguraci sítě, s ní i jméno souboru zavaděče
(pxelinux.0
), který stáhne použitím TFTP. Následně je stáhnuto
a spuštěno jádro. Konfigurační soubory jsou v adresáři pxelinux.conf
,
jejich jména jsou hexadecimálním zápisy adres stanic (nebo část adresy), jejichž konfiguraci
obsahují. Pokud se pro stanici nenajde odpovídající soubor, použije se nastavení z
default
.
# ktera konfigurace sa ma spustit defaultne DEFAULT nfs # cekej 3 sekundy pred natahovanim jadra TIMEOUT 30 # zobraz boot prompt PROMPT 1 LABEL disk # cesty jsou relativne k TFTP server root KERNEL 10.0.40.2/bzImage # parametry jadra APPEND root=/dev/hda3 # pripojit k parametrum jadra i informace o siti # IP stanice,bootserver,gateway,netmask, IPAPPEND 1 LABEL nfs KERNEL 10.0.40.2/bzImage APPEND root=/dev/nfs rw nfsroot=10.0.40.1:/tftpboot/10.0.40.2 IPAPPEND 1