Webux lab | partie 1 – Le PXE Serveur

Objectif

Le PXE serveur est utilisé pour faciliter et automatiser à un certain point les déploiements dans un réseau.

Ce PXE est utilisé en pair avec un serveur DHCP, celui-ci est externe donc la configuration du DHCP devra rediriger les clients PXE vers le conteneur. Ce qui sera couvert dans un autre post.

Pré-requis

  • Docker
  • Docker Compose
  • Du storage local ou externe selon votre environnement (le storage est local dans ce projet)
  • Un lien internet et un lien sur le réseau de déploiement

Étape 1 – récupérer l’image docker

l’image est disponible sur le docker hub et sur github

https://github.com/studiowebux/pxe-server

https://hub.docker.com/r/studiowebux/pxe-server

sur votre système,

docker pull studiowebux/pxe-server

Étape 2 – Lancer le conteneur

Vous pouvez lancer l’image manuellement ou utiliser le docker-compose disponible sur Github.

docker run -it --name pxe \
-p 21:21 \
-p 68:68/udp \
-p 68:68 \
-p 69:69/udp \
-p 4011:4011/udp \
-p 20:20 \
-p 33333-33343:33333-33343 \
-v $PWD/netboot/:/tftpboot/netboot \
-v $PWD/pxelinux.cfg/:/tftpboot/pxelinux.cfg/ \
-v $PWD/pub/:/var/ftp/pub/:ro \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-v /tmp/$(mktemp -d):/run \
--privileged \
pxe-server:latest

Cette ligne lance le conteneur avec tout ce dont vous avez besoin pour avoir un PXE serveur de base.

Pour pouvoir utiliser ce PXE, n’oubliez pas de configurer votre serveur DHCP pour pointer sur cette machine. (Ceci sera couvert dans un autre article)

Si vous voulez utiliser le docker-compose:

git clone https://github.com/studiowebux/pxe-server.git
cd pxe-server/
docker-compose up -d

Vous devriez obtenir le même résultat.

Étape 3 – Ajouter une image d’installation

Toutes les étapes qui suivent sont effectué sur la machine host,

Télécharger l’image

Selon vos besoins, choisissez l’image qui vous convient, ici CentOS 7.6 est utilisé.

wget http://mirror2.evolution-host.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso

Ajout des fichiers dans netboot

Il faut monter l’iso téléchargé

sudo mount -o loop CentOS-7-x86_64-Minimal-1810.iso /mnt/

Puis on doit copier les fichier vmlinuz et initrd.img dans le répertoire du conteneur.

Ces fichiers servent à boot l’image à partir du réseau.

Ici l’utilisation du docker-compose a été faite, donc les fichiers doivent être copiés vers /srv/pxe/netboot

mkdir -p /srv/pxe/netboot/centos/76/
sudo cp /mnt/isolinux/{initrd.img,vmlinuz} /srv/pxe/netboot/centos/76/

Copier le contenu du disque

Ici uniquement le ftp est couvert mais il existe plusieurs méthodes pour effectuer cette tâche, par exemple NFS est beaucoup mieux.

mkdir -p /srv/pxe/pub/images/centos/76/
sudo cp -av * /srv/pxe/pub/images/centos/76/

Ajout du kickstart

L’usage du PXE permet d’automatiser l’installation des OS, pour RHEL et Centos ce fichier se nomme kickstart.

alors voici un exemple simple de ce fichier, vous pouvez le modifier et l’adapter à vos besoins.

NOTE: le mot de passe doit être généré:

openssl passwd -1 myPassword
$1$cDATzvbJ$fMOQljRXjabnai/IfJHpb.
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL

# Firewall configuration
firewall --disabled

# Install OS instead of upgrade
install

# Use FTP installation media
url --url="ftp://192.168.10.5/pub/images/centos/76"

# Root password
rootpw --iscrypted $1$cDATzvbJ$fMOQljRXjabnai/IfJHpb.

# System authorization information
auth useshadow passalgo=sha512

firstboot disable

# System keyboard
keyboard us

# System language
lang en_US

# SELinux configuration
selinux disabled

# Installation logging level
logging level=info

# System timezone
timezone America/Toronto

# System bootloader configuration
bootloader location=mbr
clearpart --all --initlabel
part swap --asprimary --fstype="swap" --size=1024
part /boot --fstype xfs --size=300
part pv.01 --size=1 --grow
volgroup root_vg01 pv.01
logvol / --fstype xfs --name=lv_01 --vgname=root_vg01 --size=1 --grow

%packages
@^minimal
@core

%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end

Ajout de l’entrée dans le PXE

Maintenant il faut ajouter les liens vers ces fichiers pour que les clients puissent démarrer sur ce serveur:

nano /srv/pxe/pxelinux.cfg/default

Ajouter ce qui suit:

default menu.c32
prompt 0
timeout 30
MENU TITLE webuxlab

LABEL centos76
MENU LABEL CentOS 7.6
	KERNEL /netboot/centos/76/vmlinuz
	APPEND initrd=/netboot/centos/76/initrd.img inst.repo=ftp://192.168.10.5/pub/images/centos/76 ks=ftp://192.168.10.5/pub/kickstarts/centos/76/ks.cfg

Pour les nouveaux entrées:

LABEL centos8
MENU LABEL CentOS 8
	...

Le paramètre inst.repo= est celui qui peut être remplacé par un serveur NFS (ceci sera couvert dans un autre article)

Le paramètre ks= peut aussi être utilisé avec un serveur http.

Le choix de NFS et http est mieux car c’est plus rapide. Cependant avec FTP c’est plus simple à mettre en place.

Conclusion

Vous devez avoir un serveur DHCP externe pour que tout cela fonctionne et ce serveur doit pointer sur la machine physique du docker.

Example avec un serveur PFSense

PFSense DHCP configuration avec pxe

Laisser un commentaire