martedì 10 agosto 2010

PXE Boot, questo sconosciuto...

Ciao,
subito prima di andare in ferie ho deciso di lasciarvi un articolo interessante su come impostare il vostro server (va bene anche un laptop fà al caso nostro..) per avere un boot server PXE !
Come sarebbe "che vuol dire" ?
Uhm, mi sa che è meglio iniziare da lontano.
Vi è mai capitato dopo aver acceso il vostro Pc di aver visto dopo i vari messaggi del Bios uno relativo al boot da rete in cui c'e' scritto qualcosa tipo PXE e la marca della vostra scheda di rete ?
Se si vuol dire che avete una scheda di rete ;) , che nel vostro Bios la sequenza di avvio prevede il boot da rete prima di quello da Hard Disk, e in ultimo che la vostra scheda di rete è provvista della Eprom necessaria a farle eseguire questa procedura :D
Se no, che state leggendo a fare ? :p
Un po' di chiacchere chiarificatrici prima di passare alla pratica.
Il boot da rete è utile per vari scenari, da quello classico per installare una distribuzione Linux, al backup, o per l'avvio di terminali remoti.
Quello che che ci avviamo a realizzare è relativo alla installazione da rete di distribuzioni Linux (gli altri forse li tratterò in futuro).
Tenete presente che ci avvarremo di due diverse directory di lavoro, una serve al demone tftpd per avviare la procedura e conterrà pochi dati, l'altra directory invece, che chiameremo install, occuperà molto spazio perchè conterrà i dvd interi delle distribuzioni che intendiamo usare; è chiaro che è meglio metterla su una partizione che abbia parecchi giga liberi (se ad esempio vogliamo installare da rete solo Fedora 13 serviranno almeno 3Gb liberi).
La struttura delle directory sarà quindi questa:

/tftp/linux-install/

che contiene tante directory quante distribuzioni vogliamo installare da rete, la cartella msgs e la pxelinux.cfg, ed i files pxelinux.0 e menu.c32.

/tftp/linux-install/pxelinux.cfg

che contiene i files che servono a costruire il menu che vedremo una volta avviata la procedura, di solito è sufficiente il solo file default, ma nel nostro caso, visto che ci siamo, una serie di files perchè il menu che useremo sarà multi livello ;)

install

conterrà tante directory quante distribuzioni desideriamo avere disponibili per l'installazione via rete, e al loro interno il contenuto intero dei relativi dvd di installazione.
Create quindi la directory install nel percorso di vostra scelta:
mkdir /pathscelto/install

I componenti necessari al nostro scopo sono:

1) tftp
2) dhcpd
3) nfs
4) syslinux

Provvediamo quindi ad installare i pacchetti relativi col comando (da root):

yum -y install tftp-server dhcpd nfs syslinux

Fatto ? ;)
Bene, iniziamo col sostituire il file pxelinux.0:
mv /tftp/linux-install/pxelinux.0 /tftp/linux-install/pxelinux.0.old
cp /usr/share/syslinux/pxelinux.0 /tftp/linux-install/
poi copiamo il file menu.c32:
cp /usr/share/syslinux/menu.c32 /tftp/linux-install/

Adesso editiamo il file tftp col comando:
vi /etc/xinetd.d/tftp
e modifichiamo la riga
disable = yes
in
disable = no
Lo stesso risultato si ottiene scrivendo:
chkconfig tftp on
Inoltre penso dovremmo spostare la directory che il demone tftp serve modificando la riga:
server_args = -s /var/lib/tftpboot
in:
server_args = -s /tftpboot
Adesso editiamo il file exports che serve al demone nfs per montare le directory di installazione da remoto:
vi /etc/exports
e inseriamo:
/media/Extra/install/fedora32 *(no_root_squash,no_subtree_check,ro)
Attenzione: la parte /media/Extra è relativa alla mia installazione perchè ho usato il disco usb esterno montato in /media e di nome Extra per mettere il contenuto dei dvd di installazione, nel vostro caso invece dovrete sostituire il path relativo alla VOSTRA directory install (se ad esempio l'avete creata nella directory radice del vostro hard disk allora userete /install)
Create quindi la directory fedora 32 all'interno di /install:
mkdir /pathscelto/install/fedora32
Adesso popoliamo questa directory, se avete il dvd di fedora 32 provvedete a copiarne il contenuto all'interno della directory /pathscelto/install/fedora32, scegliete voi se farlo graficamente o da linea di comando; se avete invece il file .iso usate questi comandi:
mkdir /media/t
mount -o loop /pathdelfile/Fedora-13-i686-Live.iso /media/t
rsync -avSA /media/t/ /pathscelto/install/fedora32
Proviamo che la configurazione sia funzionante:
service nfs start
se è tutto ok proviamo anche da un pc remoto il comando:
showmount -e ipdelnostroserver
dovremmo vedere la condivisione messa in /etc/exports, in caso contrario provate a disabilitare sia selinux che il firewall e poi riprovate.
Se vogliamo che il servizio nfs parta anche ad ogni successivo riavvio digitiamo:
chkconfig nfs on
Adesso configuriamo il server dhcp per fornire al pc che tenta il boot da rete tutti i dati necessari:
vi /etc/dhcp/dhcpd.conf
e inseriamo:

ddns-update-style interim;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.255.0 {

option subnet-mask 255.255.255.0;

range 192.168.0.20 192.168.0.25;
default-lease-time 21600;
max-lease-time 43200;

#PXE-specific configuration directives...
if substring (option vendor-class-identifier, 0, 9) = "PXEClient" {
filename "linux-install/pxelinux.0";
next-server 192.168.0.166;
}
}

Precisazioni: la rete di classe C qui indicata (192.168.x.x) è arbitraria, dipende solo da come è configurata la scheda di rete del vostro server, nel mio caso ha ip 192.168.0.166.
E' quindi imperativo che scegliate la stessa classe di ip del vostro server e soprattutto che alla riga:
next-server 192.168.0.X
mettiate l'indirizzo IP del vostro server, pena il non funzionamento del tutto.
Bene, adesso scriviamo:
service dhcpd start
e assicuriamoci che il servizio parta correttamente, se poi vogliamo fare in modo che parta anche ad ogni successivo riavvio:
chkconfig dhcpd on
Adesso creiamo nel percorso /tftpboot/linux-install/pxelinux.cfg i files che creano i menu:
cd /tftpboot/linux-install/pxelinux.cfg
vi default
e inseriamo:

default menu.c32
    prompt 0
    
    menu title PXE Special Boot Menu
    menu INCLUDE pxelinux.cfg/graphics.conf
    MENU AUTOBOOT Starting Local System in # seconds
    
    label bootlocal
      menu label ^Boot Local System
      menu default
      localboot 0
      timeout 80
      TOTALTIMEOUT 9000
    
    LABEL Fedora Menu
      MENU LABEL ^Fedora Menu
      KERNEL menu.c32
      APPEND pxelinux.cfg/graphics.conf pxelinux.cfg/fedora.menu

    LABEL RedHat Menu
      MENU LABEL ^RedHat Menu
      KERNEL menu.c32
      APPEND pxelinux.cfg/graphics.conf pxelinux.cfg/redhat.menu

poi il file:
vi fedora.menu
inserendo:

MENU TITLE Setup Menu
    
    LABEL Main Menu
      MENU LABEL ^Return to Main Menu
      KERNEL menu.c32
      APPEND pxelinux.cfg/default
    
    label fedora32
      MENU PASSWD 123
      menu label Fedora - ^32 bit
      kernel fedora32/vmlinuz
      append initrd=fedora32/initrd.img ramdisk_size=9216
      method=nfs:192.168.0.166:/media/Extra/install/fedora32 ip=dhcp 
    
    label fedora64
      MENU PASSWD 123
      menu label Fedora - ^64 bit
      kernel fedora64/vmlinuz
      append initrd=fedora64/initrd.img ramdisk_size=9216
      method=nfs:192.168.0.166:/media/Extra/install/fedora64 ip=dhcp

ed infine
vi redhat.menu
inserendo:

MENU TITLE Setup Menu
    
    LABEL Main Menu
      MENU LABEL ^Return to Main Menu
      KERNEL menu.c32
      APPEND pxelinux.cfg/default
    
    label redhat32
      MENU PASSWD 123
      menu labelRedHat - ^32 bit
      kernel redhat32/vmlinuz
      append initrd=redhat32/initrd.img ramdisk_size=9216
      method=nfs:192.168.0.166:/media/Extra/install/redhat32 ip=dhcp 
    
    label redhat64
      MENU PASSWD 123
      menu label RedHat - ^64 bit
      kernel redhat64/vmlinuz
      append initrd=redhat64/initrd.img ramdisk_size=9216
      method=nfs:192.168.0.166:/media/Extra/install/redhat64 ip=dhcp


Attenzione: l'ip 192.168.0.166 andrà sostituito con quello del vostro server, come discusso sopra a proposito della configurazione dhcpd



Finito.
Provate da un pc remoto collegato alla stessa rete del vostro server (o da una macchina virtuale sullo stesso server che usi la rete in modalità bridge) ad effettuare il boot e forzate quello da rete (leggete i messaggi di Post del Bios).
Buona fortuna e...buone ferie !

Nessun commento: