TABLE DES MATIERES
Assez de jongler avec des clés USB pour tester des distros, ou envie d'automatiser l'installation de systèmes Linux? On va voir comment configurer un serveur netboot, avec dnsmasq, pour booter des systèmes Linux en live. Il faudra activer la fonction dans le BIOS, afin que l'ordinateur client puisse démarrer par l'interface réseau en mode PXE. L'environnement se trouve dans le cadre d’une connexion domestique, où il n’y a qu’un seul routeur/box; je ne me servirai pas d’une 2ème carte réseau, tout passera en filaire (eth0). J’ai installé un serveur Ubuntu afin de repartir de zéro pour la rédaction de ce tuto. La procédure est aussi fonctionnelle sur une Debian.
Environnement :
Serveur Ubuntu sur un laptop, derrière routeur freebox.
Eth0=192.168.0.13 fixée dans le routeur FAI, ça évite d’avoir à tout reconfigurer.
Hostname=infotrux-pxe
Clients et serveur reliés par un switch gigabit<– free-box V5 en carton…
Les protocoles :
- DnsMasq est un serveur léger de cache DNS qui intègre un serveur DHCP et permet aussi de créer un serveur TFTP (qu’on activera dans le fichier dnsmasq.conf avec l’option enable-tftp)
- nfs-kernel-server un système de partage de fichier en réseau qui sera en lecture seule.
Les fichiers de configuration :
- /etc/dnsmasq.conf
- /etc/exports
- /srv/tftp/ubuntu-installer/i386/boot-screens/syslinux.cfg
Plus le script pour monter automatiquement les iso au démarrage du serveur (voir à la fin de l’article)
Commandes usuelles :
- /etc/init.d/dnsmasq restart
- service nfs-kernel-server restart
Installation des paquets nécessaires :
apt-get install dnsmasq nfs-kernel-server
Configuration :
Adapter la conf dnsmasq selon votre réseau :
nano /etc/dnsmasq.conf
interface=eth0 dhcp-range=192.168.0.0,proxy dhcp-boot=pxelinux.0 pxe-service=x86PC, “Boot from Network”, pxelinux enable-tftp tftp-root=/srv/tftp dhcp-boot=pxelinux.0,infotrux-pxe,192.168.0.13 #Hostname + Ip serveur
On crée le dossier racine tftp et dossier qui servira à stocker les iso.
mkdir /srv/tftp && mkdir /srv/iso
On va télécharger l’archive contenant le menu de boot, peu importe la versions, precise, trusty, utopic… Ça ne servira qu’ à gérer les entrées du menu. On pourra customiser le splash screen.
NOTE : après test avec ubuntu-installer utopic, je me suis rabattu sur l’archive de la Precise, suite à un bug sur lequel je ne me suis pas attardé...
Du coup on télécharge le menu de la Precise : Une sauvegarde au cas où …
cd /srv/tftp && wget archive.ubuntu.com/ubuntu/dists/precise/main/installer-i386/current/images/netboot/netboot.tar.gz
On décompresse dans /srv/tftp
tar -xvf netboot.tar.gz
rm netboot.tar.gz
On télécharge la 1ere image disque dans /srv/iso , j’ai choisi pour l’exemple lxle-12045.iso. Puis on crée le dossier pour recevoir le partage nfs.
cd /srv/iso && wget http://lien_vers_l'iso
mkdir /mnt/lxle
On monte l’iso
mount -o loop lxle-12045.iso /mnt/lxle
Il faut maintenant faire la déclaration de l’export nfs (ajouter la ligne correspondante à chaque iso)
nano /etc/exports
/mnt/lxle 192.168.0.16/24(ro,insecure,no_root_squash,async,no_subtree_check)
Note : adapter la plage IP selon l’environnement. Regarder dans le terminal, si erreur, après avoir lancé la commande: service nfs-kernel-server restart
Il faut créer un fichier du nom de chaque iso dans la racine tftp.
mkdir /srv/tftp/lxle
puis copier le dossier "casper" ou "live" (selon l' architecture de la distro) qu’on vient de monter :
cp -av /mnt/lxle/casper /srv/tftp/lxle
on a ainsi récupéré les fichiers d’init et le kernel sur lesquels on va booter.
NOTE : concernant le kernel « vmlinuz » il faudra l’extraire de chaque iso. Dans ubuntu et dérivés, il se trouve dans le dossier casper. Il faudra le renommer (pour ne pas utiliser le kernel d’une autre iso) par exemple vmlinuz1, vmlinuz2 etc… et le placer à la racine du tftp, ici /srv/tftp.
Pour le 1er kernel "vmlinuz" pas besoin de le renommer. On le copie à la racine tftp.
cp /srv/tftp/lxle/casper/vmlinuz /srv/tftp
On va maintenant éditer le fichier syslinux.cfg (le menu de boot et diverses options)
nano /srv/tftp/ubuntu-installer/i386/boot-screens/syslinux.cfg
On ajoute les lignes
LABEL live lxle-12045
kernel vmlinuz
append initrd=lxle/casper/initrd.gz boot=casper netboot=nfs nfsroot=192.168.0.13:/mnt/lxle
Un 2eme exemple pour la forme, avec le kernel renommé pour Xubuntu 12.04 :
LABEL live Xubuntu 12.04 x32 #libre, c’est l’entrée du menu, à vous de l’éditer
kernel vmlinuz1 #qu’on aura pris soin de renommer avant de le placer dans /srv/tftp
append initrd=xubuntu/casper/initrd.gz boot=casper netboot=nfs nfsroot=192.168.0.13:/mnt/xubuntu #faire attention selon les distros initrd.gz peut être un initrd.lz
On relance les services :
/etc/init.d/dnsmasq restart
service nfs-kernel-server restart
On pourra automatiser le mount des iso, qui démontent à chaque reboot avec un script comme suit :
touch /etc/init.d/mountiso.sh
nano /etc/init.d/mountiso.sh
#!/bin/bash
cd /srv/iso
#coller la liste des iso à monter
mount -o loop lxle-12045.iso /mnt/lxle
exit 0
on rend le script exécutable :
chmod +x /etc/init.d/mountiso.sh
update-rc.d mountiso.sh defaults
On pourra aussi customiser le splash.png qui se trouve dans /srv/tftp/ubuntu-installer/i386/boot-screens avec une image de 640×480.
NOTE : Pour réactiver l’interface filaire après l’installation d’un Live CD via cette méthode, consulter cette page de la doc Debian
J'ajoute une conf "pxelinux.cfg" contenant le cas de dérivées Debian, qui présentent une architechture interne différente, avec des options permettant de by-passer la demande de pass au login, c'est notamment le cas pour HandyLinux et WattOS:
# D-I config version 2.0
include ubuntu-installer/i386/boot-screens/menu.cfg
default ubuntu-installer/i386/boot-screens/vesamenu.c32
prompt 0
timeout 0
LABEL live xubuntu 12.04.4-i386
kernel vmlinuz
append initrd=xubuntu-12.04.4-desktop-i386/casper/initrd.lz boot=casper netboot=nfs nfsroot=192.168.0.10:/mnt/xubuntu1204
LABEL live Xubuntu 14.04-i386
kernel vmlinuz1
append initrd=xubuntu-14.04.1-desktop-i386/casper/initrd.lz boot=casper netboot=nfs nfsroot=192.168.0.10:/mnt/xubuntu1404
LABEL live LXLE-i386
kernel vmlinuz2
append initrd=lxle/casper/initrd.gz boot=casper netboot=nfs nfsroot=192.168.0.10:/mnt/lxle
LABEL live ubuntu-mate 14.10-i386
kernel vmlinuz3
append initrd=ubuntu-mate-14.10-desktop-i386/casper/initrd.lz boot=casper netboot=nfs nfsroot=192.168.0.10:/mnt/ubuntumate
LABEL live Elementary OS
kernel vmlinuz4
append initrd=elementaryos/casper/initrd.lz boot=casper netboot=nfs nfsroot=192.168.0.10:/mnt/elementaryos
LABEL live WattOS
kernel vmlinuz5
append initrd=wattos/live/initrd.img boot=live config quiet netboot=nfs nfsroot=192.168.0.10:/mnt/wattos
LABEL live HandyLinux
kernel vmlinuz6
append initrd=handylinux/live/initrd.img boot=live config username=humain hostname=handylinux locales=fr_FR.UTF-8 netboot=nfs nfsroot=192.168.0.10:/mnt/handylinux