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 :

boot_PXE.jpg

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