Come installare un server PXE su un router


In questa pagina descriverò come installare un "server PXE" su un router (Asus RT-AC56U) - useremo alcuni pacchetti di Entware, pertanto fate riferimento a questa pagina su come installare Entware su un router.
Installeremo i pacchetti "server DHCP", "server Xinetd" e "server TFTP" usando i pacchetti Entware.
Nota : se il vostro router possiede già un "server DHCP", dovrete configurare il "server DHCP" esistente, pertanto leggete la sezione "Come configurare un server DHCP esistente" e saltate la sezione "Come installare il server DHCP".


Come configurare un server DHCP esistente

Se il vostro router possiede già un "server DHCP", non potete installare un altro "server DHCP", pertanto dovrete usare la attuale configurazione del vostro "server DHCP". In questo caso dovrete aggiornare la configurazione del "DNSmasq", il file di configuration è denominato "dnsmasq.conf", e di solito si trova nella cartella "/etc". Alcune volte il vostro router potrebbe fornire un modo per aggiornare la configurazione del file "dnsmasq.conf", in entrambi i casi dovrete aggiungere le seguenti linee al file "dnsmasq.conf" :

dhcp-boot=pxelinux.0
pxe-service=x86PC, "Install Linux", pxelinux
enable-tftp
tftp-root=/opt/tftpboot

Fare riferimento a questa pagina per avere un file "dnsmasq.conf" di esempio e fare riferimento a questa pagina per ulteriori dettagli sul file di configurazione "dnsmasq.conf".
Brevemente, nel suddetto esempio, noi:

  • impostiamo il nome del file di avvio del "servizio PXE" (in questo caso questo file è "pxelinux.0" - è posto nella cartella radice del "server TFTP");
  • diciamo al server DNSmasq di caricare il file "pxelinux.0" dal "server TFTP";
  • diciamo al server DNSmasq di attivare il "server TFTP";
  • impostiamo la cartella radice per i file disponibili attraverso il "server TFTP".

In questa pagina useremo la cartella "/opt/tftpboot" come radice del server TFTP, pertanto nel suddetto esempio la usiamo per dire al server "DNSmasq" dove è la cartella radice del server TFTP. Inoltre nella suddetta cartella radice del server TFTP noi avremo il file "pxelinux.0" usato per avviare il servizio PXE.

Saltate la prossima sezione "Come installare il server DHCP" e andate alla sezione "Come installare i server Xinetd e TFTP".


Come installare il server DHCP

Il server DHCP server deve essere installato solo se il vostro router ne è privo, questo per evitare qualunque tipo di conflitto.
Allo scopo di installare il "server DHCP" con i pacchetti Entware, dobbiamo eseguire il seguente comando:
opkg install isc-dhcp-server-ipv6
Dopo aver fatto questo, creiamo una copia di riserva del file "/opt/etc/dhcpd.conf", e creiamo un nuovo file "/opt/etc/dhcpd.conf" :

# dhcpd.conf

allow booting;
allow bootp;

#Definition of the first subnet
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.25 192.168.1.50;

#Lease time in seconds - 24 hours
default-lease-time 86400;
max-lease-time 86400;

option domain-name-servers 192.168.1.1;
option broadcast-address 192.168.1.255;
option subnet-mask 255.255.255.0;

#Gateway
option routers 192.168.1.1;
}

log-facility local7;

# tftp-Server Settings for PXE
next-server 192.168.1.4;
filename "pxelinux.0";

host myhostname { hardware ethernet 11:22:33:44:55:66; fixed-address 192.168.1.150; }

Fare riferimento a questa pagina per ulteriori dettagli sul file di configurazione "dhcpd.conf".
Nel suddetto esempio, l'indirizzo IP "192.168.1.1" è l'indirizzo del router principale, mentre l'indirizzo IP "192.168.1.4" è il secondo router dove noi installiamo il "server DHCP", il "server Xinetd" e il "server TFTP".
Inoltre dobbiamo creare anche un nuovo file "/opt/etc/init.d/S56dhcp" che useremo per avviare/fermare il daemon DHCP :

#!/bin/sh

ENABLED=yes
PROCS=dhcpd
ARGS="-lf /tmp/dhcpd.leases"
PREARGS=""
PRECMD="touch /tmp/dhcpd.leases"
POSTCMD=""
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

. /opt/etc/init.d/rc.func

Nel suddetto file, il parametro "PRECMD" viene usato per eseguire il comando "touch /tmp/dhcpd.leases" prima di avviare il daemon DHCP. In questo modo siamo sicuri che il file "/tmp/dhcpd.leases" venga sempre creato prima di avviare il daemon DHCP.
Eseguiamo lo script "/opt/etc/init.d/S56dhcp start" allo scopo di avviare il daemon DHCP. Questo script deve essere eseguito ogni volta che il router viene riavviato.


Come installare i server Xinetd e TFTP

Allo scopo di installare i server "Xinetd" e "TFTP" con i pacchetti Entware, dobbiamo eseguire il seguente comando :
opkg install tftpd-hpa xinetd
Dopo aver questo, creiamo una copia di riserva del file "/opt/etc/xinetd.conf", e modifichiamo il file esistente "/opt/etc/xinetd.conf" allo scopo di avere :

defaults
{
    only_from = localhost 10.0.0.0/8 172.16.0.0/12 192.168.1.0/16
    instances = 60
    log_type = SYSLOG authpriv info
    log_on_success = HOST PID
    log_on_failure = HOST
    cps = 25 30
}

includedir /opt/etc/xinetd.d

Fare riferimento a questa pagina per ulteriori dettagli sul file di configurazione "xinetd.conf".
Dobbiamo anche creare un nuovo file "/opt/etc/xinetd.d/tftp" che verrà usato da Xinetd per avviare il daemon TFTP (non abbiamo bisogno di avviare manualmente il daemon TFTP) :

service tftp
{
    flags = IPv4
    socket_type = dgram
    protocol = udp
    instances = 30
    wait = yes
    user = admin
    server = /opt/sbin/tftpd-hpa
    server_args = -s /opt/tftpboot
    cps = 100 2
    log_on_success = HOST PID
    log_on_failure = HOST
    disable = no
    per_source = 11
}

Fare riferimento a questa pagina per ulteriori dettagli sui servizi aggiuntivi del "server xinetd".
Eseguiamo lo script "/opt/etc/init.d/S10xinetd start" allo scopo di avviare il daemon Xinetd. Questo script deve essere eseguito ogni volta che il router viene riavviato.


Come impostare la cartella radice del server TFTP

Prima di avviare la verifica del "servizio PXE", abbiamo bisogno di impostare la cartella radice del "server TFTP".
Innanzitutto creiamo la cartella radice usando il seguente comando :
mkdir /opt/tftpboot
Poiché non è semplice impostare la cartella radice del "server TFTP", scarichiamo un file compresso dal sito web di "Debian Linux" ed estraiamo tutti i suoi file nella cartella radice "/opt/tftpboot".
Nella suddetta cartella radice abbiamo 3 voci importanti, "ldlinux.c32", "pxelinux.0" e "pxelinux.cfg". Le prime due rappresentano file obbligatori per il servizio PXE e non possono essere modificati o eliminati, l'ultima voce rappresenta una cartella contenete un file chiamato "default" che può essere modificato. Il contenuto del file di esempio "pxelinux.cfg/default" è :

# D-I config version 2.0
# search path for the c32 support libraries (libcom32, libutil etc.)
path debian-installer/amd64/boot-screens/
include debian-installer/amd64/boot-screens/menu.cfg
default debian-installer/amd64/boot-screens/vesamenu.c32
prompt 0
timeout 0

Il primo parametro "path" viene usato come cartella di base per il "servizio PXE", il parametro "include" viene usato per includere un file di configurazione che deve usato per creare il menù principale del "servizio PXE", mentre il parametro "default" viene usato per visualizzare il menù grafico del "servizio PXE". Ciò che segue è un esempio di contenuto del file "menu.cfg" :

menu hshift 7
menu width 61

menu title Debian GNU/Linux installer boot menu
include debian-installer/amd64/boot-screens/stdmenu.cfg
include debian-installer/amd64/boot-screens/txt.cfg
include debian-installer/amd64/boot-screens/amdtxt.cfg
include debian-installer/amd64/boot-screens/gtk.cfg
include debian-installer/amd64/boot-screens/amdgtk.cfg
menu begin advanced
    menu label ^Advanced options
        menu title Advanced options
        include debian-installer/amd64/boot-screens/stdmenu.cfg
        label mainmenu
             menu label ^Back..
             menu exit
        include debian-installer/amd64/boot-screens/adtxt.cfg
        include debian-installer/amd64/boot-screens/amdadtxt.cfg
        include debian-installer/amd64/boot-screens/adgtk.cfg
        include debian-installer/amd64/boot-screens/amdadgtk.cfg
menu end
label help
        menu label ^Help
        text help
            Display help screens; type 'menu' at boot prompt to return to this menu
        endtext
        config debian-installer/amd64/boot-screens/prompt.cfg
include debian-installer/amd64/boot-screens/spk.cfg
include debian-installer/amd64/boot-screens/amdspk.cfg
include debian-installer/amd64/boot-screens/spkgtk.cfg
include debian-installer/amd64/boot-screens/amdspgtk.cfg

Fare riferimento a questa pagina per ulteriori dettagli sui file di configurazione usati per creare menù e sottomenù per il "server PXE".


Esempi di menù di avvio per il server PXE

Un esempio di (sotto)menù è il seguente, questo viene usato per eseguire una distribuzione Live-USB di "GParted" :

menu background bootmenu/splash_gparted.png

label GParted Live32
MENU LABEL GParted Live 32-bit
kernel bootmenu/gparted32/vmlinuz
append initrd=bootmenu/gparted32/initrd.img boot=live config components union=overlay username=user nosplash noprompt noswap noeject 
ip= vga=788 ethdevice-timeout=600 fetch=tftp://192.168.1.4/bootmenu/gparted32/filesystem.squashfs

label GParted Live64
MENU LABEL GParted Live 64-bit
kernel bootmenu/gparted64/vmlinuz
append initrd=bootmenu/gparted64/initrd.img boot=live config components union=overlay username=user nosplash noprompt noswap noeject 
ip= vga=788 ethdevice-timeout=600 fetch=tftp://192.168.1.4/bootmenu/gparted64/filesystem.squashfs

Nel suddetto esempio, il file "filesystem.squashfs" viene caricato dal "server TFTP". Ricordarsi di includere l'indirizzo IP corretto del "server TFTP", in questo è "192.168.1.4". Da notare che questi menù sono simili a quelli usati dalle distribuzioni Live-USB (che includono il boot-loader "SysLinux"), persino i file di avvio "vmlinuz" e "initrd.img" sono gli stessi.
Un altro esempio di (sotto)menù è capace di avviare un'immagine ".ISO", ad esempio un Live-CD. Questa è una particolare opzione da verificare caso-per-caso, non tutte le immagini .ISO possono essere eseguite dal "servizio PXE". Solitamente soltanto le immagini .ISO di piccole dimensioni possono essere eseguite.
Un esempio di immagini .ISO sono le installazioni di rete delle distribuzioni Linux, esse non includono tutti i pacchetti di Linux poiché sono scaricati da Internet.
Un esempio di menù di avvio per eseguire un'immagine .ISO è il seguente :

menu background bootmenu/splash_opensuse.png

LABEL Opensuse install 32 bit
    text help
       Install OpenSuse 13.2 (32 bit) via Network Installer
    endtext
    MENU LABEL Opensuse 13.2 (NET Install 32 bit)
    LINUX bootmenu/memdisk
    INITRD bootmenu/linux/opensuse/openSUSE-13.2-NET-i586.iso
    APPEND iso vga=normal vmalloc=512M

LABEL Opensuse install 64 bit
    text help
       Install OpenSuse 13.2 (64 bit) via Network Installer
    endtext
    MENU LABEL Opensuse 13.2 (NET Install 64 bit)
    LINUX bootmenu/memdisk
    INITRD bootmenu/linux/opensuse/openSUSE-13.2-NET-x86_64.iso
    APPEND iso vga=normal vmalloc=512M

Nel suddetto esempio, il "server PXE" usa il "servizio memdisk" per eseguire l'installazione di rete della distribuzione "openSUSE Linux".
Per riassumere, se vogliamo eseguire un Live-CD o un Live-USB tramite il "server PXE", abbiamo due possibilità :

  1. la prima è di usare i file del Live-USB allo scopo di avere i file del kernel e un file squashfs (quest'ultimo sarà scaricato tramite il "server TFTP");
  2. la seconda è quella di usare il file .ISO del Live-CD tramite il "servizio memdisk".

Come verificare il server PXE

Per verificare il "server PXE" bisogna avere un computer che può avviarsi dalla rete o eventualmente usare una macchina virtuale installata sul computer. La macchina virtuale deve essere configurata per avviarsi dalla rete, rimuovendo tutte le altre opzioni di avvio.
Durante l'avvio da un "server PXE", l'interfaccia di rete proverà a cercare un "server DHCP" e se trovato chiederà di eseguire il codice principale del "server PXE". E' importante avere una veloce connessione di rete durante tutte le fasi del procedimento di avvio da un "server PXE", tutto il lavoro viene eseguito tramite la rete.
Ricordo che il procedimento di avvio del "service PXE" è simile al procedimento di avvio del "servizio SysLinux", quest'ultimo viene usato per creare unità disco multi-avvio gestite da menù. Pertanto il "servizio PXE" userà direttamente i soliti file di avvio "vmlinuz" e "initrd.img", mentre tramite il "server TFTP", esso caricherà il file "squashfs". Quest'ultima fase risulterà lenta se la velocità della rete non è adeguata.