Ehko

Le blog d'un ingénieur électronicien militant
Home

Aller au menu | Aller à la recherche

Serveur IPXE - Partie 2 - Installation

, 19h12

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.

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/.

Je vous mets mon fichier en annexe de ce billet de blog. Il est évidemment nécessaire de préparer les répertoires qui vont contenir les différents systèmes que nous souhaitons pouvoir démarrer depuis le réseau pour qu'il fonctionne. J'ai regroupé dans un autre billet les manipulations à réaliser pour différents systèmes GNU/Linux et dans un autre, celles pour les systèmes Windows.

Serveur IPXE - Partie 1 - Fonctionnement

, 19h02

Attention ! L'installation du serveur n'étant à ce jour pas finalisée, ce billet est susceptible d'être modifié.

J'avais commencé à installer un serveur PXE pour l'atelier-soudé, comme détaillé dans ces deux billets de blog : 1 et 2. Le système était d'ailleurs plutôt bien abouti mais il était particulièrement lent sur les transferts d'images disques. J'ai donc décidé de changé de système pour installer un serveur IPXE.

L'avantage de IPXE par rapport à PXE est qu'il permet d'utiliser d'autres protocoles que le TFTP pour le transfert des fichiers. Ceci permet donc d'avoir des vitesses de transfert beaucoup plus importantes.

Pour pouvoir fonctionner, IPXE doit soit être intégré directement dans une carte réseau en remplacement du binaire PXE, soit être chainé après PXE. Dans ce dernier cas, l'ordinateur démarre en utilisant le binaire PXE intégré dans sa carte réseau. Il émet une requête DHCP et reçoit un fichier d'amorce compatible IPXE depuis le serveur PXE. Il exécute donc un second démarrage en utilisant ce fichier qui se termine soit en lançant une nouvelle requête DHCP pour recevoir depuis le serveur PXE un script IPXE à exécuter, soit en exécutant un script intégré dans le fichier d'amorce lorsque ce dernier est disponible.

Présentation du système mis en place

Le fonctionnement de notre serveur IPXE reprends une partie des concept du serveur PXE que nous avions installés précédemment. Mais il y a également pas mal de changements.

Voici les éléments/logiciels utilisés :

  • dnsmasq : logiciel intégrant un serveur DNS (non utilisé ici), un serveur DHCP permettant de faire du PXE et un serveur TFTP. Le choix s'est porté sur ce logiciel car il permet de faire du proxy DHCP, qu'il est simple à configurer et qu'il intègre la plupart des outils nécessaires au serveur PXE.

Petite parenthèse : un proxy DHCP permet de fournir les éléments du protocole DHCP nécessaires au démarrage PXE sans être le serveur DHCP principal qui fournit les adresses IP. Cette fonctionnalité là était nécessaire car le routeur fournissant l'accès à internet pour l'atelier-soudé fait également office de serveur DHCP et nous ne voulions pas modifier sa configuration. De plus, le routeur est constamment démarré contrairement au serveur PXE.

  • IPXE : un système d'amorçage réseau reprenant le fonctionnement de PXE en ajoutant des protocoles supplémentaires.
  • Un serveur HTTP : permet de fournir les scripts IPXE, les images disques et les fichiers de démarrage des systèmes d'exploitation. Il peut également remplacer le serveur NFS pour le transfert des autres fichiers.
  • Un serveur NFS : système de partage de fichiers distant entre machine de type Unix. Il fournit les images disques de tous les systèmes d'exploitation (excepté Windows).
  • Un serveur Samba : système de partage de fichiers distant utilisant le protocole propriétaire SMB de Microsoft. Ce serveur fournit les images disques des systèmes d'exploitation Windows.

Le serveur est installé sur le même ordinateur que le précédent serveur PXE : une machine sous Linux Mint. Linux Mint est une distribution dérivée de Ubuntu, elle même dérivée de Debian. L'ensemble des commandes présentées dans ce billet et les suivants devraient donc être compatible avec tous les systèmes dérivés de Debian, Ubuntu compris. Et tout doit également fonctionner sur d'autres distributions GNU/Linux, moyennant quelques modifications simples au niveau des commandes du gestionnaire de paquet.

Notre serveur PXE est également capable de fournir à l'ordinateur le fichier d'amorçage correspondant à son système bas niveau : BIOS ou UEFI.

Structure des répertoires

Voici à quoi ressemble la structure des répertoires du serveur IPXE après installation :

/srv/
    |_ tftp/
    |      |_ ipxe.efi
    |      |_ undionly.kpxe
    |
    |_ http/
    |      |_ archlinux/
    |      |_ linux_mint/
    |      |         |_ cinammon/
    |      |         |           |_ 32-bit/
    |      |         |           |_ 64-bit/
    |      |         |_ MATE/
    |      |         |           |_ 32-bit/
    |      |         |           |_ 64-bit/
    |      |         |_ XFCE/
    |      |         |           |_ 32-bit/
    |      |         |           |_ 64-bit/
    |      |         |_ KDE/
    |      |         |           |_ 32-bit/
    |      |         |           |_ 64-bit/
    |      |_ mageia/
    |      |         |_ 32-bit/
    |      |         |_ 64-bit/
    |      |_ utilitaires/
    |      |_ windows/
    |      |         |_ 32-bit/
    |      |         |_ 64-bit/
    |      |         |_ wimboot
    |      |         |_ 
    |      |         |_ 
    |      |
    |      |_ master.ipxe
    |      |_ boot.png
    |      |_ ...
    |
    |_ samba/
    |      |_ windows/
    |      |      |_ windows_10/
    |      |      |         |_ 32-bit/
    |      |      |         |_ 64-bit/
    |      |      |_ windows_8.1/
    |      |      |         |_ 32-bit/
    |      |      |         |_ 64-bit/
    |      |      |_ windows_7/
    |      |      |_ windows_vista/
    |      |      |         |_ 32-bit/
    |      |      |         |_ 64-bit/
    |      |      |_ windows_XP/

J'ai préféré détailler les instructions pour installer et configurer le serveur IPXE dans un second billet plutôt que d'en faire un seul indigeste. Vous le trouverez ici.

Mise en place d'un serveur PXE - partie 2

, 21h22

Je continue ma suite de billet sur l'installation d'un serveur PXE. Le premier est disponible ici.

Maintenant que les principes généraux ont été expliqués, je vais rentrer dans la partie plus pratique : l'installation et la configuration du serveur.

Installation des paquets nécessaires :

apt-get install syslinux syslinux-efi dnsmasq pxelinux

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 est présentée dans le premier billet si vous voulez avoir une vue d'ensemble ;-)

  • Création des répertoires.

mkdir -p /srv/tftp/boot/
mkdir -p /srv/tftp/bios/pxelinux.cfg/
mkdir -p /srv/tftp/efi32/pxelinux.cfg/
mkdir -p /srv/tftp/efi64/pxelinux.cfg/

  • Création de liens symboliques vers le répertoire /srv/tftp/boot/ dans chacun des sous-répertoire dédiés à une architecture. De cette façon les images disque sont disponibles pour toutes les architectures sans être dupliquées.

cd /srv/tftp/bios && ln -s ../boot boot
cd /srv/tftp/efi32 && ln -s ../boot boot
cd /srv/tftp/efi64 && ln -s ../boot boot

Préparation des répertoires :

Il s'agit maintenant de remplir les répertoires avec les fichiers syslinux correspondant au bon système d'amorçage.

  • Partie BIOS

ln -s /usr/lib/syslinux/modules/bios/* /srv/tftp/bios/
ln -s /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/bios/

  • Partie EFI64

ln -s /usr/lib/syslinux/modules/efi64/* /srv/tftp/efi64/
ln -s /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi /srv/tftp/efi64/

  • Partie EFI32

ln -s /usr/lib/syslinux/modules/efi32/* /srv/tftp/efi32/
ln -s /usr/lib/SYSLINUX.EFI/efi32/syslinux.efi /srv/tftp/efi32/

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

#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

# Load different PXE boot image depending on client architecture (when runing not as a proxy DHCP)
dhcp-boot=tag:x86PC, bios/pxelinux
dhcp-boot=tag:UEFI32, efi32/syslinux.efi
dhcp-boot=tag:UEFI64, efi64/syslinux.efi

# Load different PXE boot image depending on client architecture (when runing as a proxy DHCP)
pxe-service=tag:x86PC, X86PC, "BIOS Network Boot", bios/pxelinux
pxe-service=tag:UEFI32, BC_EFI, "UEFI32 Network Boot", efi32/syslinux.efi
pxe-service=tag:UEFI64, X86-64_EFI, "UEFI64 Network Boot", efi64/syslinux.efi

## 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

Installation du serveur NFS

apt-get install nfs-kernel-server

Configuration du serveur NFS:

nano /etc/exports

Il faut ajouter la ligne suivante pour activer le partage sur le répertoire /srv/tftp/boot/.

/srv/tftp/boot 192.168.0.0/24(ro,async,no_root_squash,no_subtree_check)

Application des modifications :

exportfs -rav

Configuration pxelinux

PXELinux charge automatiquement le fichier nommé "default" et situé dans le répertoire "pxelinux.cfg". Si vous démarrez une machine BIOS, ce sera le fichier /srv/tftp/bios/pxelinux.cfg/default qui sera chargé et pour une machine UEFI64, ce sera le fichier /srv/tftp/efi64/pxelinux.cfg/default.

Sur notre serveur, nous utilisons ce fichier pour présenter à l'utilisateur un menu. Celui-ci liste tous les systèmes que nous avons mis en place.

pxe_menu-principal.png

Notre configuration est découpée en plusieurs fichiers regroupant les systèmes dans des catégories : linux mint, windows, utilitaires et autres systèmes. Nous utilisons également un fichier séparé pour la coloration et la mise en page, ainsi qu'une image de fond. Je vous ai mis en pièce jointe de ce billet de blog l'ensemble des fichiers de configuration que nous utilisons.

Attention ! Du fait que nous ayons abandonnés ce système pour nous tourner vers un serveur IPXE (billet explicatif ici), seuls les démarrages de Linux Mint et de ArchLinux ont été testés. Le chargement des isos de WinPE fonctionne également mais est particulièrement lent, du fait de l'utilisation du TFTP.

Préparation des images linux

Le kernel et le fichier d'initialisation de la RAM sont fournis par TFTP. Le reste des images disques GNU/Linux est envoyé par NFS afin d'augmenter la vitesse de transfert. De ce fait, il est nécessaire de décompresser les images disques et de changer les permissions pour qu'aussi bien le serveur TFTP que le serveur NFS puissent y accéder.

  • Téléchargement de l'image disque par votre méthode favorite
  • Décompression de l'image disque dans le répertoire adéquat. Exemple pour Linux Mint Cinammon 64-bit, avec l'iso dans le répertoire de téléchargement de l'utilisateur "user" :

cd /srv/tftp/boot/linux_mint/cinammon/64-bit/ && 7z x /home/user/Downloads/limuxmint-18.3-cinammon-64bit.iso

  • Changement des permissions

chmod -R 775 /srv/tftp/boot/linux_mint/

Note : plutôt que de changer les permissions de manière bourrine comme montré au dessus, il est plus orthodoxe de créer un utilisateur pour chaque logiciel et un groupe commun. En attribuant les fichiers au groupe commun, tous peuvent donc fonctionner correctement et présenter les fichiers sans erreur.

Sources en vrac

Voici une liste de sources sur lesquels je me suis basé pour la mise en place du serveur. Cette liste n'est pas complète car je n'ai pas gardé trace de toutes mes lectures.

Mise en place d'un serveur PXE - partie 1

, 21h21

Je suis membre de l'atelier-soudé depuis quelques mois. Il s'agit d'une association de co-réparation d'objets électroniques et électriques. En gros, si vous avez un soucis avec un de vos appareils, vous venez et vous allez pouvoir le réparer vous même en bénéficiant de l'aide, des connaissances et des conseils des membres, et en utilisant le matériel mis à disposition.

Au sein de l'association, nous réparons régulièrement des ordinateurs et il faut souvent réinstaller le système d'exploitation ou démarrer sur un support externe pour diagnostic la panne. Nous utilisions jusqu'à présent des clés USB pour installer les systèmes d'exploitation. Le soucis majeur de cette solution est que nous n'avions jamais le bon système sous la main ou la bonne version et que nous passions donc notre temps à effacer et flasher ces clés USB.

Mais cette époque est (bientôt) révolue ! Nous sommes en train de mettre en place un serveur PXE pour pouvoir démarrer des systèmes d'exploitation depuis le réseau. Cette suite de billet détaille la démarche que nous avons suivis.

Attention ! Le système présenté dans ce billet et le suivant n'est pas complet. Lors de la mise en place du démarrage des systèmes Windows, j'ai fait le choix de basculer d'un serveur PXE à un serveur IPXE. Ceci car le téléchargement des isos WinPE en TFTP est beaucoup trop lent. IPXE permet de passer ces fichiers en HTTP ce qui fait passer le temps de chargement de quelques minutes à quelques secondes. Seul le démarrage des systèmes Linux Mint et ArchLinux est fonctionnel.

J'ai tout de même décidé de publier ces billets car l'ensemble est fonctionnel et plutôt bien abouti. Il est seulement lent pour le transfert des images disques WinPE et des utilitaires en ISO, pas pour les systèmes d'exploitation Linux car il utilise NFS. Je n'ai également testé qu'un nombre réduit de systèmes d'exploitation.

Le billet détaillant la mise en place du serveur IPXE est disponible ici.

Principe

Un serveur PXE permet à un ordinateur de démarrer depuis le réseau en récupérant une image qui se trouve sur un serveur. Le démarrage PXE, appelé amorce PXE, s'effectue en trois étapes :

  • Récupération d'une adresse IP sur un serveur DHCP. Par le biais du protocole DHCP, le fichier à amorcer est également indiqué à la machine.
  • Téléchargement du fichier à amorcer depuis un serveur Trivial FTP (TFTP).
  • Exécution du fichier à amorcer.

Le fichier d'amorçage peut ensuite lancer le démarrage d'un installateur, présenter un menu de choix pour l'utilisateur, récupérer des fichiers distants...

Présentation du système mis en place

Notre serveur PXE fonctionne avec les éléments suivants :

  • dnsmasq : logiciel intégrant un serveur DNS (non utilisé ici), un serveur DHCP permettant de faire du PXE et un serveur TFTP. Le choix s'est porté sur ce logiciel car il permet de faire du proxy DHCP, qu'il est simple à configurer et qu'il intègre la plupart des outils nécessaires au serveur PXE.

Petite parenthèse : un proxy DHCP permet de fournir les éléments du protocole DHCP nécessaires au démarrage PXE sans être le serveur DHCP principal qui fournit les adresses IP. Cette fonctionnalité là était nécessaire car le routeur fournissant l'accès à internet pour l'atelier-soudé fait également office de serveur DHCP et nous ne voulions pas modifier sa configuration. De plus, le routeur est constamment démarré contrairement au serveur PXE.

  • pxelinux : logiciel dérivé de Syslinux permettant le démarrage PXE depuis un serveur. L'utilisation des éléments de Syslinux permet ensuite de présenter un menu personnalisé à l'utilisateur, de charger des utilitaires ou de démarrer n'importe quel système d'exploitation.
  • Un serveur NFS : système de partage de fichiers distant entre machine de type Unix. Il fournit les images disques de tous les systèmes d'exploitation (excepté Windows).

Le serveur est installé sur une machine sous Linux Mint car c'est ce que l'atelier-soudé avait en stock. Linux Mint est une distribution dérivée de Ubuntu, elle même dérivée de Debian. L'ensemble des commandes présentées dans ce billet et les suivants devraient donc être compatible avec tous les systèmes dérivés de Debian, Ubuntu compris. Et tout doit également fonctionner sur d'autres distributions GNU/Linux, moyennant quelques modifications simples au niveau des commandes du gestionnaire de paquet.

Notre serveur PXE est également capable de fournir à l'ordinateur le fichier d'amorçage correspondant à son système bas niveau : BIOS ou UEFI.

Structure des répertoires

Voici à quoi ressemble la structure des répertoires du serveur PXE après installation :

/srv/
    |_ tftp/
    |      |_ boot/
    |      |      |_ linux_mint/
    |      |      |         |_ cinammon/
    |      |      |         |           |_ 32-bit
    |      |      |         |           |_ 64-bit
    |      |      |         |_ MATE/
    |      |      |         |           |_ 32-bit
    |      |      |         |           |_ 64-bit
    |      |      |         |_ XFCE/
    |      |      |         |           |_ 32-bit
    |      |      |         |           |_ 64-bit
    |      |      |         |_ KDE/
    |      |      |         |           |_ 32-bit
    |      |      |         |           |_ 64-bit
    |      |      |_ windows_10/
    |      |      |         |_ 32-bit
    |      |      |         |_ 64-bit
    |      |      |_ windows_7
    |      |      |_ windows_XP
    |      |      |_ archlinux/
    |      |      |         |_ x86_64
    |      |      |_ utilitaires
    |      |      |_ ...
    |      |
    |      |_ bios/
    |      |      |_ boot  -> ../boot/
    |      |      |_ pxelinux.cfg/
    |      |      |              |_ default
    |      |      |              |_ linux_mint.menu
    |      |      |              |_ windows.menu
    |      |      |              |_ autre.menu
    |      |      |              |_ utilitaires.menu
    |      |      |_ pxelinux.0
    |      |      |_ ldlinux.c32
    |      |      |_ (bios)*.c32
    |      |      |_ ...
    |      |
    |      |_ efi32/
    |      |      |_ boot  -> ../boot/
    |      |      |_ pxelinux.cfg/
    |      |      |              |_ default
    |      |      |              |_ ...
    |      |      |_ syslinux.efi
    |      |      |_ ldlinux.e32
    |      |      |_ (efi32)*.c32
    |      |      |_ ...
    |      |
    |      |_ efi64/
    |      |      |_ boot  -> ../boot/
    |      |      |_ pxelinux.cfg/
    |      |      |              |_ default
    |      |      |              |_ ...
    |      |      |_ syslinux.efi
    |      |      |_ ldlinux.e34
    |      |      |_ (efi64)*.c32
    |      |      |_ ...
    |
    |_ samba/
    |      |_ windows/
    |      |      |_ windows_10/
    |      |      |         |_ 32-bit
    |      |      |         |_ 64-bit
    |      |      |_ windows_7
    |      |      |_ windows_XP

Ce billet commence à être bien assez long à mon goût. Et il me reste encore à expliciter l'installation et la configuration du serveur PXE. Je vous réserve donc tout ça pour un autre billet (disponible ici).

Ma sauvegarde de donnée

, 19h29

Faire des sauvegardes c'est bien mais ça n'a jamais été simple. J'ai longtemps été un pratiquant de la technique du "je regarde comment font les autres pour choisir la meilleure solution, mais je fais pas grand chose" sur ce domaine là. Je me contentait d'une sauvegarde manuelle sur disque dur externe une fois de temps en temps (c'est à dire tout les six mois minimum :)).

Mon fonctionnement actuel, bien que s'étant amélioré, n'est largement pas parfait. Alors pourquoi le présenter me direz vous ? En premier lieu pour vous faire pensez à faire des sauvegardes vous aussi ;). Mais également pour vous présenter les outils que j'utilise, notamment pour la synchronisation.

Synchronisation

Je me suis installé un serveur de synchronisation chez moi utilisant le logiciel Syncthing. Ce serveur est composé d'une Raspberry Pi qui trainait chez moi et d'un disque dur externe.

Grace à ce système j'ai une copie quasi immédiate de tous mes documents et projets dès que je suis chez moi.

syncthing_logo.png

Il existe différent logiciels pour cet usage mais Syncthing a l'avantage d'être disponible sur plusieurs plateforme et de tourner en local sur une vieille Raspberry Pi. Je possède le modèle B+, et bien que Syncthing demande quasiment toutes les ressources de cette bécane, le tout fonctionne correctement. Je me retrouve tout de même avec une utilisation du CPU autour de 60% en moyenne, donc il faut faire attention à la chaleur dégagée par la carte. Si vous partez sur une installation semblable, je ne saurais trop vous conseiller d'acheter une carte un peu plus puissante.

Je n'utilise pas la fonctionnalité de Syncthing qui permet de conserver plusieurs versions d'un même document. Mais si j'en ai besoin un jour, je sais que cette fonctionnalité existe.

Sauvegardes

Je continue de faire mes sauvegardes sur un disque dur externe comme avant. Cependant le premier changement est que j'essaye de les faire plus souvent et régulièrement qu'avant, même si c'est la partie la plus difficile.

J'ai également mis en place un script de sauvegarde basé sur rsync pour automatiser et simplifier la sauvegarde. Ceci a grandement contribuer à améliorer la régularité de mes sauvegardes vu qu'il suffit de brancher le disque dur et de lancer le script. On peut même imaginer de lancer automatiquement le script à l'insertion du disque dur.

Améliorations

On peut toujours améliorer son système de sauvegarde en augmentant la redondance, la fréquence, etc. Tout en cherchant à garder mon système simple, il y a quelques éléments que je souhaiterai mettre en place :

  • Le chiffrement de mon disque dur externe pour garantir que personne ne puisse lire mes données. Cela me permettrait de conserver mon disque dur ailleurs sans crainte pour le contenu, permettant de prévenir les risques de type incendie, braquage ou inondation.
  • La sauvegarde chiffré de mon serveur de synchronisation vers un cloud, avec le contenu chiffré évidemment. Ceci combiné avec une conservation des différentes versions de fichiers et une conservation des fichiers supprimés me permettrait d'être à l'abri de tous risques. C'est la méthode qui me plait le plus car tout est automatisable. Il faut juste que j'étudie le système en prenant en compte le cout de l'espace disque sur cloud, le fait de pouvoir chiffrer et la disponibilité du service.