Cette page explique comment procéder à une installation une distribution linux sans avoir recours à un quelconque média de démarrage. Une telle installation nécessite la mise en place d’un environnement particulier appelé environnement PXE — c'est-à-dire Preboot Execution Environment ou Environnement d’exécution pré-démarrage — pour que l’ordinateur sur lequel on souhaite installer la distribution puisse trouver sur le réseau local un chargeur de démarrage ainsi que les éléments primordiaux de l’installateur que sont le noyau Linux et l’initramfs.
Ces éléments lui permettront ensuite d’accéder à l’Internet pour y retirer le reste du système d’installation, puis celui du système d’exploitation cible de son choix, grâce au menu que lui présentera le chargeur de démarrage.
Dans un premier temps nous expliquerons ce qu’est un tel environnement et comment le mettre en place. Dans un deuxième temps nous expliquerons où et comment accéder aux différentes versions du système à installer, soit sur les dépôts officiels de Fedora, soit sur un dépôt local pour diminuer les temps de transfert.
Un environnement PXE est un environnement dans lequel un ordinateur dit « PXE capable » va chercher son chargeur de démarrage, non plus sur l’un de ses périphériques matériels mais sur le réseau. Cet environnement nécessite la configuration préalable de plusieurs parties, à savoir :
Dans un tel environnement, le serveur DHCP et le serveur TFTP peuvent se trouver, soit sur un seul et même ordinateur, soit sur des ordinateurs séparés.
À la différence d’un démarrage classique durant lequel, après avoir exécuté son micrologiciel — BIOS ou UEFI selon le cas —, un ordinateur n’est plus dirigé sur son chargeur de démarrage habituel — situé selon le cas, dans le secteur de démarrage d’un de ses disques ou dans le dossier /boot/efi/EFI
— mais sur une partie de code placée dans une mémoire morte spéciale liée à une de ses interfaces réseau. C’est cette partie de code qui va initier les premières requêtes DHCP qui vont permettre au serveur DHCP de répondre au client et de lui fournir les éléments d’initialisation fondamentaux suivants :
L’ordinateur client est alors capable d’aller chercher ce chargeur de démarrage sur le serveur pour finalement l’exécuter.
La suite dépendra de ce que ce chargeur de démarrage prévoira, en particulier dans son menu, et nécessitera en général d’aller chercher le reste du système d’installation, puis d’exploitation, sur un serveur dont le type est assez libre (FTP, HTTP, partage NFS ou autre).
La plupart des ordinateurs modernes sont « PXE capables » mais il faut configurer le démarrage PXE.
Redémarrer et entrer dans la configuration du micrologiciel BIOS.
Une fois dans cette configuration, il faut :
Voici quelques exemples qui montrent que la terminologie et l’emplacement dans le menu varient beaucoup d’un fabricant à l’autre :
Carte mère Gigabyte P55A-UD4 : Integrated Peripherals -> Onboard LAN Boot ROM Carte mère Asusrock B250 Pro4 : Advanced -> Boot -> Boot From Onboard LAN PC portable Gigabyte P27 GV : Boot -> UEFI Settings ->Net Work Stack (doit être activé) -> IPv4 PXE Support PC portable Asus X750JV : Advanced -> Network Stack (doit être activé) -> IPv4 PXEsupport
Sur l’ordinateur qui accueillera le serveur TFTP — et cela peut-être le même ordinateur que celui qui accueillera le serveur DHCP ou un autre —, il faut en premier lieu installer le paquet tftp-server. Pour cela utiliser la commande suivante :
# dnf install tftp-server
Pour démarrer et arrêter le serveur, il faut faire appel à systemd qui gère les services. Voici ces commandes :
Pour démarrer ponctuellement le service
# systemctl start tftp.service
Pour démarrer automatiquement au démarrage de l’ordinateur
# sytemctl enable tftp.service
Pour arrêter le service
# systemctl stop tftp.service
Pour vérifier l’état du service
# systemctl status tftp.service
Il y a plusieurs fichiers qu’il faut rendre disponibles sur le serveur TFTP, à savoir :
Ces fichiers devront être rendus disponibles à la fois pour les ordinateurs dotés d’un micrologiciel BIOS
et pour ceux dotés d’un micrologiciel UEFI.
Par ailleurs, il faudra aussi déterminer quel chargeur de démarrage devant être utilisés. On va traiter les cas suivants :
Cette section traite de la mise en place du chargeur de démarrage et fichiers associés pour une installation uniquement sur des ordinateurs clients dotés d’un micrologiciel BIOS.
Pour disposer du chargeur de démarrage syslinux, il vous faut installer le paquet syslinux à l’aide de la commande suivante :
# dnf install syslinux
Le répertoire racine du serveur TFTP est /var/lib/tftpboot/
. C’est donc dans ce dossier que doivent se trouver les fichiers de syslinux:
Pour bénéficier de possibles mises à jour de syslinux , établir des liens symboliques vers ces derniers :
# ln -s /usr/share/syslinux{pxelinux.0,vesamenu.c32,ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot/
Enfin, créer un dossier /var/lib/tftpboot/pxelinux.cfg
pour y accueillir le fichier de configuration du menu :
# mkdir -p /var/lib/tftpboot/pxelinux.cfg
Le fichier contenant le menu doit se nommer default
et être placé dans le dossier l'on viens de créer. Voici un exemple d’un tel menu :
default vesamenu.c32 prompt 1 timeout 600 label linux menu label ^Install Fedora Workstation 27 64-bit menu default kernel f27/vmlinuz append initrd=f27/initrd.img inst.stage2=http://download.fedoraproject.org/pub/fedora/linux/releases/27/Workstation/x86_64/os/ ip=dhcp label linux menu label ^Install Fedora Server 26 64-bit menu default kernel f26/vmlinuz append initrd=f26/initrd.img inst.stage2=http://download.fedoraproject.org/pub/fedora/linux/releases/26/Server/x86_64/os/ ip=dhcp label rescue menu label ^Rescue installed system kernel f26/vmlinuz append initrd=f26initrd.img ip=dhcp root=live:http://download.fedoraproject.org/pub/fedora/linux/releases/26/Server/x86_64/os/LiveOS/squashfs.img rescue label local menu label Boot from ^local drive localboot 0xffff
kernel f27/vmlinuz
, dans laquelle f27 représente un sous-dossier f27
de la racine du serveur TFTP et vmlinuz, l’image du noyau F27 concerné.initrd=f27/initrd.img
, laquelle f27
représente le même dossier que dans le cas précédent et initrd.img
l'image du système de fichiers initial.
Il faut donc créer, à la racine du serveur TFTP, un dossier pour chacune des versions de système et y placer les noyaux ainsi que les initrd.img
correspondants.
Créer, à la racine du serveur TFTP, une structure de dossiers permettant à GRUB2 de trouver tout ce dont il a besoin. GRUB2 permet de le faire en un clin d’œil grâce à une commande dédiée. Néanmoins, avant de l’utiliser, il faut s'assurer que l'on dispose bien des éléments nécessaires pour l'architecture cible, car a priori après une installation standard ce n’est pas le cas.
Il faut installer le paquet grub2-tools-efi.<architecture>
.
La commande générique précédente est :
# dnf install grub2-tools-efi.i386-pc
Cela devrait aboutir à la création et au peuplement d’un dossier /usr/lib/grub/i386-pc
qui contient tout le nécessaire à la commande qu'on va utiliser maintenant.
Cette commande va créer l’arborescence des dossiers nécessaires à l'environnement PXE dans le serveur TFTP:
# grub2-mknetdir --net-directory=/var/lib/tftpboot --subdir=/boot/grub -d /usr/lib/grub/i386-pc
Dans cette commande, il faut bien sûr adapter le chemin vers la racine du serveur TFTP.
Noter le path dans la phrase qui apparaît dans le terminal à la fin du compte-rendu de la commande :
« Configurez le serveur DHCP pour pointer vers /var/lib/tftpboot/boot/grub/i386-pc/core.0 ».
qu'il faudra indiquer lors de la configuration du serveur DHCP.
On peut répéter les 2 commandes précédentes pour le cas de l’architecture x86_64-efi
, soit :
# dnf install grub2-tools-efi.x86_64-efi
et
# grub2-mknetdir --net-directory=/var/lib/tftpboot --subdir=/boot/grub -d /usr/lib/grub/x86_64-efi
Noter le pah dans la phrase qui apparaît dans le terminal à la fin du compte-rendu de la commande :
« Configurez le serveur `DHCP` pour pointer vers **/var/lib/tftpboot/boot/grub/x86_64-efi/**core.efi ».
qu'il faudra donc indiquer lors de la configuration du serveur DHCP
.
Maintenant, si on explore l’arborescence des fichiers dans le serveur TFTP
, dans boot/grub/<architecture>
, ons y trouvera un fichier grub.cfg
dont le contenu est : source /boot/grub/grub.cfg
. Cela invite donc à placer la configuration de GRUB2
dans boot/grub/grub.cfg
qui est un dossier commun aux deux architectures. Le même fichier de configuration de GRUB2
peut donc être utilisé.
L’utilisation, ultérieure, de la commande grub2-mknetdir
n’écrasera pas l’arborescence créée lors de sa première utilisation avec une architecture client différente. Elle ne fait que la compléter.
Avec cette méthode, il faut désactiver momentanément le Secure boot dans le micrologiciel UEFI.
Créer un dossier à la racine du serveur tftpboot. Pour l’exemple on l’appellera UEFI :
# mkdir /var/lib/tftpboot/UEFI
Monter l’image iso d’installation:
# mkdir /mnt/iso # mount -t iso9660 -o loop <chemin et nom de l’image iso> /mnt/iso
et copier les fichiers des chargeurs de démarrage nécessaires dans le dossier <racine du serveur tftp>/UEFI/
:
# cp /mnt/iso/EFI/BOOT/{BOOTX64.EFI,grubx64.efi} /var/lib/tftpboot/UEFI/
Démonter l’image iso :
# umount /mnt/iso
Le fichier de configuration, dont un exemple est fourni ci-dessous, doit être placé dans (en partant de la racine du serveur tftpboot) :
boot/grub
si on utilisé la méthode de base ;
Un certain nombre de modules de GRUB2 sont déjà pré-embarqués dans les images essentielles (core image en anglais). Ces modules sont les suivants :
mincmd, configfile, normal, gzio, gettext, extcmd, crypto, terminal,tftp, net, bufio, datetime, boot, priority_queue
pour core.efi (x86_64-efi) : efinet,
pour core.0 (i386-pc) : pxe, net
Aucun module supplémentaire n’est strictement nécessaire au démarrage. Néanmoins, si on ne prévoie pas les modules nécessaires, le démarrage se fera complètement en aveugle et il faudra attendre un certain temps de téléchargement avant de voir l’image d’anaconda apparaître à l’écran.
On a vu que cette configuration est commune aux deux architectures. En voici un exemple :
function load_video { insmod efi_gop insmod efi_uga insmod video_bochs insmod video_cirrus insmod all_video } load_video set gfxpayload=keep set net_default_server=192.168.1.19 menuentry 'Installer Fedora 26 Server 64-bits' --class fedora --class gnu-linux --class gnu --class os { echo 'Message de grub.cfg : chargement du noyau vmlinuz' linux (tftp)/f26/vmlinuz ip=dhcp inst.repo=http://download.fedoraproject.org/pub/fedora/linux/releases/26/Server/x86_64/os/ echo 'Message de grub.cfg : chargement du système de fichiers initial' initrd (tftp)/f26/initrd.img } menuentry 'Installer Fedora 26 Workstation 64-bit' --class fedora --class gnu-linux --class gnu --class os { echo 'Message de grub.cfg : chargement du noyau vmlinuz' linux (tftp,192.168.1.19)/f26/vmlinuz ip=dhcp inst.repo=http://download.fedoraproject.org/pub/fedora/linux/releases/26/Workstation/x86_64/os/ echo 'Message de grub.cfg : chargement du système de fichiers initial' initrd (tftp,192.168.1.19)/f26/initrd.img } menuentry 'Installer Fedora 27 Server 64-bits' --class fedora --class gnu-linux --class gnu --class os { echo 'Message de grub.cfg : chargement du noyau vmlinuz' linux (tftp)/f27/vmlinuz ip=dhcp inst.repo=http://download.fedoraproject.org/pub/fedora/linux/releases/27/Server/x86_64/os/ echo 'Message de grub.cfg : chargement du système de fichiers initial' initrd (tftp)/f27/initrd.img } menuentry 'Installer Fedora 27 Workstation 64-bit' --class fedora --class gnu-linux --class gnu --class os { echo 'Message de grub.cfg : chargement du noyau vmlinuz' linux (tftp)/f27/vmlinuz ip=dhcp inst.repo=http://download.fedoraproject.org/pub/fedora/linux/releases/27/Workstation/x86_64/os/ echo 'Message de grub.cfg : chargement du système de fichiers initial' initrd (tftp)/f27/initrd.img } menuentry 'Rescue installed system' --class fedora --class gnu-linux --class gnu --class os { kernel f26/vmlinuz append f26/initrd=initrd.img root=live:http://download.fedoraproject.org/pub/fedora/linux/releases/26/Server/x86_64/os/LiveOS/squashfs.img rescue
Bien entendu ceci n’est qu’un exemple et il faut prévoir des entrées pour d’autres distributions.
lorsqu'on utilise la méthode alternative pour les clients dotés d’un micrologiciel UEFI, il faut remplacer les commandes linux et initrd de GRUB2 par linuxefi et initrdefi respectivement.
Par ailleurs les chemins vers les noyaux et les initrd doivent être modifiés pour commencer par (tftp)/..
(p. ex. (tftp)/../f26/initrd)
GRUB2 va chercher les noyaux et les systèmes de fichiers initiaux dans des dossiers du type <version>
, nom dans lequel <version>
est à remplacer par la version à installer.
Créer d’abord ces dossiers :
# mkdir -p /var/lib/tftpboot/{f26,f27}
Pour chacun de ces dossiers, il vous suffit de faire :
# wget http://download.fedoraproject.org/pub/fedora/linux/releases/<version>/Server/x86_64/os/images/pxeboot/vmlinuz -O /var/lib/tftpboot/f<version>/vmlinuz
commande dans laquelle <version>
est à remplacer par le numéro de la version concernée, soit pour la version 26 :
# wget http://download.fedoraproject.org/pub/fedora/linux/releases/26/Server/x86_64/os/images/pxeboot/vmlinuz -O /var/lib/tftpboot/f26/vmlinuz
Cette commande est à répéter pour les autres distributions, ainsi que pour les initrd pour lesquels la commande ressemble à :
# wget http://download.fedoraproject.org/pub/fedora/linux/releases/26/Server/x86_64/os/images/pxeboot/initrd.img -O /var/lib/tftpboot/f26/initrd.img
Pour connaître le nom de des interfaces exécuter la commande ip address sans paramètre.
En premier lieu, installer le paquet dhcp-server:
# dnf install dhcp-server
Une fois installé, la configuration du serveur se fait dans le fichier /etc/dhcp/dhcpd.conf
.
Voici un exemple de configuration
ddns-update-style none; ignore client-updates; authoritative; # allow booting; # allow bootp; option arch code 93 = unsigned integer 16; # RFC4578 subnet 192.168.1.0 netmask 255.255.255.0 { next-server 192.168.1.19; # adresse du serveur tftp if option arch =00:07 { filename "boot/grub/x86_64-efi/core.efi"; } else { filename "boot/grub/i386-pc/core.0"; } option routers 192.168.1.1; # passerelle par défaut option subnet-mask 255.255.255.0; # masque de sous-réseau option domain-name "home.lan"; # nom de domaine option domain-name-servers 192.168.1.1; # serveurs DNS range 192.168.1.20 192.168.1.100; # plage d’adresse default-lease-time 21600; # durée du bail en secondes max-lease-time 43200 ; # durée maxi du bail en sec. #Ici on passe le serveur d’essai et le client en IP fixes host PC-JO { # le serveur DHCP et TFTP hardware ethernet 70:85:c2:49:b8:df; fixed-address 192.168.1.19; } host PC-CHAMBRE { # le client est en IP fixe mais ça n’a rien d’obligatoire hardware ethernet 1c:6f:65:93:55:39; fixed-address 192.168.1.127; } }
filename = "pxelinux.0;"
filename = "UEFI/BOOTX64.EFI;"
host
permettent d’affecter à certains clients une adresse IP fixe.Tout ce qu’il vous faut pour installer Fedora ou d’autres systèmes d’exploitation est maintenant en place.
Il faut relancer le service dhcpd à chaque modification sa configuration, puis vérifier que les deux serveurs, DHCP et TFTP sont actifs.
Démarrer le serveur en ayant préalablement choisi l'option de démarrage PXE. En quelques secondes le menu de GRUB (ou de syslinux) devrait s’afficher.
Lorsqu'on a nombreuses installations à effectuer, cela vaut peut valoir la peine de répliquer les dépôts sur un serveur HTTP local.
L’installation d’un serveur HTTP n’est pas très compliquée.
Une fois le serveur installé, créer les dossiers d’accueil suivants, extensibles par ramification à d’autres versions :
# mkdir -p /var/www/html/fedora/linux/releases/27/Everything/x86_64/os
Pour répliquer seulement la partie du serveur correspondant à Workstation, utiliser un commande qui ressemble à celle-ci :
$ rsync -avrt rsync://rsync.mirrorservice.org/dl.fedoraproject.org/pub/fedora/linux/releases/27/Workstation/x86_64/os/ /html/fedora/linux/releases/27/Everything/x86_64/os
seul ce dépôt est nécessaire à une première installation, pour que les mises à jour se fassent sur un dépôt updates local, il faudra également le répliquer et ensuite modifier le dossier /etc/yum.conf.d/
en conséquence.
Pour télécharger les dépôts, les dossiers doivent être accessibles au démon httpd
, en supposant qu'on est dans le dossier /var/www/html/
et que selinux
est en mode enforcing
:
# usermod -aG apache <votre nom d’utilisateur> # chown -R <votre nom d’utilisateur>:apache fedora # chmod -R 750 fedora # chcon −R −t httpd_sys_content_rw_t fedora
Maintenant, il faut que les entrées dans le menu de GRUB2 pointe sur ce dépôt local :
menuentry 'Installer Fedora 27 Workstation 64-bit' --class fedora --class gnu-linux --class gnu --class os { echo 'Message de grub.cfg : chargement du noyau vmlinuz' linuxefi (tftp)/../f27/vmlinuz ip=dhcp inst.repo=http://192.168.1.19/fedora/linux/releases/27/Everything/x86_64/os/ echo 'Message de grub.cfg : chargement du système de fichiers initial' initrdefi (tftp)/../f27/initrd.img }
La partie à adaptée est l’adresse du serveur HTTP, ou son nom d’hôte si la configuration DNS est au point.
Cobbler est un serveur d’installation PXE comportant en standard de nombreuses fonctions pratiques pour les administrateurs réseau et difficilement réalisables manuellement..