OpCode.eu.org

Blog O autorze O serwisie
2021-07-24

PXE – bootowanie przez sieć

PXE jest technologią pozwalającą na bootowanie komputera "po sieci", czyli bez fizycznej instalacji systemu operacyjnego na danej maszynie. Wymaga ona wsparcia na poziomie BIOSu karty sieciowej.

Karta z włączonym wsparciem PXE, wysyła zapytanie do serwara DHCP i w odpowiedzi oprócz swojego adresu IP i tego typu danych otrzymuje także informacje związane z bootowaniem PXE (takie jak nazwa obrazu). Następnie obraz bootloadera pobierany jest z serwera TFTP i uruchamiany. Bootloader ten pobiera (typowo także po TFTP) i uruchamia odpowiedni obraz jądra, które rootfs montuje typowo z użyciem NFS.

Konfiguracja serwera PXE

DHCP

Serwer powinien mieć zainstalowaną (i uruchomioną) usługę DHCP, która w konfigu oprócz standardowego przyznawania adresów ma włączoną (globalnie lub dla wybranego hosta/hostów) opcję wysyłania nazwy obrazu PXE.

Dla serwera isc-dhcp-server jest to:

filename "pxelinux.0";

Natomiast dla dnsmasq (który może pełnić od razu funkcję serwera TFTP) jest to:

dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/lib/tftpboot/

TFTP

Na tym komputerze powinna działać także usługa TFTP (przy dnsmasq jest już w zestawie, przy isc-dhcp-server należy zainstalować i uruchomić osobny serwer, może być uruchamiany via xinetd).

Do głównego katalogu TFTP (np. /var/lib/tftpboot/) powinien być wgrany PXELINUX (na systemach Debianowych może być zainstalowany z paczki pxelinux i odpowiednio podlinkowany). Jego konfiguracja (w $ROOT_TFTP/pxelinux.cfg/default, gdzie $ROOT_TFTP jest ścieżką do głównego katalogu TFTP) może wyglądać:

DEFAULT menu.c32
PROMPT 0

MENU TITLE PXE Menu
MENU AUTOBOOT Starting Local System in # second

LABEL bootlocal
  MENU LABEL Boot From Local Disk
  MENU DEFAULT
  LOCALBOOT 0
TIMEOUT 1200

MENU INCLUDE debian-usb/pxelinux.cfg

Natomiast zainkludowany plik debian-usb/pxelinux.cfg może być postaci:

LABEL debianusb
MENU LABEL Debian LiveUSB via PXE
KERNEL debian-usb/vmlinuz
APPEND initrd=debian-usb/initrd.img console=tty0 console=ttyS0,115200n8 root=/dev/nfs nfsroot=/var/lib/tftpboot/debian-usb ro

NFS

Bootwanie PXE w wielu wypadkach wymaga także serwera NFS i może on być zainstalowany i uruchomiony na tej samej maszynie co DHCP i TFTP. W pliku /etc/exports powinien być wyeksportowany katalog w którym znajduje się rootfs dla maszyn uruchamianych z PXE np.:

/var/lib/tftpboot/debian-usb       *(ro,no_root_squash)

Obraz systemu:

Powyższa konfiguracja zakłada że obraz systemu umieszczony jest w /var/lib/tftpboot/debian-usb i funkcję takiego obrazu może pełnić (podmontowany w tej lokalizacji) obraz bootowalnego USB. W tym celu w /var/lib/tftpboot/debian-usb montujemy (lub wypakowujey) zawartość partycji rootfs z usb, np. poprzez:

cd /var/lib/tftpboot/; DEV=`losetup --partscan --find --show debian-usb.img`; mount ${DEV}p3 debian-usb
Tagi: debian storage