Introduction
Avec la prolifération des machines virtuelles, déployer rapidement des serveurs devient monnaie courante. Il est donc souhaitable de disposer d'une solution permettant au maximum d'automatiser le processus. Bien entendu il est possible d'utiliser cette solution avec de vrais serveurs.
Ce billet utilise CentOS ou RedHat version 7 afin de mettre en place un serveur PXE et des configurations via des fichiers kickstart. L'avantage des kickstarts c'est que les personnalisations sont écrites en shell classique et non dans un macro langage.
Boot PXE
Le boot PXE permet d'installer une machine via le réseau. PXE : Pre-boot eXecution Environment
Le processus se déroule en 5 phases selon le schéma ci-dessous :
Il est parfois nécessaire d'activer le boot PXE depuis le BIOS de la machine.
La solution présentée ici utilise la version 7 de RedHat ou CentOS.
Installation des composants
Tous les composants sont installés sur le même serveur ayant l'IP : 192.168.56.11/24. Il est supposé que ce serveur est déjà installé avec la gestion des dépôts configurée pour utiliser le DVD de la distribution.
yum -y install tftp-server syslinux dhcp httpd
Configuration DHCP
La configuration s'effectue dans le fichier /etc/dhcp/dhcpd.conf
subnet 192.168.56.0 netmask 255.255.255.0 { range 192.168.56.100 192.168.56.150; option subnet-mask 255.255.255.0; allow booting; allow bootp; next-server 192.168.56.11; filename "pxelinux.0"; }
Le fichier pxelinux.0 doit être accessible via TFTP soit sous /var/lib/tftpboot ( voir plus loin ).Activer le serveur DHCP
systemctl start dhcpd systemctl enable dhcpd systemctl status dhcpd ● dhcpd.service - DHCPv4 Server Daemon Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled) Active: active (running) since jeu. 2017-06-29 18:04:21 CEST; 11s ago Docs: man:dhcpd(8) man:dhcpd.conf(5) Main PID: 1264 (dhcpd) Status: "Dispatching packets..." CGroup: /system.slice/dhcpd.service └─1264 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid juin 29 18:04:21 lux01.formation.maison dhcpd[1264]: Internet Systems Consortium DHCP Server 4.2.5 juin 29 18:04:21 lux01.formation.maison dhcpd[1264]: Copyright 2004-2013 Internet Systems Consortium. juin 29 18:04:21 lux01.formation.maison dhcpd[1264]: All rights reserved. juin 29 18:04:21 lux01.formation.maison dhcpd[1264]: For info, please visit https://www.isc.org/software/dhcp/ juin 29 18:04:21 lux01.formation.maison dhcpd[1264]: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file juin 29 18:04:21 lux01.formation.maison dhcpd[1264]: Wrote 0 leases to leases file. juin 29 18:04:21 lux01.formation.maison dhcpd[1264]: Listening on LPF/enp0s3/08:00:27:00:f2:27/192.168.56.0/24 juin 29 18:04:21 lux01.formation.maison dhcpd[1264]: Sending on LPF/enp0s3/08:00:27:00:f2:27/192.168.56.0/24 juin 29 18:04:21 lux01.formation.maison dhcpd[1264]: Sending on Socket/fallback/fallback-net juin 29 18:04:21 lux01.formation.maison systemd[1]: Started DHCPv4 Server Daemon.
Configuration TFTP
Les fichiers sont par défaut sous /var/lib/tftpboot
Créer les deux répertoires suivants
mkdir -p /var/lib/tftpboot/pxelinux.cfg mkdir -p /var/lib/tftpboot/images/7
Recopier les fichiers suivants sous /var/lib/tftpboot
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot
Recopier depuis le DVD les images du kernel et de l'initrd
cp /dvd/images/pxeboot/vmlinuz /var/lib/tftpboot/images/7 cp /dvd/images/pxeboot/initrd.img /var/lib/tftpboot/images/7
Lancer le serveur TFTP
systemctl start tftp systemctl enable tftp systemctl status tftp ● tftp.service - Tftp Server Loaded: loaded (/usr/lib/systemd/system/tftp.service; indirect; vendor preset: disabled) Active: active (running) since jeu. 2017-06-29 18:06:27 CEST; 58s ago Docs: man:in.tftpd Main PID: 1287 (in.tftpd) CGroup: /system.slice/tftp.service └─1287 /usr/sbin/in.tftpd -s /var/lib/tftpboot juin 29 18:06:27 lux01.formation.maison systemd[1]: Started Tftp Server. juin 29 18:06:27 lux01.formation.maison systemd[1]: Starting Tftp Server...
Configuration PXE
Créer le fichier suivant /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32 MENU TITLE Choix de la distribution LABEL RedHat7 menu label RedHat 7 kernel images/7/vmlinuz append initrd=images/7/initrd.img inst.repo=http://192.168.56.11/redhat ks=http://192.168.56.11/ks7.cfg
Configuration HTTP
Sous /var/www/html créer un lien symbolique vers le DVD
ln -s /dvd /var/www/html/redhat
Créer le fichier suivant /var/www/html/ks7.cfg. Il s'agit d'un fichier générique pour un installation basique avec gestion réseau via dhcp.
# Fichier kickstart installation redhat 7 formation install url --url=http://192.168.56.11/redhat lang fr_FR.UTF-8 keyboard fr-latin9 text rootpw root01 network --onboot yes --device enp0s3 --bootproto dhcp reboot authconfig --enableshadow --passalgo=sha512 timezone --utc Europe/Paris # Desactivation du premier boot firstboot --disabled # partitionnement disque zerombr clearpart --all ignoredisk --only-use=sda part swap --asprimary --size=2048 part / --fstype=ext4 --asprimary --size=1 --grow %packages --excludedocs --nobase # Installation minimale @core %end %post # Configuration depots rm -f /etc/yum.repos.d/* cat <<EOF > /etc/yum.repos.d/local.repo [local] name=local baseurl=http://192.168.56.11/redhat enabled=1 gpgcheck=0 EOF %end # Desactivation KDUMP %addon com_redhat_kdump --disable --reserve-mb='auto' %end
Lancer le serveur HTTP
systemctl start httpd systemctl enable httpd systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since jeu. 2017-06-29 18:20:38 CEST; 8s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 1329 (httpd) Status: "Processing requests..." CGroup: /system.slice/httpd.service ├─1329 /usr/sbin/httpd -DFOREGROUND ├─1330 /usr/sbin/httpd -DFOREGROUND ├─1331 /usr/sbin/httpd -DFOREGROUND ├─1332 /usr/sbin/httpd -DFOREGROUND ├─1333 /usr/sbin/httpd -DFOREGROUND └─1334 /usr/sbin/httpd -DFOREGROUND juin 29 18:20:38 lux01.formation.maison systemd[1]: Starting The Apache HTTP Server... juin 29 18:20:38 lux01.formation.maison httpd[1329]: AH00557: httpd: apr_sockaddr_info_get() failed for lux01.formation.maison juin 29 18:20:38 lux01.formation.maison httpd[1329]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1...s message juin 29 18:20:38 lux01.formation.maison systemd[1]: Started The Apache HTTP Server. Hint: Some lines were ellipsized, use -l to show in full.
Finalisation
A ce stade le boot PXE est opérationnel.
Configuration réseau
Le kickstart générique impose une configuration réseau DHCP. La ligne network modifiée ainsi permet de coder l'IP en statique
network --onboot yes --device enp0s3 --bootproto static --ip 192.168.56.12 --netmask 255.255.255.0 --gateway 192.168.56.1 --noipv6 --nameserver 192.168.56.11 --hostname lux02.formation.maison
Kickstart et MAC ADDRESS
En utilisant la MAC ADDRESS de la carte réseau il est possible de créer une installation totalement automatique et personnalisée.
Créer le fichier kickstart suivant /var/www/html/lux02.cfg.Ce fichier par rapport au précédent ne comporte qu'une différence au niveau de la carte réseau et des packages installés.
# Fichier kickstart installation de lux02.formation.maison install url --url=http://192.168.56.11/redhat lang fr_FR.UTF-8 keyboard fr-latin9 text rootpw root01 network --onboot yes --device enp0s3 --bootproto static --ip 192.168.56.12 --netmask 255.255.255.0 --gateway 192.168.56.1 --noipv6 --nameserver 192.168.56.11 --hostname lux02.formation.maison reboot authconfig --enableshadow --passalgo=sha512 timezone --utc Europe/Paris # Desactivation du premier boot firstboot --disabled # partitionnement disque zerombr clearpart --all ignoredisk --only-use=sda part swap --asprimary --size=2048 part / --fstype=ext4 --asprimary --size=1 --grow %packages --excludedocs --nobase # Installation minimale @core bind-utils vim-enhanced wget unzip net-tools %end %post # Configuration depots rm -f /etc/yum.repos.d/* cat <<EOF > /etc/yum.repos.d/local.repo [local] name=local baseurl=http://192.168.56.11/redhat enabled=1 gpgcheck=0 EOF %end # Desactivation KDUMP %addon com_redhat_kdump --disable --reserve-mb='auto' %end
Mis en place
Relever la MAC ADDRESS par exemple 08:00:27:0B:F3:10. Il faut créer sous /var/lib/tftpboot/pxelinux.cfg un fichier ayant cette forme 01-08-00-27-0b-f3-10.
Le nom du fichier doit :
- Débuter par 01
- Tous les eléments de la MAC ADDRESS doivent être séparés par des tirets.
- Les lettres doivent être en minucules
vi /var/lib/tftpboot/pxelinux.cfg/01-08-00-27-0b-f3-10 default LUX02 label LUX02 kernel images/7/vmlinuz append initrd=images/7/initrd.img inst.repo=http://192.168.56.11/redhat ks=http://192.168.56.11/lux02.cfg
Conclusion
La configuration kickstart est simple et très puissante. En consultant la documentation RedHat il est aisé de trouver les informations utiles.
Le lien suivant conduit à la documentation RedHat 7 sur kickstart : https://access.redhat.com/documenta...