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/

Podobne dokumenty