TFTP : PXE Serveur, déploiement d'OS sous Linux

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

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 :

Configuration File /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