[Debian][Ubuntu] Tutoriel netboot pxe avec dnsmasq

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

FMR
Cette entrée a été publiée dans Linux. Sauvegarder le permalien.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *