Bootowanie przez sieć, stacje bezdyskowe na PLD - PLD
Transkrypt
Bootowanie przez sieć, stacje bezdyskowe na PLD - PLD
2016/01/18 09:44 1/9 Bootowanie przez sieć, stacje bezdyskowe na PLD - Remote Network Boot, diskless on PLD Bootowanie przez sieć, stacje bezdyskowe na PLD - Remote Network Boot, diskless on PLD Obecnie najczęściej stosuje się pobieranie parametrów z serwera DHCP przez klienta z PXE (ang. Preboot Execution Environment). Co potrzebne: 1. karta sieciowa z opcja bootowania przez sieć (PXE),lub (dla starych kart i komputerów które nie mają opcji PXE) odpowiednio przygotowana dyskietka, CD lub USB-drive z klientem PXE. Jak przygotować masz tutaj: www.etherboot.org www.rom-o-matic.net 2. serwer przekazujący parametry startowe, jeden z poniższych: za pomocą serwera DHCP - pakiet dhcpd (najczęściej stosowane i zalecane). za pomocą serwera PXE - pakie pxe (jeśli nie możesz używać serwera DHCP). za pomocą bootparamd - pakiet bootparamd. za pomoca serwera BOOTP (zalecane jest korzystanie z DHCP które jest następcą BOOTP) - pakiet bootp. 3. serwer TFTP - pakiet tftpd-hpa (obecnie zalecany do współpracy z pxelinux). 4. serwer NFS udostępniający zasoby dyskowe (np: root over NFS, swap over NFS) o ile planujemy z nich korzystać a nie tylko z ramdysku - pakiet nfsd. Konfiguracja serwera DHCP dla stacji bootowanych przez sieć dzięki PXE - Remote Network Boot via PXE W pliku /etc/dhcpd.conf wpisujemy odpowiednie opcje, poniżej podane są one globalnie dla wszystkich stacji, niektóre z nich można podać dla wybranej grupy stacji lub dla pojedyńczego terminala, (zakładamy że serwer DHCP jest już wstępnie skonfigurowany: Konfiguracja serwera DHCP): allow bootp; # allow booting; # filename "/pxe/pxelinux.0"; bootloadera dla PXE z pakietu syslinux, # pełna scieżka do pliku # jeśli serwer tftp działa w chroot podajemy względną option root-path "192.168.0.1:/exports/diskless"; # pełna scieżka do root-path dla terminala (z /etc/exports) next-server 192.168.0.1; # IP serwera TFTP skąd PXE pobiera pliki #range dynamic-bootp 192.168.0.10 192.168.0.20; # zakres IP przyznawany stacjom bootowanym z sieci, # jeśli definiujemy każdą stację osobno nie potrzebujemy # opcje specjalne dla pxelinux zobacz opis tutaj http://syslinux.zytor.com/pxe.php PLD-users.org - http://pld-users.org/ Last update: 2008/10/24 12:44 pl:przewodniki:pxe http://pld-users.org/pl/przewodniki/pxe # definicje opcji: option space pxelinux; option pxelinux.magic code 208 = string; option pxelinux.configfile code 209 = text; option pxelinux.pathprefix code 210 = text; option pxelinux.reboottime code 211 = unsigned integer 32; # deklaracja wartości jakie mają mieć opcje: #option pxelinux.magic f1:00:74:7e; # #option pxelinux.configfile "pxelinux.cfg/default"; # scieżka do pliku konfiguracyjnego (nie ustawiaj chyba że # wiesz co robisz, wiecej tutaj: http://syslinux.zytor.com/pxe.php) #option pxelinux.pathprefix "/pxe"; # prefix option pxelinux.reboottime 30; # czas po ktorym stacja zrobi reboot jesli nie da rady się zabootować ping-check = 1; # zezwalamy pingować przykład konfiguracji dla pojedyńczego terminala: host terminal1{ hardware ethernet 00:d0:dd:d6:df:d7; fixed-address 192.168.0.2; next-server 192.168.0.1; # IP serwera TFTP filename "/pxe/memdisk.0"; # pełna scieżka do pliku bootloadera dla PXE z pakietu syslinux # jeżeli tftp działa w chroot podajemy względną option root-path "192.168.0.1:/exports/terminals"; # pełna scieżka do root-path dla terminala - z /etc/exports } Instalacja i konfiguracja serwera TFTP dla PXE poldek -i tftpd-hpa w PLD aktualnie serwery tftp są standardowo uruchamiane przez inetd: w /etc/sysconfig/rc-inetd/tftpd znajduje się konfiguracja uruchamiania serwera tftp Następnie tworzymy katalog: $ mkdir -p /var/lib/tftp/pxe i umieszczamy następujące pliki: initrd - plik z odpowiednio przygotowanym obrazem initrd pxelinux.0 - bootloader z pakietu syslinux vmlinuz - plik z kernelem oraz tworzymy katalog: http://pld-users.org/ Printed on 2016/01/18 09:44 2016/01/18 09:44 3/9 Bootowanie przez sieć, stacje bezdyskowe na PLD - Remote Network Boot, diskless on PLD pxelinux.cfg - katalog z plikami konfiguracyjnymi bootloadera jak widać zawartość jest dość podobna do /boot (i spełnia to samo zadanie) Kolejność poszukiwania poszczególnych plików konfiguracyjnych w pxelinux.cfg jest następująca: wpierw szukany jest plik o nazwie takiej samej jak MAC karty terminala czyli np: 00-02-44-90-1F-7B a na końcu szukany jest plik default Przykładowa zawartośc pliku konfiguracyjnego bootloadera (tutaj dla konkretnej stacji o adresie MAC 00-02-44-90-1F-7B), jesli nie chcesz definiować dla kazdej stacji lub grupy stacji utwórz plik o nazwie default: # vim /var/lib/tftp/pxe/pxelinux.cfg/00-02-44-90-1F-7B LABEL serwerinit KERNEL vmlinuz APPEND \ nfsaddrs=192.168.0.2:192.168.0.1:255.255.255.0:serwer2 \ ip=192.168.0.2:192.168.0.1:192.168.0.1:255.255.255.0:serwer2:eth0:bootp \ iniitrd=initrd \ root=/dev/nfs \ nfsroot=192.168.0.1:/mnt/hdb2/root/serwer2 IPAPPEND 1 APPEND przekazuje do ładowanego kernela opcje dodatkowe: nfsaddrs=<adres IP terminala>:<adres IP serwera>:<maska podsieci>:<nazwa terminala> ip=<adres IP terminala>:<adres IP serweray>:<adres IP serwera x>:<maska podsieci>:<nazwa terminala>:<nazwa interfejsu przez który łączy sie z rootpath>:bootp iniitrd=<nazwa pliku initrd> root=/dev/nfs - wirtualne wpis urządzenia wskazujący ze root-path bedzie po NFS nfsroot=<IP serwera NFS>:<scieżka do root-path>:<opcje dla NFS> Główny system plików (/) po NFS (ROOT over NFS) przygotowanie ROOTFS instalujemy pakiety serwera NFS: # poldek -i install nfs-utils nfs-utils-lock portmap edytujemy /etc/exports # vim /etc/exports /terminals/clients/hostname /terminals/clients/etc PLD-users.org - http://pld-users.org/ hostname.domainname(rw,no_root_squash) *.domainname(ro,no_root_squash) Last update: 2008/10/24 12:44 /terminals/clients/var /terminals/usr /terminals/sbin /terminals/bin /terminals/lib /terminals/home pl:przewodniki:pxe http://pld-users.org/pl/przewodniki/pxe *.domainname(ro,no_root_squash) *.domainname(ro,no_root_squash) *.domainname(ro,no_root_squash) *.domainname(ro,no_root_squash) *.domainname(ro,no_root_squash) *.domainname(rw,no_root_squash) Są dwa sposoby: obsługa nfs wkompilowana w kernel. poprzez odpowiednio przygotowane initrd. W pierwszym przypadku w kernel muszą być wkompilowane nastepujące opcje: CONFIG_IP_PNP=y CONFIG_IP_PNP_BOOTP=y CONFIG_ROOT_NFS=y sprawdzić można to na działającym kernelu poprzez: cat /proc/config.gz | grep -E "CONFIG_IP_PNP|CONFIG_ROOT" Z pewnych względów lepszy jest jednak sposób drugi (poprzez initrd). Initrd dla ROOTFS po NFS Przygotowujemy system plików dla naszych stacji (terminali): # mkdir -p /terminals # poldek --install-dist=/terminals setup FHS dev pwdutils chkconfig dhcpcd poldek / vim geninitrd modutils cpio lilo mount login mingetty kernel edytujemy plik fstab dla terminali: # vim /terminals/etc/fstab server:/terminals/clients/hostname / nfs server:/terminals/bin /bin nfs server:/terminals/usr /usr nfs server:/terminals/sbin /sbin nfs server:/terminals/home /home nfs server:/terminals/lib /lib nfs server:/terminals/clients/etc /server/etc server:/terminals/clients/var /server/var default 1 1 default 1 1 default 1 1 default 1 1 default 1 1 default 1 1 nfs default nfs default none /proc proc defaults,noauto,gid=17 none /sys sysfs defaults,noauto,gid=17 none /proc/bus/usb usbfs defaults,noauto,devgid=78,devmode=0664 0 0 http://pld-users.org/ 1 1 1 1 0 0 0 0 Printed on 2016/01/18 09:44 2016/01/18 09:44 5/9 Bootowanie przez sieć, stacje bezdyskowe na PLD - Remote Network Boot, diskless on PLD należy wygenerować w PLD odpowiedni initrd w następujący sposób ( WAŻNE: wersja geninitrd >= 9000.2 ): chroot /terminals /bin/sh edytujemy /etc/sysconfig/geninitrd : ## dopisujemy tu moduły kart sieciowych ktore bedą używane przez terminale np: BASICMODULES="e1000 ne2k-pci mii 8139too 3c59x" generujemy initrd i wychodzimy z chroot: # /sbin/geninitrd -f -v /boot/initrd-2.6.22.16-3.gz 2.6.22.16-3 geninitrd: WARNING: /proc filesystem not mounted, may cause wrong results or failure. geninitrd: Using libdir: lib geninitrd: Using modprobe -c to get modules config geninitrd: Using /dev/nfs as device for rootfs geninitrd: Finding modules for device path /dev/nfs geninitrd: Remember to use `root=/dev/ram0 init=/linuxrc' when starting kernel geninitrd: or you will have problems like init(xx) being child process of swapper(1). geninitrd: + cp /bin/initrd-busybox /tmp/initrd.W6tqYb/bin/initrd-busybox geninitrd: Loading module [sunrpc] without options. geninitrd: Loading module [lockd] without options. geninitrd: Loading module [nfs_acl] without options. geninitrd: Loading module [nfs] without options. geninitrd: Loading module [e1000] without options. geninitrd: Loading module [8390] without options. geninitrd: Loading module [ne2k-pci] without options. geninitrd: Loading module [mii] without options. geninitrd: Loading module [8139too] without options. geninitrd: Loading module [3c59x] without options. geninitrd: Adding rootfs on NFS support to initrd (dhcp) rootfs on NFS root=/dev/nfs geninitrd: Compressing /boot/initrd-2.6.22.16-3.gz # exit wygenerowane w ten sposob initrd wraz z kernelem kopiujemy do odpowiedniego katalogu udostepnianego przez tftp. Przykład dla bootowania przez PXE za pomocą dhcp przy wykorzystaniu RescueCD, prosta konfiguracja (krok po kroku). # instalujemy potrzebne pakiety # dhcpd jest już wstępnie skonfigurowane i działające w sieci, patrz [[http://pl.docs.pld-linux.org/uslugi_dhcpd.html|Serwer DHCP]] PLD-users.org - http://pld-users.org/ Last update: 2008/10/24 12:44 pl:przewodniki:pxe http://pld-users.org/pl/przewodniki/pxe sudo poldek -i syslinux dhcpd tftpd-hpa tftp-hpa # W /var/lib/tftp przygotowujemy konfiguracje startową dla terminali # w tym katalogu umieszczamy pliki configuracyjne bootloadera. mkdir -p /var/lib/tftp/pxe/pxelinux.conf # kopiujemy bootloadery z pakietu syslinux cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftp/pxe/pxelinux.0 cp /usr/lib/syslinux/memdisk /var/lib/tftp/pxe/memdisk #sciagamy najnowszż wersje RCD wget http://rescuecd.pld-linux.org/download/2007-06-17/x86/RCDx86_290.iso # montujemy mount -o loop RCDx86_290.iso /mnt/cdrom # kopiujemy pliki z RescueCD cd /mnt/cdrom # informacje wyswietlana przy logowaniu cp boot/iso/linux/boot.msg /var/lib/tftp/pxe # informacja wyżwietlana po wcisnieciu F1 cp boot/iso/linux/help.msg /var/lib/tftp/pxe # obraz z programem memtest cp boot/iso/linux/memtest /var/lib/tftp/pxe # initrd z RescueCD cp rescue.cpi /var/lib/tftp/pxe # kernel cp boot/isolinux/vmlinuz /var/lib/tftp/pxe # edytujemy pliki konfiguracyjne: Edytujemy /etc/dhcpd.conf ## wybrane opcje: tutaj w sekcji global ale mozna też dla konkretnych stacji niektore opcje ustawic ########## allow bootp; allow booting; filename "/pxe/pxelinux.0"; # option root-path "192.168.0.1:/home/services/diskless"; next-server 192.168.0.1; # adres IP serwera tftp #range dynamic-bootp 192.168.0.10 192.168.0.20; # zakres IP przyznawany stacjom bootowanym # jeśli definiujemy każdą stację osobno nie potrzebujemy # pxelinux option see: http://syslinux.zytor.com/pxe.php # custom options for pxelinux option space pxelinux; option pxelinux.magic code 208 = string; option pxelinux.configfile code 209 = text; option pxelinux.pathprefix code 210 = text; option pxelinux.reboottime code 211 = unsigned integer 32; #option pxelinux.magic f1:00:74:7e; #option pxelinux.configfile "pxelinux.cfg/default"; #option pxelinux.pathprefix "/pxe"; option pxelinux.reboottime 30; http://pld-users.org/ Printed on 2016/01/18 09:44 2016/01/18 09:44 7/9 Bootowanie przez sieć, stacje bezdyskowe na PLD - Remote Network Boot, diskless on PLD edytujemy plik menu netbootloadera: $ sudo vim /var/lib/tftp/pxe/pxelinux.conf/default default local prompt 1 display boot.msg F1 help.msg timeout 20 LABEL linuxnet kernel vmlinuz append initrd=/rescue.cpi init=/linuxrc root=/dev/ram0 ramdisk_size=54000 ipappend 1 LABEL linuxnetconsole kernel vmlinuz append initrd=/rescue.cpi init=/linuxrc root=/dev/ram0 ramdisk_size=54000 console=tty0 console=ttyS0,9600n81 # kilka przydatnych przykładowych wpisów LABEL memtest kernel memtest LABEL local LOCALBOOT 0 # uruchomienie systemu lokalnego (np: z dysku) LABEL winnet KERNEL memdisk # przykład dla windows. Utwórz boot-dyskietke pod windows. # Upewnij się że pozwala na uruchomienie komputera, następnie utwórz plik w poniższy sposób: # dd if=/dev/floppy of=/var/lib/tftp/pxe/win.img bs=1024 count=1440 APPEND initrd=win.img LABEL next localboot -1 LABEL hd0 localboot 0x80 LABEL hd1 localboot 0x81 LABEL floppy localboot 0x00 # ustawiamy właściciela dla plików $ sudo chown -R tftp:root /var/lib/tftp/pxe PLD-users.org - http://pld-users.org/ Last update: 2008/10/24 12:44 # # $ $ pl:przewodniki:pxe http://pld-users.org/pl/przewodniki/pxe zmiana uprawnien dla podkatalogow i plików - tylko odczyt dla root (mozesz zmienic na 755 dla katalogow i 644 dla plików) sudo find /var/lib/tftp/pxe -type d -exec chmod 500 "{}" \; sudo find /var/lib/tftp/pxe -type f -exec chmod 400 "{}" \; # restartujemy usługi $ sudo /etc/init.d/dhcpd restart $ sudo /etc/init.d/rc-inetd restart Testowanie instalacji 1. sprawdzamy czy nie blokuje iptables, wyłaczamy reguły i ustawiamy domyślną polityke na ACCEPT # sudo iptables -L # sudo iptables -t nat -L # sudo iptables -t mangle -L 2. sprawdzamy czy dhcp nasłuchuje na porcie 67 # sudo netstat -nulp | grep '67.*dhcp' udp 0 0 0.0.0.0:67 22691/dhcpd 0.0.0.0:* 3. sprawdzamy czy serwer tftpd słucha na porcie 69 # sudo netstat -nulp | grep '69.*inetd' udp 0 0 0.0.0.0:69 3610/inetd 0.0.0.0:* 4. testujemy czy możemy pobrać bootloader po tftp (klient z pakietu tftp-hpa), zastąp SERVER_IP adresem IP swojego serwera. # cd /tmp # echo 'get pxe/pxelinux.0' | tftp-hpa SERVER_IP # ls -l pxelinux.0 Inne sposoby bootowanie po HTTP Boot z SAN po iSCSI lub AoE Dodatki Kody statusu/błędów PXE http://pld-users.org/ Printed on 2016/01/18 09:44 2016/01/18 09:44 9/9 Bootowanie przez sieć, stacje bezdyskowe na PLD - Remote Network Boot, diskless on PLD Literatura: http://andrzej.dopierala.name/2007-06-02_Bootowanie_systemu_z_pxe_na_nowych_komputerac h http://rescuecd.pld-linux.org/download/2007-06-17/PXE.txt http://oceanic.wsisiz.edu.pl/~lukasz/Diskless.pl.html http://oceanic.wsisiz.edu.pl/~lukasz/xterm.html http://oceanic.wsisiz.edu.pl/~lukasz/nfsroot.txt http://oceanic.wsisiz.edu.pl/~lukasz/NFS-Root.pl.txt http://oceanic.wsisiz.edu.pl/~lukasz/NFS-Root-Client.pl.txt http://www.linux-boot.net/Scripts/InitRD/howto.html http://www.linux-boot.net/RootFS/ http://www.microsoft.com/technet/prodtechnol/windowsserver2003/pl/library/ServerHelp/22d1f4 8c-4c68-4c9a-a6f8-16a9ac3e0ce9.mspx http://pl.wikipedia.org/wiki/BOOTP http://www.herdsoft.com/ti/as400/ipcs/6_Expiriences.html http://www.beowulf.org/archive/2001-July/004265.html http://minibo.iele.polsl.gliwice.pl/~pz/zajecia/Linux/streszczenie/node212.html http://www.ltsp.org/documentation/ltsp-3.0-4-pl.pdf http://quietsche-entchen.de/cgi-bin/wiki.cgi/-ariane,/ArianeBootSequence http://www.vergenet.net/linux/diskless/ http://adas.artikon.one.pl/PLD/Initrd.txt http://pl.docs.pld-linux.org/konfiguracja_geninitrd.html http://team.pld.org.pl/~klakier/doc/install/pl/ From: http://pld-users.org/ - PLD-users.org Permanent link: http://pld-users.org/pl/przewodniki/pxe Last update: 2008/10/24 12:44 PLD-users.org - http://pld-users.org/