Come creare un server PXE per tutte le esigenze (Ubuntu 14.04.5)
Questo non è un lavoro originale: molte idee sono prese da post letti qua e là googleando. Cercherò di citare tutte le fonti, ma se dimenticassi qualcuno e lo notaste non esitate a segnalarlo. In particolare mi preme ricordare questo articolo: http://ubuntuforums.org/showthread.php?t=1606910. Anche se alla fine ho preso ben poco da esso, è stato fondamentale per avere una visione di insieme di cosa serviva a fare cosa.
Installazione di Ubuntu Server
pxe
. Per velocità, tutti i comandi sono eseguiti dopo essere diventati superuser (in una Debian “pura” basterebbe fare il login come root) con il comando pxe@pxe:~$ sudo -i
. Terminata l’installazione mi sono assicurato che il nostro server abbia un IP fisso nella sottorete, nel mio caso 192.168.0.246
. Per farlo ho editato il file /etc/network/interfaces
in questo modo:`# /etc/network/inferfaces
This file describes the network interfaces available on your system
and how to activate them. For more information, see interfaces(5).
The loopback network
interface auto lo
iface lo inet loopback
The primary network
interface auto eth0
iface eth0 inet static
address 192.168.0.246
netmask 255.255.255.0
gateway 192.168.0.254
dns-nameservers 8.8.8.8`
Disattiviamo e riattiviamo l’interfaccia di rete per rendere operative le modifiche (se siamo collegati in SSH è consigliabile un reboot
per evitare di rimanere tagliati fuori!):
ifdown eth0<br /> ifup eth0
e aggiorniamo tutto:
apt-get clean<br /> apt-get update<br /> apt-get upgrade
Infine riavviamo e passiamo oltre:
reboot
Installazione di webmin per l’amministrazione remota (facoltativo)
root@pxe:~# wget http://prdownloads.sourceforge.net/webadmin/webmin_1.850_all.deb<br /> root@pxe:~# dpkg -i webmin_1.850_all.deb<br /> root@pxe:~# apt-get -f install<br />
root@pxe:~# rm webmin_1.850_all.deb
https://192.168.0.246:10000
.Creazione struttura delle cartelle
Liberamente tratto da: http://blogging.dragon.org.uk/howto-setup-a-pxe-with-dnsmasq/
/pxe
:root@pxe:~# mkdir /pxe
/iso
:root@pxe:~# mkdir /pxe/iso
PXE Boot: configurare syslinux e dnsmasq
Originale: http://danielboca.blogspot.it/2012/02/boot-linux-from-network-using-pxe-and.html?m=1
Adattamento a Ubuntu di UncleDan: /2014-07-25-howto-boot-linux-from-network-using-pxe-and-dnsmasq-proxy-ubuntu-14-04.html
root@pxe:~# apt-get install syslinux<br /> root@pxe:~# cp /usr/lib/syslinux/pxelinux.0 /pxe<br /> root@pxe:~# cp /usr/lib/syslinux/menu.c32 /pxe<br /> root@pxe:~# mkdir /pxe/pxelinux.cfg
<strong>/pxe/pxelinux.cfg/default</strong><br /> DEFAULT menu.c32<br /> TIMEOUT 600<br /> ONTIMEOUT BootLocal<br /> MENU TITLE PXE MULTIBOOT SERVER<br /> NOESCAPE 1<br /> ALLOWOPTIONS 1<br /> PROMPT 0<br /> LABEL BootToLocalHardDisk<br /> localboot 0<br /> TEXT HELP<br /> Boot to local hard disk<br /> ENDTEXT<br /> MENU END
dnsmasq
:root@pxe:~# apt-get install dnsmasq
/etc/dnsmasq.d/pxe.conf
(l’IP 192.168.0.246 è quello che abbiamo assegnato al nostro server):<strong>/etc/dnsmasq.d/pxe.conf</strong><br /> tftp-root=/pxe<br /> enable-tftp<br /> dhcp-boot=pxelinux.0<br /> dhcp-option=vendor:PXEClient,6,2b<br /> dhcp-no-override<br /> pxe-prompt="Press F8 for boot menu", 3<br /> pxe-service=X86PC, "Boot from network", pxelinux<br /> pxe-service=X86PC, "Boot from local hard disk", 0<br /> dhcp-range=192.168.0.246,proxy
/etc/dnsmasq.conf
sia attiva la linea (altrimenti inserirla in coda al file):<strong>/etc/dnsmasq.conf</strong><br /> […]<br /> conf-dir=/etc/dnsmasq.d<br /> […]
dnsmasq
:root@pxe:~# sudo service dnsmasq restart
Servizio HTTP: configurare lighttpd
Liberamente tratto da: http://blogging.dragon.org.uk/howto-setup-a-pxe-with-dnsmasq/
lighttpd
come server web; è un po’ più moderno e performante del tradizionale apache2 che quasi tutti i tutoriali usano. Ma purché ci passi i file in http qualsiasi server andrà bene! Ricordiamoci solo che nel resto della guida supporrò che i file da passare al boot dovranno essere accessibili all’indirizzo:http://192.168.0.246/
Installiamo il server:
root@pxe:~# apt-get install lighttpd
<strong>/etc/lighttpd/lighttpd.conf</strong><br /> […]<br /> <em><strong>dir-listing.activate = "enable"</strong></em>
root@pxe:~# service lighttpd restart
/pxe
che mi consentirà di “vedere” i file anche all’indirizzo http://192.168.0.246/pxe/
:root@pxe:~# rm /var/www/index.lighttpd.html<br /> root@pxe:~# ln -s /pxe /var/www/pxe
</p>root@pxe:~# mkdir /var/www/webmin
<strong>/var/www/webmin/index.html</strong><br /> <html xmlns="http://www.w3.org/1999/xhtml"><br /> <head><br /> <title>Login to Webmin</title><br /> <meta http-equiv="refresh" content="0;URL='https://192.168.0.246:10000'" /><br /> </head><br /> <body><br /> <p>You can find the Login to Webmin<br><br /> at <a href="https://192.168.0.246:10000">https://192.168.0.246:10000</a>.</p><br /> </body><br /> </html>
Servizio NFS: configurare nfs-kernel-server
Fonte: http://ubuntuforums.org/showthread.php?t=1606910
apt-get install nfs-kernel-server
<strong>/etc/exports</strong><br /> /pxe 192.168.0.0/24(ro,async,no_root_squash,no_subtree_check)
exportfs -a
FreeDOS
Fonti: http://possiblelossofprecision.net/?p=491 e https://help.ubuntu.com/community/PXEInstallMultiDistro#DOS
root@pxe:/pxe# mkdir -p /pxe/dos/freedos-1.0<br /> root@pxe:/pxe# cd /pxe/dos/freedos-1.0<br /> root@pxe:/pxe/dos/freedos-1.0# wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/fdboot.img
/pxe/pxelinux.cfg/default
:
<strong>/pxe/pxelinux.cfg/default</strong><br /> LABEL FreeDOS 1.0 Floppy Disk<br /> KERNEL memdisk<br /> APPEND initrd=dos/freedos-1.0/fdboot.img<br /> TEXT HELP<br /> Boot FreeDOS 1.0<br /> ENDTEXT<br />
Predisposizione dei sorgenti per installazioni Linux e altre utility
In questo aggiornamento 2017 utilizzerò un approccio più lineare. Nelle versioni precedenti avevo utilizzato il mount loop per avere le immagini ISO disponibili sia per un eventuale download che per il boot (idea ispirata da http://posix.in-egypt.net/content/how-mount-iso-fstab). Questo metodo, pur avendo l’indiscutibile vantaggio di non duplicare l’occupazione di spazio su disco, comportava una serie di inconvenienti: innanzitutto occorreva mettere le mani di frequente nel file /etc/fstab (col rischio per mani inesperte di creare grossi problemi al sistema); inoltre il numero di filesystem di tipo loop che si possono montare è piuttosto limitato e quindi il metodo non era replicabile a piacimento.
In questa nuova revisione dell’articolo scaricherò le immagini ISO nella cartella /pxe/iso
e le estrarrò nella cartella /pxe
suddividendole in sottocartelle per tipologia e lasciando poi la possibilità a chi lo desidera di cancellare le immagini originali).
Inoltre userò 7zip per l’estrazione delle immagini iso, quindi prima di procedere oltre, installiamolo:
root@pxe:~# apt-get install p7zip-full p7zip-rar
Ubuntu (Net Install)
/pxe/iso
e le estrarrò nella cartella /pxe
: root@pxe:~# mkdir -p /pxe/iso/linux<br /> root@pxe:~# cd /pxe/iso/linux<br /> root@pxe:/pxe/iso/linux# wget http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-i386/current/images/netboot/mini.iso<br /> root@pxe:/pxe/iso/linux# mv mini.iso ubuntu-14.04-mini-i386.iso<br /> root@pxe:/pxe/iso/linux# mkdir -p /pxe/linux/ubuntu-14.04-mini-i386<br /> root@pxe:/pxe/iso/linux# 7z x -ssc ubuntu-14.04-mini-i386.iso -o/pxe/linux/ubuntu-14.04-mini-i386/<br /> root@pxe:/pxe/iso/linux# chmod -R 555 /pxe/linux/ubuntu-14.04-mini-i386/<br /> root@pxe:/pxe/iso/linux# wget http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/current/images/netboot/mini.iso<br /> root@pxe:/pxe/iso/linux# mv mini.iso ubuntu-14.04-mini-amd64.iso<br /> root@pxe:/pxe/iso/linux# mkdir -p /pxe/linux/ubuntu-14.04-mini-amd64<br /> root@pxe:/pxe/iso/linux# 7z x -ssc ubuntu-14.04-mini-amd64.iso -o/pxe/linux/ubuntu-14.04-mini-amd64/<br /> root@pxe:/pxe/iso/linux# chmod -R 555 /pxe/linux/ubuntu-14.04-mini-amd64/
Fonte PXE Ubuntu 14.04: http://www.unixmen.com/install-configure-pxe-server-ubuntu-14-04-lts/
<strong>/pxe/pxelinux.cfg/default</strong><br /> LABEL Ubuntu 14.04 LTS Netinstall (64-bit)<br /> KERNEL linux/ubuntu-14.04-mini-amd64/linux<br /> APPEND initrd=linux/ubuntu-14.04-mini-amd64/initrd.gz<br /> TEXT HELP<br /> Boot Ubuntu 14.04 LTS Netinstall (64-bit)<br /> ENDTEXTLABEL Ubuntu 14.04 LTS Netinstall (32-bit)<br /> KERNEL linux/ubuntu-14.04-mini-i386/linux<br /> APPEND initrd=linux/ubuntu-14.04-mini-i386/initrd.gz<br /> TEXT HELP<br /> Boot Ubuntu 14.04 LTS Netinstall (32-bit)<br /> ENDTEXT
</div>