Serveur IPXE - Partie 2 - Installation
Par Ehko le mercredi, mai 2 2018, 19:12 - Informatique - Lien permanent
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/.