Ce billet est la suite du billet Mise en place d'un serveur IPXE - partie 1 qui explique le principe du serveur IPXE et l'organisation du système que nous avons mis en place. Je vais maintenant rentrer dans la partie pratique : l'installation et la configuration du serveur.
Attention ! Le serveur IPXE n'a jamais été finalisé. Je laisse ce billet publié. Ca pourra toujours servir à quelqu'un.
Installation des paquets nécessaires :
apt-get install dnsmasq lighttpd samba nfs-kernel-server
Nous utilisons lighttpd comme serveur HTTP car il est léger et simple à mettre en place.
Réglage de l'adresse IP du serveur
Le serveur utilise une adresse IP fixe pour pouvoir être adressé par les machines sur le réseau. Ce réglage peut soit être effectué sur l'interface du routeur, soit directement sur le serveur. Dans ce dernier, bien choisir une adresse IP en dehors de la plage DHCP pour éviter une double attribution.
Pour le réglage sur le serveur, éditer le fichier /etc/networks/interfaces et ajouter les lignes suivantes :
auto eth0
iface eth0 inet static
address 192.168.0.200
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 9.9.9.9
Le nom de l'interface réseau (ici eth0) est à adapter en fonction de votre machine. De même qu'il vous faudra peut-être adapter l'adresse IP ou celle du routeur (qui est parfois en 192.168.0.254).
Création de l'arborescence :
L'arborescence globale est présentée dans le premier billet. Je ne détaille ici que les commandes pour la créer.
- Création des répertoires principaux.
mkdir -p /srv/tftp
mkdir -p /srv/samba
mkdir -p /srv/http
- Création des répertoires accueillant les distributions GNU/Linux et wimboot.
mkdir -p /srv/http/archlinux
mkdir -p /srv/http/debian/9/{32-bit,64-bit}
mkdir -p /srv/http/debian/8/{32-bit,64-bit}
mkdir -p /srv/http/emmabuntus/3/{32-bit,64-bit}
mkdir -p /srv/http/emmabuntus/de2/{32-bit,64-bit}
mkdir -p /srv/http/linux_mint/cinammon/{32-bit,64-bit}
mkdir -p /srv/http/linux_mint/MATE/{32-bit,64-bit}
mkdir -p /srv/http/linux_mint/LXDE/{32-bit,64-bit}
mkdir -p /srv/http/linux_mint/KDE/{32-bit,64-bit}
mkdir -p /srv/http/mageia/{32-bit,64-bit}
mkdir -p /srv/http/ubuntu/UNITY/{32-bit,64-bit}
mkdir -p /srv/http/ubuntu/GNOME/{32-bit,64-bit}
mkdir -p /srv/http/ubuntu/KDE/{32-bit,64-bit}
mkdir -p /srv/http/ubuntu/LXDE/{32-bit,64-bit}
mkdir -p /srv/http/ubuntu/XFCE/{32-bit,64-bit}
mkdir -p /srv/http/ubuntu/MATE/{32-bit,64-bit}
mkdir -p /srv/http/windows
Préparation des fichiers d'amorce :
1ère possibilité
Nous utilisons les fichiers d'amorce IPXE disponibles dans le paquet ipxe lorsqu'ils sont disponibles.
ln -s /usr/lib/ipxe/undionly.kpxe /srv/tftp/
ln -s /usr/lib/ipxe/ipxe.efi /srv/tftp/ipxe_64-bit.efi
Les fichiers d'amorce manquants doivent être compiler depuis les sources. Pour cela, il faut récupérer les sources, en clonant le dépôt git par exemple :
git clone https://github.com/ipxe/ipxe
Puis il faut se rendre dans l'arborescence et lancer la compilation :
cd ipxe/src
make bin-i386-efi/ipxe.efi
On peut ensuite récupérer le fichier généré :
cp bin/ipxe.efi /srv/tftp/ipxe_32-bit.efi
Sur la page de document de ipxe suivante, vous trouverez la liste des plateformes et des drivers qu'il est possible de générer : http://ipxe.org/appnote/buildtargets.
2eme possibilité
Nous n'utilisons pas les fichiers d'amorce PXE fournis dans le package ipxe car il nous faut recompiler chaque fichier pour y intégrer un script IPXE. Ce dernier comporte simplement l'url de notre script IPXE principal.
Pour la compilation, il faut récupérer les sources, en clonant le dépôt git par exemple :
git clone https://github.com/ipxe/ipxe
Puis il faut se rendre dans l'arborescence et créer notre script IPXE qui sera intégré dans le fichier d'amorce :
cd ipxe/src
nano embed.ipxe
Contenu du fichier intégré :
#!ipxe
dhcp
chain http://192.168.0.200/master.ipxe
On peut ensuite lancer la compilation intégrant notre script...
make bin/undionly.kpxe EMBED=embed.ipxe
... et récupérer le fichier généré :
cp bin/ipxe.efi /srv/tftp/ipxe_32-bit.efi
Sur la page de document de ipxe suivante, vous trouverez la liste des plateformes et des drivers qu'il est possible de générer : http://ipxe.org/appnote/buildtargets. Par exemple, pour un fichier UEFI 64-bit, on lancera :
make bin-x86_64-efi/ipxe.efi EMBED=embed.ipxe
Configuration de dnsmasq :
La configuration se fait en modifiant le fichier /etc/dnsmasq.conf (par exemple avec nano)
nano /etc/dnsmasq.conf
Voici la configuration dnsmasq utilisée :
#===============================================================
# Configuration file for dnsmasq
#===============================================================
# Disable DNS Server (DNS already provide by the router)
port=0
# Enable DHCP logging
log-dhcp
# Respond to PXE requests for the specified network;
# run as DHCP proxy
dhcp-range=192.168.0.0,proxy,255.255.255.0
#If not running as a DHCP proxy (first IP, last IP, mask, bail duration)
#dhcp-range=192.168.0.100,192.168.0.150,255.255.255.0,12h
#Detect the client architecture
dhcp-match=set:x86PC, option:client-arch, 0 #BIOS
dhcp-match=set:UEFI32, option:client-arch, 6 #UEFI32
dhcp-match=set:UEFI64, option:client-arch, 7 #UEFI64
dhcp-match=set:UEFI64, option:client-arch, 9 #EBC ->use the same bootloader as UEFI64
#Detect IPXE request
dhcp-match=set:IPXE,175 # iPXE sends a 175 option
# Load different PXE boot image depending on client architecture (when not running as a proxy DHCP)
dhcp-boot=tag:x86PC, undionly.kpxe
dhcp-boot=tag:UEFI32, ipxe_32-bit.efi
dhcp-boot=tag:UEFI64, ipxe_64-bit.efi
#Serve the IPXE config file over HTTP
dhcp-boot=tag:IPXE, http://192.168.0.200/master.ipxe
# Load different PXE boot image depending on client architecture (when running as a proxy DHCP)
pxe-service=tag:x86PC, X86PC, "BIOS Network Boot", undionly.kpxe
pxe-service=tag:UEFI32, BC_EFI, "UEFI32 Network Boot", ipxe_32-bit.efi
pxe-service=tag:UEFI64, X86-64_EFI, "UEFI64 Network Boot", ipxe_64-bit.efi
#Serve the IPXE config file over HTTP
pxe-service=tag:IPXE, X86PC, http://192.168.0.200/master.ipxe
## Activate TFTP and set the root directory
enable-tftp
tftp-root=/srv/tftp
Désactivation du DNS de dnsmasq :
Cette modification permet d'empêcher dnsmasq de se définir comme serveur DNS pour les machines démarrées via PXE. Cela permet d'utiliser le routeur comme serveur DNS, comme d'habitude.
nano /etc/default/dnsmasq
DNSMASQ_EXCEPT=lo
Redémarrage du service dnsmasq :
On termine en redémarrant le service dnsmasq pour prendre en compte les modifications.
systemctl restart dnsmasq
Configuration du serveur NFS :
nano /etc/exports
Il faut ajouter la ligne suivante pour activer le partage sur le répertoire /srv/http/.
/srv/http 192.168.0.0/24(ro,async,no_root_squash,no_subtree_check)
Nous limitons l'accès au réseau local (192.168.0.0/24) et empêchons les modifications (paramètre ro pour read-only).
Application des modifications :
exportfs -rav
Configuration du serveur Samba :
nano /etc/samba/smbd.conf
Il faut ajouter un partage de fichier sur le répertoire que nous avons créé précédemment. Ce partage est configuré en lecture seul pour éviter toutes les modifications par la machine client et permet de se connecter sans se soucier du nom d'utilisateur et du mot de passe.
La configuration déjà présente dans le fichier smbd.conf n'est pas modifiée. Seule la partie suivante a été ajoutée :
\[pxe\]
path = /srv/samba
browsable = yes
guest only = yes
read only = yes
public = yes
On applique les modifications en redémarrant le serveur Samba :
systemctl restart smbd
Création du fichier de configuration ipxe :
Nous avons configuré notre serveur pour qu'un client récupère automatiquement le fichier principal ipxe, nommé master.ipxe via le protocole HTTP. Il ne nous reste donc plus qu'à créer ce dernier et le placer dans le dossier /srv/http/.