PXE Obsolete
Le contenu de ce document a été validé. Vous pouvez suivre ses indications sans inquiétude.
Attention: Cependant, si au cours de vos manipulations un problème survenait, vous ne pouvez en aucun cas incriminer ce site. Posez vos questions sur le forum.
Installation par le réseau - Boot PXE
Cet article propose de vous expliquer l’installation et la configuration d'un serveur PXE sur votre Debian.
Le démarrage PXE (Pre-boot eXecution Environment) permet à une station de travail de démarrer depuis le réseau en récupérant une image de système d'exploitation qui se trouve sur votre serveur (Pour commencer: Debian Netinstall, PXEKnife, SysterescuCD, HDT, Knoppix et d'autres à venir)
Installation
# aptitude install openbsd-inetd tftpd-hpa dhcp3-server lftp pxe syslinux
Vous aurez certainement une erreur au démarrage de dhcp3-server. C'est normal, il n'est pas encore configuré !
Le serveur dhcp est obligatoire, même si vous prévoyez d'utiliser un autre dhcp déjà présent sur votre réseau. Auquel cas il faudra l'enlever immédiatement - ce serait bête d'avoir deux dhcp sur votre réseau ;-)
# aptitude remove --purge dhcp3-server
Pensez à activer le daemon de tftpd-hpa. Le fichier /etc/default/tftpd-hpa doit ressembler à ceci :
#Defaults for tftpd-hpa RUN_DAEMON="yes" OPTIONS="-l -s /var/lib/tftpboot"
Après l'installation, une petite vérification... tftp tourne-t-il bien ?
# netstat -uap | grep tftp udp 0 0 *:tftp *:* 8308/inetd
Si vous avez une erreur (ou pas de réponse) à la commande ci-dessus (à lancer en root !) inutile d'aller plus loin, le "tftp" ne tourne pas...
Configuration
PXE
Copie des fichiers dont nous aurons besoin pour le PXE :
Du répertoire /usr/lib/syslinux
- chain.c32
- mboot.c32
- menu.c32
- pxelinux.0
- reboot.c32
- gpxelinux.0
- memdisk
- vesamenu.c32
Vers /var/lib/tftpboot
cp /usr/lib/syslinux/chain.c32 /var/lib/tftpboot/ etc...
Un seul fichier de configuration pour pxe : /etc/pxe.conf Modifiez l'interface et l'adresse IP pour que ça colle à votre configuration. Je n'ai pas touché au reste :
# which interface to use interface=eth0 default_address=192.168.0.1
DHCP
DHCP est un protocole qui permet d'attribuer dynamiquement une adresse IP à un système informatique qui se connecte au réseau.
Je ne vous expliquerais pas ici comment configurer un serveur dhcp ce n'est pas le but... Quelques paramètres importants : L'adresse réseau avec le netmask approprié; Un intervalle d'adresses disponibles; La durée des "baux".
Sauvegarde préalable à toute modification :
# cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf_orig[/code]
Pour un serveur déja configuré, il suffit d'ajouter les 2 lignes suivantes :
filename "gpxelinux.0"; next-server 192.168.0.1;
Vous avez le choix entre deux amorces : pxelinux.0 ou gpxelinux.0 J'ai choisi gpxelinux.0 qui est plus complète et offre la possibilité d'entrer quelques commandes avant le menu du PXE. A vous de choisir.
Le premier fichier "gpxelinux.0" est l'amorce réseau. "next-server" est l'adresse où la machine qui demande à booter va chercher le pxelinux.O; Rien ne vous empêche de mettre le serveur PXE sur une machine différente de votre DHCP, il suffit de le préciser.
# nano /etc/dhcp3/dhcpd.conf
# Private Network subnet 192.168.0.0 netmask 255.255.255.0 { filename "gpxelinux.0"; next-server 192.168.0.1; deny unknown-clients; option ntp-servers 192.168.0.1; option time-servers 192.168.0.1; option domain-name-servers 195.99.65.220 , 195.99.66.220; option domain-name "isalo.org"; option broadcast-address 192.168.0.255; option subnet-mask 255.255.255.0; option routers 192.168.0.1; pool { deny unknown-clients; range 192.168.0.2 192.168.0.104; } [...] bla-bla
Vous remarquerez l'option "deny unknown-clients;". Supprimez pour commencer si vous n'avez pas déclaré vos clients "connus" comme ceci :
# debianne host debianne.beronono.com { hardware ethernet 00:0d:61:94:43:f0; fixed-address 192.168.0.5; }
Netboot Debian
Vous trouverez toutes les images nécessaires ICI
Récupérez les "netboot" des distributions qui vous intéressent :
wget http://ftp.fr.debian.org/debian/dists/oldstable/main/installer-i386/current/images/netboot/netboot.tar.gz wget http://ftp.fr.debian.org/debian/dists/oldstable/main/installer-amd64/current/images/netboot/netboot.tar.gz etc...
Le répertoire par défaut de tftp (créé à l'installation) est /var/lib/tftpboot c'est là que doivent aller tous les fichiers concernant vos images réseau et le menu de démarrage.
Créer les répertoires et sous-répertoires qui vont accueillir vos images netboot
# mkdir /var/lib/tftpboot/images # mkdir /var/lib/tftpboot/images/debian # mkdir /var/lib/tftpboot/images/debian/old-stable # mkdir /var/lib/tftpboot/images/debian/old-stable/i386 # mkdir /var/lib/tftpboot/images/debian/old-stable/amd64[/code]
etc...
Décompressez les répertoires amd64 ou i386 qui se trouvent dans les archives netboot.tar.gz vers /var/lib/tftpboot/images/debian/old-stable ou stable, testing, unstable...
Créez et configurez le fichier "/pxelinux.cfg/default"
# mkdir /var/lib/tftpboot/pxelinux.cfg/
Création du fichier default (c'est lui qui contient les informations sur vos différentes netboot)
# nano /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32 prompt 0 noescape 1 timeout 300 label 1 MENU LABEL Etch i386 kernel images/debian/old-stable/i386/linux append vga=normal initrd=images/debian/old-stable/i386/initrd.gz ramdisk_size=9424 root=/dev/rd/0 devfs=mount,dall rw -- label 2 MENU LABEL Etch amd64 kernel images/debian/old-stable/amd64/linux append vga=normal initrd=images/debian/old-stable/amd64/initrd.gz ramdisk_size=9424 root=/dev/rd/0 devfs=mount,dall rw -- label 3 MENU LABEL Lenny i386 kernel images/debian/stable/i386/linux append vga=normal initrd=images/debian/stable/i386/initrd.gz ramdisk_size=9424 root=/dev/rd/0 devfs=mount,dall rw -- label 4 MENU LABEL Lenny amd64 kernel images/debian/stable/amd64/linux append vga=normal initrd=images/debian/stable/amd64/initrd.gz ramdisk_size=9424 root=/dev/rd/0 devfs=mount,dall rw -- label 5 MENU LABEL Squeeze i386 kernel images/debian/testing/i386/linux append vga=normal initrd=images/debian/testing/i386/initrd.gz ramdisk_size=9424 root=/dev/rd/0 devfs=mount,dall rw -- label 7 MENU LABEL Unstable i386 kernel images/debian/unstable/i386/linux append vga=normal initrd=images/debian/unstable/i386/initrd.gz ramdisk_size=9424 root=/dev/rd/0 devfs=mount,dall rw -- label 8 MENU LABEL Unstable amd64 kernel images/debian/unstable/amd64/linux append vga=normal initrd=images/debian/unstable/amd64/initrd.gz ramdisk_size=9424 root=/dev/rd/0 devfs=mount,dall rw --
Le menu ci-dessus nous donnera le résultat suivant :
C'est déjà pas mal, mais nous pouvons l'améliorer...
Avant de poursuivre, et pour ne pas être noyés sous les entrées, nous allons améliorer un peu le menu...
Commençons pas renommer le menu /var/lib/tftpboot/pxelinux.cfg/default en /var/lib/tftpboot/debian.conf
Editons le fichier /var/lib/tftpboot/pxelinux.cfg/default pour y mettre ceci (Explication dessous)
default vesamenu.c32 prompt 0 kbdmap french.kbd noescape 1 timeout 300 label bootlocal menu default menu label Local boot localboot 0 # Vers le sous-menu Debian netboot label DebianNetboot menu label Debian Netboot ---> kernel menu.c32 append debian.conf label reboot menu label Reboot kernel reboot.c32
Ce menu nous donne les avantages suivants : Clavier en Français en cas d'édition du menu; Meilleur rendu; Possibilité de booter sur le premier disque dur (par défaut); Ouvrir un sous-menu (ici vers debian.conf); Rebooter la machine.
Nous ajouterons l'entrée suivante au sous-menu /var/lib/tftpboot/debian.conf qui nous permettra de revenir au menu principal :
# Retour au menu principal label rootmenu MENU LABEL <---- Menu principal kernel vesamenu.c32 append /pxelinux.cfg/default
Vous avez la base, tout ceci est paramétrable à l'infini...
http://thefredsite.free.fr/linux.php?id=56
Le fichier french.kbd provient de Knoppix
Ajouter cette entrée dans le fichier /var/lib/tftpboot/pxelinux.cfg/default
KBDMAP french.kbd
RescueSystemCd
- Obtenir la dernière image iso ici : http://sourceforge.net/projects/systemr ... x86/1.3.1/
- Monter l'image iso
- Créer le répertoire qui va recevoir les fichiers nécessaires
mkdir /var/lib/tftpboot/images/systemrescue
4) Copier les fichiers nécessaires (initram.igz, rescuecd, sysrcd.dat, sysrcd.md5)
/var/lib/tftpboot/images/systemrescue vdir total 214072 -r-xr-xr-x 1 laurent root 13392987 oct 4 15:58 initram.igz -r-xr-xr-x 1 laurent root 3842224 oct 4 15:47 rescuecd -r-xr-xr-x 1 laurent root 201736192 oct 4 15:57 sysrcd.dat -r-xr-xr-x 1 laurent root 45 oct 4 15:58 sysrcd.md5
5) Ajouter au menu de démarrage les lignes suivantes (nano /var/lib/tftpboot/pxelinux.cfg) - En changeant l'IP en fonction de votre configuration évidemment...
label systemrescue menu label System Rescue kernel images/systemrescue/isolinux/rescuecd append setkmap=us netboot=tftp://192.168.0.17/images/systemrescue/sysrcd.dat initrd images/systemrescue/isolinux/initram.igz
pxeknife
Petit utilitaire très complet, à télécharger ici : http://pxeknife.erebor.org/
La dernière version (ce 2 août 2010) http://pxeknife.erebor.org/releases/pxeknife-0.0.2.tar.gz
Afin de na pas avoir à refaire les 19 fichiers de "conf" pour refléter votre installation, décompressez l'archive dans /var/lib/tftpboot/pxeknife...
Ajoutez cette entrée à /var/lib/tftpboot/pxelinux.cfg/default
#load pxe knife LABEL pxeknife MENU LABEL PXE Knife ---> kernel menu.c32 append pxeknife/pxeknife.conf
Super Grub Disk !!!
Je vous laisse découvrir l'intégralité des menus pas vous-même ^^
hdt
Un autre utilitaire très intéressant : http://www.hdt-project.org/wiki.
HDT (Hardware Detection Tool) est un utilitaire de détection du matériel
Téléchargement de la dernière image
$ wget http://www.hdt-project.org/raw-attachment/wiki/hdt-0.3.6/hdt-0.3.6.img
Il suffit de copier l'image dans le répertoire /var/lib/tftpboot/images Et d'ajouter les lignes suivantes à notre menu (default)
label hdt menu label Hardware Detection Tool Floppy kernel memdisk initrd images/hdt-0.3.6.img
Une option "reboot" et démarrage sur le disque dur
Pour démarrer sur le premier disque dur, ajoutez en début de menu :
label bootlocal MENU DEFAULT MENU LABEL Local Boot localboot 0
Pour avoir la possibilité de redémarrer, ajoutez en fin de menu :
label reboot menu label Reboot kernel reboot.c32
Knoppix 511 et 620
Pour utiliser les images ISO de Knoppix, nous allons avoir besoin d'un serveur NFS :
# apt-get install nfs-kernel-server
Pour autoriser notre réseau à utiliser le serveur NFS, ajoutons la ligne suivante au fichier /etc/hosts.allow
mountd: 192.168.0.
Créez les répertoires qui vont accueillir les CD
# mkdir /mnt/sdb1/knoppix511 # mkdir /mnt/sdb1/knoppix620
Montez les CD et copiez leur contenu dans les répertoires que vous venez de créer
Récuperer les fichiers "amorce"
- Démarrez sur votre CD/ISO knoppix.
- Ouvrez une console, et tapez
netcardconfig
Une boite de dialogue s'ouvre, répondez : - obtain address automatically
Puis Code: knoppix-terminalserver
Une nouvelle boite de dialogue s'ouvre, répondez : - ok - setup configure and restart - Laissez le "range" d'adresse proposées - Il vous propose ensuite une liste de drivers de cartes réseau. Choisissez celles qui conviennent à votre réseau (ou toutes, ce que j'ai fait par prudence...) - décochez "secure: Disable root access on client" - ça peut vous servir, et il semblerait que ça pose des problèmes si c'est laissé coché... - Laissez vide à la question suivante à moins que vous ne connaissiez exactement les paramètres vidéo de vos clients... - The Knoppix-terminal server will now be started = YES
Cela va démarrer un certain nombre de services réseaux, dont tftp... Et créer les fichier dont nous avons besoin pour notre PXE... Récupérez les fichiers suivants qui se trouvent dans le répertoire /tftpboot/ de votre Knoppix : miniroot.gz et vmlinuz
Vous copierez ces fichiers dans les répertoires que vous allez créer /var/lib/tftpboot/images/knoppix/511 et 620
Donc vous devriez avoir ceci dans chaque répertoire
miniroot.gz, vmlinuz
Ajoutez les partages NFS au fichier /etc/exports (en lecture seule...)
/mnt/sdb1/knoppix511 *(ro,no_subtree_check,no_root_squash) /mnt/sdb1/knoppix620 *(ro,no_subtree_check,no_root_squash)
Redémarrez le serveur NFS
# /etc/init.d/nfs-kernel-server restart
Ajoutez les entrées dans votre menu "default" :
label Knoppix511 MENU LABEL Knoppix 5.1.1 kernel images/knoppix/511/vmlinuz append nfsdir=192.168.0.17:/mnt/sdb1/knoppix511 nodhcp lang=fr ramdisk_size=100000 init=/etc/init apm=power-off nomce vga=normal initrd=images/knoppix/511/miniroot.gz quiet BOOT_IMAGE=knoppix label Knoppix620 MENU LABEL Knoppix 6.2.0 kernel images/knoppix/620/vmlinuz append nfsdir=192.168.0.17:/mnt/sdb1/knoppix620 nodhcp lang=fr ramdisk_size=100000 init=/etc/init apm=power-off nomce vga=normal initrd=images/knoppix/620/miniroot.gz quiet BOOT_IMAGE=knoppix
D'autres entrées...
Test...
Activez le démarrage à partir du réseau dans le bios (pensez à le désactiver une fois l'installation terminée...)
Tout ceci (les menus, les images amorçables...) sont paramétrables à l'infini, à vous de jouer !
Problèmes connus
tftpd-hpa et l'IPv6
Si vous avez desactivé l'IPv6 dans votre kernel, tftpd-hpa qui est compilé pour démarrer sur IPv4 et IPv6 ne démarrera pas. Solution: re-configurer tftpd-hpa pour qu'il ne démarre que sur IPv4:
# dpkg-reconfigure tftpd-hpa
PXE ne s'arrête pas convenablement
Dans la version pxe/1.4.2-7 un bug "normal" subsiste (moi je le considère plutôt comme important, mais ce n'est pas moi qui décide...) : Quand on l'arrête, PXE tourne en boucle à l'infini en attendant que le fichier pid disparaisse
Contournement: Modifier le fichier /etc/init.d/pxe tel que:
Remplacer ceci:
wait_no_pid() { while [ -e "$PID" ] do sleep 1 done }
Par cela:
wait_no_pid() { local pid=$(cat "${PID}" 2>/dev/null) || return 0 local exe=$(readlink "/proc/${pid}/exe" 2>/dev/null) || : while [ "${exe}" = "${DAEMON}" ] do sleep 1 pid=$(cat "${PID}" 2>/dev/null) || return 0 exe=$(readlink "/proc/${pid}/exe" 2>/dev/null) || : done rm -f "${PID}" }
Lol 3 août 2010 à 03:46 (UTC)
Mots cléf : Debian PXE Netboot SystemRescueCd pxeknife HDT Knoppix