Créer un serveur ltsp sans avoir la main sur le DHCP du réseau

Parfois, il est pratique de pouvoir arriver dans un environnement déjà existant et de déployer un serveur LTSP sans altérer les infrastructures en place.

Dans le cas qui m’occupe, l’idée est de pouvoir arriver dans une école et démarrer des PC depuis un serveur LTSP, sans avoir la main sur le serveur DHCP principal, qui peut éventuellement être géré par une simple box de FAI (ce qui se voit très souvent).

Pour pouvoir faire cela, il faut mettre en place un proxy-dhcp (pour mieux comprendre comment ça se passe, voir les specs du PXE, spécialement la page 18 ftp://download.intel.com/design/archives/wfm/downloads/pxespec.pdf)

Le seul serveur DHCP sous linux que j’aie trouvé et qui permette cela est dnsmasq.

Donc, pour commencer, on installe dnsmasq et le serveur ltsp (ATTENTION, pas le serveur standalone, qui va également installer un serveur dhcp3, qui n’est pas capable de faire du proxy-dhcp)

Cela donne (sur Debian ou dérivé)

sudo apt-get install dnsmasq ltsp-server

Ensuite, on va créer l’image qui sera transmise par le serveur LTSP aux clients:

sudo ltsp-build-client --arch i386 --fat-client

Cette opération va automatiquement créer un répertoire /opt/ltsp/i386, lequel va servir de racine pour un chroot dans lequel le client va être installé.

Cela va prendre un moment, surtout si vous êtes sur une architecture autre que i386, car tous les paquets pour créer le client vont être téléchargés. Et quoi qu’il arrive, un upgrade sera appliqué, histoire de commencer avec l’image la plus à jour possible.

Le script va aussi générer une image pxelinux, qui sera l’amorce de l’OS LTSP. Cette image se trouve dans /var/lib/tftpboot/ltsp/i386/.

Malheureusement, la config par défaut n’offre pas le support pour le dhcp-proxy.
Il faudra donc rajouter dans le fichier de config de ce pxelinux (/var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default) une ligne contenant ceci:

ipappend 3

Apparement dans Ubuntu 14.02, la valeur de ipappend est de 2, il faut alors la modifier à 3.

Enfin, il faut modifier la config de DNSmasq pour lui dire de faire DHCP-proxy et lui indiquer quelle image délivrer:

#
#Settings TFTP
#

enable-tftp
tftp-root=/var/lib/tftpboot

#
# Settings DHPC
#

dhcp-range=192.168.1.0, proxy
# On met l'adresse du RÉSEAU. Possible préciser un véritable range, ou un masque de sous-réseau. Voir man dnsmasq

dhcp-option=vendor:PXEClient,6,2b
#Pour que les clients n'utilise pas la découverte d'hôtes multicast. Pour être honnête, j'ai pas fouillé

dhcp-no-override
#Apparement, permet un support plus large de clients un peu vieux, au ayant mal implementé PXE

#
#Menu PXE.
#
#Décommenter les lignes pour avoir un menu. Personnelement, je préfère qu'il n'y ait pas de menu, pour qu'aucune intervention ne soit nécessaire.

#pxe-prompt= "Appuyer sur F8 pour avoir un menu", 10
pxe-service=x86PC, "Boot depuis le réseau", /ltsp/i386/pxelinux 
# Charge l'image qui se trouve sur /var/lib/tftpboot/ltsp/i386/pxelinux.0, laquelle va rédiger vers d'autres fichiers se trouvant dans son dossier
#pxe-service=x86PC, "Demarage depuis le disque"

Et voilà, c’est fini. Plus qu’à redémarrer le service dnsmasq, et tous les clients qui booteront en PXE sur le réseau chargeront la nouvelle image.

sudo service dnsmasq force-reload
sudo service dnsmasq force-reload

Bon amusement avec votre LTSP!

Sources (i.a.):

http://askubuntu.com/questions/100056/ltsp-overlays-for-fat-clients
https://help.ubuntu.com/community/UbuntuLTSP/ProxyDHCP
howto.basjes.nl/linux/doing-pxe-without-dhcp-control
https://weblogs.java.net/blog/2009/02/07/booting-installer-network-when-you-dont-own-dhcp-server
http://jonathancarter.org/2010/11/24/how-do-ltsp-fat-clients-work/
http://ubuntuforums.org/showthread.php?t=2173749