TFTP : PXE Serveur, déploiement d'OS sous Linux
Contents
1 Introduction
Le démarrage PXE (sigle de Pre-boot eXecution Environment) permet à une station de travail de démarrer depuis le réseau un système d'exploitation qui se trouve sur un serveur.
Il permet également d'installer de manière automatique et à distance des serveurs sous diverses OS.
Pour activer le PXE, il faut auparavant le configurer dans le BIOS. L’option se trouve fréquemment dans un menu concernant la carte réseau.
Le boot par PXE s'effectue en plusieurs étapes :
- Recherche d'une adresse IP sur un serveur DHCP ainsi que du fichier à booter
- Téléchargement du fichier à booter sur un serveur Trivial FTP.
- Exécution du fichier à booter.
Il est à noter que la taille du fichier à booter ne permet pas de booter directement un noyau Linux, par exemple, mais qu'il faut que ce logiciel à booter le télécharge et l'exécute lui même.
2 Prérequis
Dans les prérequis, c'est assez simple, il faut juste un serveur DHCP qui est capable de faire booter sur PXE. Nous verrons ici la configuration de ce serveur DHCP pour qu'il accepte de faire booter par le réseau.
3 Installation
Pour installer le serveur PXE :
apt-get install tftpd-hpa syslinux
4 Configuration
4.1 tftpd-hpa
Nous allons éditer ce fichier /etc/default/tftpd-hpa pour remplacer la valeur de RUN_DAEMON :
RUN_DAEMON="yes"
4.2 Inetd
On désactive le tsize de tftp-hpa qui limite la taille des fichiers qui vont être rapatriés. Pour celà rajoutez une ligne dans /etc/inetd.conf et vérifier qu'une autre est bien commentée :
/etc/inetd.conf |
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot # tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd -r blksize /tftpboot |
Une fois fait, nous allons redémarrer inetd et tftpd :
/etc/init.d/inetd restart /etc/init.d/tftpd-hpa start
Pour vérifier que tout fonctionne :
$ netstat -uap | grep tftp udp 0 0 *:tftp *:* 30265/in.tftpd
Si la ligne ci dessus apparait, c'est que tout s'est bien déroulé :-)
4.3 Iptables
Voici la jolie ligne a rajouter à iptables pour autoriser le tftp :
iptables -A INPUT -s 10.1.1.0/255.255.255.0 -p udp -j ACCEPT
4.4 DHCP sous Linux
Dans le cas où votre DHCP est sous Linux, éditez le fichier /etc/dhcp3/dhcpd.conf et rajoutez ces lignes dans votre subnet :
subnet 192.168.0.0 netmask 255.255.255.0 { ... filename "pxelinux.0"; next-server 192.168.1.254; ... }
Next-server est pour donner l'adresse IP du serveur PXE.
Puis redémarrez votre serveur DHCP :
/etc/init.d/dhcp3 restart
4.5 DHCP sous Windows
Dans le cas où votre DHCP est sous Windows, au niveau de votre configuration du DHCP (générale ou non) ajoutez l'adresse du serveur TFTP :
4.6 Boot loader
Maintenant, nous devons préparer et organiser notre serveur TFTP :
cd /var/lib/tftpboot mkdir pxelinux.cfg os-installer touch boot.txt cp /usr/lib/syslinux/{pxelinux.0,menu.c32} .
Nous avons donc ici insérez pxelinux.0 qui est indipensable pour booter nos OS et menu.c32 qui permet d'avoir un petit menu assez basique mais bien pratique quand nous aurons nos OS d'installé.
Nous allons configurer la configuration global du serveur. Créez et éditez le fichier pxelinux.cfg/default pour y insérer ceci :
PROMPT 1 DISPLAY boot.txt F1 boot-screens/f1.txt F2 boot-screens/f2.txt F3 boot-screens/f3.txt F4 boot-screens/f4.txt F5 boot-screens/f5.txt F6 boot-screens/f6.txt F7 boot-screens/f7.txt F8 boot-screens/f8.txt F9 boot-screens/f9.txt F0 boot-screens/f10.txt # On définit ce qui sera lancer par defaut lors du boot, à savoir le menu graphique choisi DEFAULT menu.c32 NOESCAPE 1 # On choisi un titre pour l'écran d'arrivé MENU TITLE -=[ TFTP Server - OS Installer ]=- # Il y a un boot automatique au bout de 20 secondes TIMEOUT 200 # Le boot automatique s'effectue sur le disque dur en locale LABEL Local Hard Drive Boot localboot 0 --
La configuration de base est maintenant prête. Nous n'avons plus qu'à ajouter des OS.
5 Mise en place des OS
Nous allons voir ici comment mettre en place différents types d'OS. Avant de continuer allez dans ce dossier :
cd os-installer
5.1 Debian
Nous allons donc créer le nécessaire, c'est à dire un dossier, puis y insérer le kernel. Nous allons ici faire la version 32 et 64 bits :
mkdir -p debian-installer/{x64,x86}
Pour la version 32 bits :
cd debian-installer/x86 wget http://ftp.debian.org/dists/stable/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz \ http://ftp.debian.org/dists/stable/main/installer-i386/current/images/netboot/debian-installer/i386/linux
Pour la version 64 bits :
cd debian-installer/x64 wget http://ftp.debian.org/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz \ http://ftp.debian.org/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux
Ensuite rajoutez ces lignes (en fonction de l'architechture que vous avez choisis) dans le fichier /var/lib/tftpboot/pxelinux.cfg/default :
LABEL x64 - Debian kernel os-installer/debian-installer/x86/linux append vga=791 priority=low initrd=os-installer/debian-installer/x86/initrd.gz -- LABEL x86 - Debian kernel os-installer/debian-installer/x64/linux append vga=791 priority=low initrd=os-installer/debian-installer/x64/initrd.gz --
- vga=791 : charge la résolution 1024*768
- priority=low : charge le mode expert de debian
Note : Pour automatiser les installations, suivez ce lien : Automatiser une installation de Debian
5.2 Memtest86+
A l'heure ou j'écris ces ligne, la dernière version est la 1.70. Je vais donc faire cet exemple avec celle-ci :
mkdir -p memtest86
Téléchargons donc cette version (nous allons prendre le binaire bootable) :
cd memtest86 wget http://www.memtest.org/download/1.70/memtest86+-1.70.bin.gz gzip -d http://www.memtest.org/download/1.70/memtest86+-1.70.bin.gz
Ensuite petite subtilité, il faut renommer et enlever le .bin pour que celà fonctionne :
mv memtest86+-1.70{,.bin}
Ensuite rajoutez ces lignes (en fonction de l'architechture que vous avez choisis) dans le fichier /var/lib/tftpboot/pxelinux.cfg/default :
LABEL Memtest86+ (RAM Testing Program) kernel os-installer/memtest/memtest86+-1.70
5.3 OpenBSD
Encore une fois, nous allons ici faire le nécessaire pour pouvoir lancer OpenBSD en version32 et 64 bits :
mkdir -p openbsd-installer/{x64,x86}
Pour la version 32 bits :
cd openbsd-installer/x86 wget http://ftp.arcane-networks.fr/pub/OpenBSD/4.1/i386/floppy41.fs
Pour la version 64 bits :
cd openbsd-installer/x64 wget http://ftp.arcane-networks.fr/pub/OpenBSD/4.1/amd64/floppy41.fs
Nous prenons ici les floppy et non les versions CD car nous allons utiliser un nouveau module appellé memdisk qui est capable de charger une iso mais uniquement de la taille inférieure à celle d'une disquette. Copiez donc ce module :
cp /usr/lib/syslinux/memdisk /var/lib/tftpboot/
Ensuite rajoutez ces lignes (en fonction de l'architecture que vous avez choisis) dans le fichier /var/lib/tftpboot/pxelinux.cfg/default :
LABEL x64 - OpenBSD 4.1 kernel memdisk append initrd=x64/openbsd-installer/floppy41.fs -- LABEL x86 - OpenBSD 4.1 kernel memdisk append initrd=x86/openbsd-installer/floppy41.fs --
5.4 Red Hat
Red Hat est un peu spéciale car il va falloir créer un DVD, puis le copier pour y insérer le kernel. Nous allons ici faire la version 32 et 64 bits :
mkdir -p redhat-installer/{x64,x86}
Créez le DVD, puis nous allons le copier dans le bon dossier suivant votre version (32 ou 64 bits).
Pour la version 32 bits :
cd redhat-installer/x86 cp -Rf votre_dvd/* votre_dvd/.* .
Pour la version 64 bits :
cd redhat-installer/x64 cp -Rf votre_dvd/* votre_dvd/.* .
Ensuite rajoutez ces lignes (en fonction de l'architechture que vous avez choisis) dans le fichier /var/lib/tftpboot/pxelinux.cfg/default :
LABEL x64 - Red Hat kernel os-installer/redhat-installer/x86/linux append vga=791 priority=low initrd=os-installer/redhat-installer/x86/initrd.gz -- LABEL x86 - Red Hat kernel os-installer/redhat-installer/x64/linux append vga=791 priority=low initrd=os-installer/redhat-installer/x64/initrd.gz --
- vga=791 : charge la résolution 1024*768
6 Protection par mot de passe
L’archive SYSLINUX contient un executable nommé sha1pass (c’est un script Perl) qui génère les mot de passe au bon format. Pour l’utiliser sous Debian il faut le module Perl qui va bien :
apt-get install libdigest-sha1-perl
Ensuite on execute la commande avec le mot de passe en paramètre et il nous donne la chaine à coller dans le fichier de configuration. Par exemple pour proteger Ghost :
LABEL ghost MENU LABEL Ghost MENU PASSWD $4$jfoBirJg$rSDbzznCZtmJAES9RH/lC92/3Rs$ kernel memdisk append initrd=ghost/ghost288.IMA
7 Ressources
Documentation TFTP sur Ubuntu
Documentation TFTP sur Debian
Démarrez sans disque avec PXE, Grub et NFS
Configuration et installation de la Soekris (PXE OpenBSD)
Booter des BSD avec PXElinux
Mise en place d'un PXE et ses résolution de ses problèmes