[Tutorial] Zdalne ładowanie Linux'a przez Etherboot(gPXE) i NFS

thc_flow

Zbanowany
Dołączył
Listopad 13, 2008
Posty
649
Zanudzę was na początek moją jakże wielowątkową i ciekawą opowiescią, jak to
wygrzebując starego kompa z szafy myślałem co z nim zrobić. Komputer - w sumie
za dobrze powiedziane - płyta główna z procesorem, do tego stacja dyskietek,
USB1.1, sieciówka i zasilacz. Mój chory mózg miał nagle wizję jak to z tego
trupa robię serwer sieciowy. Długo myślałem nad wszelkimi aspektami, w tym
ładowaniem systemu. Najprościej by było zainstalować system na pendrive, no ale
ten ów "komputer" bootowania z USB nie obsługuje, a dyskietka za mała żeby
wepchać na nią pełnowartościowy kernel który już umożliwiłby odczyt z nośnika
flash resztę systemu. Tak oto wpadłem na pomysł żeby sam kernel i ramdysk
ładować przez mechanizm Etherboot. Opiszę tutaj bardziej rozbudowaną metodę,
polegającą na ładowaniu także reszty systemu przez sieć, bazując na dystrybucji
Arch Linux (w innych dystrybucjach różnią się w sumie tylko nazwy pakietów które
będą nam potrzebne).

Wymagane programy na komputerze pełniącym rolę serwera:
-DNSMasq - posłuży nam za serwer DHCP udostępniający konfigurację sieci oraz
udostępni pliki kernela przez mechanizmy takie jak TFTP.
-NFS Server - udostępni w sieci lan całą resztę dystrybucji
-pxelinux - część pakietu bootloaderów syslinux
-zainstalowana dystrybucja linuksa którą chcemy udostępnić (możemy ją stworzyć
z tzw. bootstrapa, bądź standardowo instalowanej dystrybucji)

Na Archu wymagane programy instalujemy poleceniem:
Kod:
pacman -S dnsmasq nfs-utils syslinux

Ważne, aby kernel dystrybucji który udostępniamy miał obsługę NFS, przykładowo
w debianie nie jest to żadnym problemem, natomiast np. w Archu musimy
wygenerować dodatkowy ramdysk (przyda się pakiet mkinitcpio-nfs-utils)

Przygotowanie plików:
Proponuję wszystkie pliki bootloadera zamieścić w katalogu /boot
docelowej dystrybucji, a całość umieścić w /remote. Na takim położeniu
plików bazuję wszystkie konfiguracje, które tu prezentuję.

PXELINUX:
Na początek musimy przygotować bootloader który będziemy używać do ładowania
systemu, pxelinux jest wg mnie najlepszym wyborem.
Odszukujemy plikpxelinux.0, u mnie był on w folderze
/usr/lib/syslinux i kopiujemy go (bądź linkujemy) do folderu
/remote/boot. W dalszym configu zakładam, że kernel jest pod nazwą
vmlinuz26, a ramdysk linux26.img. Pora na konfigurację, w folderze
/remote/boot tworzymy plik pxelinux.cfg o zawartości
Kod:
default linux

label linux
  kernel vmlinuz26
  append initrd=kernel26.img rootfstype=nfs root=/dev/nfs nfsroot=192.168.1.1:/remote,v3,rsize=16384,wsize=16384 ip=::::::dhcp

W polu nfsroot musimy podać poprawne ip maszyny która udostępnia mechanizm.
Bootloader gotowy:)

DNSMasq:
Pora skonfigurować serwer DHCP udostępniający Etherboot.
Edytujemy plik /etc/dnsmasq.conf:
Kod:
dhcp-range=192.168.1.1,192.168.1.6,12h
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/remote/boot/
dhcp-option-force=208,f1:00:74:7e
dhcp-option-force=209,pxelinux.cfg
dhcp-option-force=210,/remote/boot/

Zwróćmy uwagę na wpis dhcp-range - określa on nam pulę adresów IP które
zostaną przydzielone.

NFS Server:
Do pliku /etc/exports dopisujemy:
Kod:
/remote *(rw,fsid=0,no_root_squash,no_subtree_check)

System kliencki:
System powinien działać bezproblemowo, jednak polecam edytować
/remote/etc/fstab precyzując rootfs jako
Kod:
none / none

Bezpieczeństwo:
Aby zabezpieczyć usługi które dodaliśmy, w /etc/hosts.allow dodajemy
wpisy:
Kod:
nfsd: 192.168.1.
rpcbind: 192.168.1.
mountd: 192.168.1.
zastępując częściowe IP zakresem zgodnym dla naszego LAN'u

Właśnie zakończyliśmy konfigurację serwera, usługi można bezpiecznie uruchomić.

Klient:
Pomimo, że część sprzętu wspiera natywnie PXE, dużo jest takiego który tej
funkcji nie oferuje. Na szczęście, wystarczy nośnik z gPXE - opensource'ową
wersją tej technologii. Opiszę tu instalację bootloadera na dyskietce, szkoda
płyty na tak mały program, ROM'ów raczej nikt nie będzie wypalał a z USB
korzysta sie niemal identycznie. Dla wygody użyjemy serwisu rom-o-matic który
automatycznie wygeneruje nam gotowy obraz.

Wchodzimy na stronę (1) i wybieramy aktualną wersję (w moim przypadku 1.0),
następnie wybieramy format na "floppy" i obsługę wszystkich możliwych kart
siecowych. Pobieramy obraz i nagrywamy go poleceniem
Kod:
dd if=gpxe.img of=/dev/fd0

Gotowa dyskietka zawiera bootloader który używamy gdy chcemy wystartować system
przez technologię Etherboot.


Linki:
(1) - http://rom-o-matic.net/
--- - http://en.wikipedia.org/wiki/Network_booting
--- - http://en.wikipedia.org/wiki/GPXE
--- - http://en.wikipedia.org/wiki/Network_File_System_(protocol)
--- - http://syslinux.zytor.com/wiki/index.php/PXELINUX
--- - http://www.etherboot.org/
--- - http://archlinux.org/

Oryginalna wersja pod adresem http://thcflow.pl
 
Do góry Bottom