PXE - VirtualBox - Debian 5.0.4

Préambule

Notre projet est basé sur deux machines virtuelles installées sur VirtualBox:

  • Un Serveur Debian 5.0.4 ayant comme interface: eth0 pointant sur Internet et eth1 avec IP fixe 172.16.1.1/24 pour notre LAN.
  • Un Client sur le LAN 172.16.1.0/24 recevant une IP dynamiquement.

Notre Serveur permettra d'installer, via le réseau, et selon le choix du Client:

  • Une distribution Debian automatiser par le fichier "preseed".
  • Une distribution CentOS automatiser par le fichier "kickstart".

Nota Bene: Certains paramètres de fichier de configuration, n'étant pas nécessaire, n'ont pas été affiché volontairement.

1. Description PXE

PXE (Preboot eXecution Environnement) est un protocole propriétaire d' Intel.
Ce protocole permet de se passer de tout support de boot local sur les machines clientes afin de démarrer directement sur le réseau.
Via un serveur PXE, un client distant, peut donc installer un système d'exploitation, ainsi que des utilitaires (tel que HirenBootCd - MemTest+) à des fin de dépannage ou autres.
Un serveur PXE est nécessaire dans un grand réseau. Une de ses caractéristiques fondamentales est l'installation à distance de systèmes sans utiliser de cd ou de lecteur cd. Ceci sur autant de machines que vous voulez.
Ainsi, il est très facile de procéder aux mises à jour sans devoir passer par le processus de gravure.
Enfin, il est un gain de temps et d'argent car il ne faut acheter aucun cd ou lecteur de cd.

Côté CLIENT

Il est indispensable que le BIOS soit paramétré afin que l'on puisse démarrer la machine depuis la carte réseau.
Cette fonction, est de plus en plus présente dans les nouvelles cartes mères.
Si ce n'est pas la cas:

  • soit on flash le BIOS.
  • soit on boot via une disquette, sur laquelle on copiera une image que l'on peut trouver à cette adresse: http://rom-o-matic.net/.

Côté SERVEUR

Les outils nécessaires, pour la bonne réalisation de notre projet, sont les suivants :

  • un serveur DHCP
  • un serveur TFTP
  • un Serveur PXE
  • un serveur Apache, NFS ou FTP (notons que nous utiliserons le serveur Web Apache)
  • le paquet Syslinux (contenant les fichiers "pxelinux.0" et "menu.c32")
  • le fichier "preseed.cfg" et "ks.cfg"

2. Fonctionnement de base

Nous partons du principe que la configuration PXE fonctionne correctement :

1. Le CLIENT démarre via la PROM de la carte réseau. Cette PROM contient les premières instructions pour effectuer une requête DHCP.
2. Le SERVEUR DHCP répond en envoyant: une configuration IP, une IP du serveur TFTP, une IP du serveur PXE, ainsi que le fichier "pxelinux.0".
3. Le CLIENT possédant, maintenant, une configuration IP, peut procéder à l'exécution de "pxelinux.0" afin de récupérer, via le protocole TFTP, un menu de choix d'installation qui s'affichera à l'écran.
4. Le SERVEUR TFTP envoi ce menu et le CLIENT fait son choix d'installation parmi les options proposées.
5. Le SERVEUR TFTP répond en envoyant un noyau (kernel) et initrd (contenant des archives s'ajoutant au kernel).
6. Le CLIENT chargera ces derniers en RAM afin d'obtenir un système minimal qui permettra par la suite d'installer le système de fichier afin d'y stocker des informations et de les organiser dans des fichiers.

3. Réalisation du Projet

3.1 Au niveau CLIENT

Paramétrer le BIOS pour activer le démarrage en réseau. Cette option peut avoir des dénominations différentes selon la version du BIOS mais devrait se rapprocher de ceux-ci:

  • onboard Lan [enable]
  • Lan option Rom [enable]

Ensuite, à la mise sous tension de la machine, on utilisera la touche F12 pour un démarrage en réseau pour recevoir une IP dynamique.

3.2 Au niveau SERVEUR

3.2.1 Configuration du réseau interne

Configurer les interfaces: /etc/network/interfaces
Vérifier que la table de routage soit cohérente à l'aide de la commande: route -n

3.2.2 Installation des paquets

aptitude install dhcp3-server
aptitude install tftpd-hpa
aptitude install pxe
aptitude install syslinux
aptitude install apache2

3.2.3 Configuration du Serveur DHCP

—-> debian:/# vim /etc/dhcp3/dhcpd.conf

# This is a very basic subnet declaration.

subnet 172.16.1.0 netmask 255.255.255.0 {
  range 172.16.1.20 172.16.1.40;
  option routers 172.16.1.1;
  server-name "172.16.1.1";
  next-server 172.16.1.1;
 filename "pxelinux.0";
}

"range" pour donner au client une IP dynamiquement comprise dans une fourchette 172.16.1.[20 à 40].
"option routers" indique au Client l'IP de la passerelle par défaut.
"server-name" indique au Client l'IP du serveur PXE.
"next-server" indique au Client l'IP du serveur TFTP.
"filename" indique au Client le Path du fichier qui sera envoyé au client PXE. En réalité, le Path est: /tftpboot/pxelinux.0 même si /tftpboot n'est pas mentionné.

3.2.4 Configuration du Serveur TFTP

—-> debian:/# vim /etc/inetd.conf

tftp           dgram   udp     wait    root  /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /tftpboot

Vérifier que cette ligne est bien dé-commentée.

—-> debian:/# vim /etc/default/tftpd-hpa

#Defaults for tftpd-hpa

RUN_DAEMON="yes"
OPTIONS="-l -s /tftpboot"

Le répertoire du serveur TFTP est /tftpboot, créé à la racine, afin d'y stocker tous les fichiers qui seront envoyés sur demande via le protocole TFTP.

3.2.5 Configuration du Serveur PXE

—-> debian:/# vim /etc/pxe.conf


Nous avons assigné une IP au serveur PXE, "172.16.1.1", qui utilisera l'interface réseau "eth1" pour communiquer avec ses clients.
Nous spécifions, aussi, qu'il doit utiliser le répertoire "/tftpboot".

3.2.6 Configuration du Serveur Apache

Apache est un serveur web qui va nous permettre de mettre à disposition certains fichiers ou images d'OS.

—-> debian:/# vim /etc/apache2/ports.conf


Ce fichier indique l'IP du serveur web , ainsi les ports à écouter.

—-> vim /etc/apache2/site-enable/000-default


Ce serveur sera contacté en local via l'url http://172.16.1.1 . Cette IP nous redirigera automatiquement vers le répertoire "/var/www/pxe", comme indiqué.
Ainsi, on pourra accéder au contenu du serveur Web: tel que le fichier "preseed.cfg"", "ks.cfg", l'image de CentOS.

—-> debian:/# vim /var/www/pxe/preseed.cfg


le fichier "preseed.cfg"" permet l'automatisation de l'installation (le choix de la langue, l'heure, la date, le partitionnement, le formatage, les comptes…).
Ce fichier est conçu, particulièrement, pour les distributions Debian, Ubuntu.

—-> debian:/# vim /var/www/pxe/ks.cfg


le fichier "ks.cfg"" permet l'automatisation de l'installation, particulièrement, pour les distributions CentOS, Fedora, Redhat.
Au début de ce fichier, le Path "url —url http://172.16.1.1/ImageCentOS/" indique où aller trouver l'image de CentOS.

—-> debian:/# mount -o loop /tmp/CentOS-4.7-i386.iso /mnt/ImageCentOS

—-> debian:/# cp -a /mnt/ImageCentOS /var/www/pxe/

debian:/# cd /var/www/pxe/ImageCentOS/
debian:/var/www/pxe/ImageCentOS# ls
CentOS            GPL     isolinux           RPM-GPG-KEY        SRPMS
centosdocs-man.css  images  RELEASE-NOTES-en.html  RPM-GPG-KEY-centos4    yumgroups.xml

On monte l'image dans "/mnt/ImageCentOS" et ensuite on copie tout dans notre serveur Web.
la commande "ls", effectuée sur notre serveur Web, nous montre que la copie à bien réussi.

3.2.7 Syslinux

Syslinux est une archive qui, après installation du paquet, se trouve dans le répertoire "/usr/lib/syslinux".
Ce répertoire contient différents exécutables dont 2 seront copiés dans "/tftpboot" :

  • Un exécutable "pxelinux.0" particulièrement adapté pour le boot en réseau va permettre de lire un fichier de configuration "/tftpboot/pxelinux.cfg/default" afin d'afficher un menu de choix à l'écran.
  • Un exécutable "menu.c32" permet de réaliser un menu graphique avec des fonctions avancées telles que raccourcis clavier et déplacement avec flèche.

3.2.8 Répertoire /tftpboot

Ce répertoire est une charnière importante dans un déploiement par réseau et va contenir des exécutables, fichiers et informations nécessaire pour apporter à un Client une installation d'OS et programmes via le réseau par le protocole TFTP.
—-> debian:/#mkdir /tftpboot

—-> debian:/# cd /tftpboot

—-> debian:/tftpboot/# mkdir menu-screen linuxDebian linuxCentOS pxelinux.cfg //on crée ces 4 sous-dossier dans /tftpboot

—-> debian:/# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/menu-screen

—-> debian:/# cp /usr/lib/syslinux/menu.c32 /tftpboot/menu-screen

—-> debian:/# vim /tftpboot/pxelinux.cfg/default

include /menu-screen/menu.cfg
default /menu-screen/menu.c32
prompt 1
timeout 0

le fichier "default" sera lu, lors de l'execution de "pxelinux.0" par le Client, afin d'être redirigé vers le fichier "menu.cfg" qui contient les paramètres du Menu qui sera affiché graphiquement grâce à "menu.c32".
l'exemple ci-dessous permet, déjà, d'automatiser le début de l'installation, pour ensuite, appeler le fichier "preseed" et "kickstart" afin de la compléter automatiquement selon les besoins.

—-> debian:/# vim /tftpboot/menu-screen/menu.cfg

menu hshift 15
menu width 53
menu vshift 6
menu title PXE Test: Jaouad/Giuseppe

menu tabmsg Choisir une OPTION et Press <ENTER>
prompt 0

label bootlocal
          menu label ^Boot sur Disque Local
                       localboot 0
                       timeout 200
                       localtimeout 200

label   Debian
          menu label ^Installer Debian
                         kernel linuxDebian/linux
                         append initrd=linuxDebian/initrd.gz vga=normal ramdisk_size=32768 auto=true priority=critical languagechooser/language-name=French countrychooser/shortlist=fr_FR console-keymaps-at/keymaps=fr-latin9   ip=dhcp interface=eth1 preseed/url=http://172.16.1.1/preseed.cfg --

label CentOS
         menu label ^Installer CentOS
                         kernel CentOS/vmlinuz
                         append ksdevice=eth1 console=tty0 initrd=linuxCentOS/initrd.img ks=http://172.16.1.1/ks.cfg ramdisk_size=32768vga=normal --

           menu end

Le label bootlocal permet de démarrer sur le disque dur local.
le label Debian permet d'installer la distibution GNU/Debian.
le label CentOS permet d'installer la distibution CentOS.
  • kernel indique le Path du noyau à charger.
  • append indique le Path de ce qui doit être ajouter au noyau.

Pour Debian:
Nous avons télécharger un package, spécialement adapté pour un démarrage en réseau, disponible à l'adresse suivante:
http://ftp.debian.org/debian/dists/stable/main/installer-i386/current/images/netboot/netboot.tar.gz
On décompresse l'archive —-> "tar -xvzf netboot.tar.gz" et ensuite on copie "linux" et" initrd.gz" dans "/tftpboot/linuxDebian"
Dans le label Debian, on indique le path du fichier "preseed.cfg".
Pour CentOS:
Nous avons télécharger l'image CentOS-4.7-i387.iso
On copie "vmlinuz" et "initrd.img" dans "/tftpboot/linuxCentOS", ainsi que l'image entière dans "/var/www/pxe/ImageCentOS"
Dans le label CentOS on indique le path du fichier "ks.cfg" qui lui même contiendra le path de l'image CentOS à charger.

3.2.9 Arborescence

Voici notre arborescence Final:

/etc
   |       -inet.conf
   |       |
   |     /dhcp3
   |       |       -dhcpd.conf
   |       |
   |     /default
   |       |       -tftpd-hpa
   |       |
   |     /pxe
   |       |       -pxe.conf
   |       |
   |     /apache2
   |       |       -ports.conf
   |       |       /site-enable
   |       |                  -000.default
   |       |
/tftpboot
   |       -pxelinux.0
   |       |
   |     /menu-screen
   |       |      -menu.c32
   |       |      -menu.cfg
   |       |
   |     /pxelinux.cfg
   |       |       -default
   |       |
   |     /linuxDebian
   |       |       -linux
   |       |       -initrd.gz
   |       |
   |     /linuxCentOS
   |       |       -vmlinuz
   |       |       -initrd.img
   |       |
/var
   |     /www
   |       |     /pxe
   |       |         -preseed.cfg
   |       |         -ks.cfg
   |       |         /ImageCentos
   |       |                   -CentOS
   |       |                   -isolinux
   |       |                   -yumgroups.xml
   |       |                   -etc.....

3.2.10 Démarrage des Services

  • /etc/init.d/networking start
  • /etc/init.d/dhcp3-server start
  • /etc/init.d/tftpd-hpa start
  • /etc/init.d/pxe start
  • /etc/init.d/apache2 start

3.2.11 Vérification des Ports en écoute

Notons que nous affichons que les ports qui nous intéresse:

—-> netstat -ano | grep tcp

debian:/# netstat -ano | grep tcp    
tcp        0      0 192.168.1.4:53          0.0.0.0:*               LISTEN  
tcp        0      0 172.16.1.1:53           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN   
tcp6       0      0 :::80                   :::*                    LISTEN    
tcp6       0      0 :::53                   :::*                    LISTEN

80 = HTTP
53 = DNS (activé par défaut)

—-> netstat -ano | grep udp

debian:/# netstat -ano | grep udp                      
udp        0      0 0.0.0.0:4011            0.0.0.0:*                          
udp        0      0 172.16.1.1:4011         0.0.0.0:*                     
udp        0      0 192.168.1.4:4011        0.0.0.0:*                        
udp        0      0 127.0.0.1:4011          0.0.0.0:*                          
udp        0      0 0.0.0.0:67              0.0.0.0:*                          
udp        0      0 0.0.0.0:68              0.0.0.0:*                           
udp        0      0 0.0.0.0:69              0.0.0.0:*

4011 = PXE
67 et 68 = DHCP
69 = TFTP

4. Bibliographie

http://forum.debian-fr.org/viewtopic.php?f=8&t=23693
http://www.debian.org/releases/sarge/mipsel/apcs01.html.fr
http://www.devloprog.org/admin/2009/10/28/configurer-un-serveur-pxe-de-deploiement-de-debian-et-opensuse/#suse
http://elle.epfl.ch/Installationde-CentOS-4-par
http://linux.epfl.ch/webdav/site/linuxline/shared/import/migration/ks_cfg_rhe_epfl_1.txt

Ajouter un nouveau commentaire
ou S'identifier comme utilisateur Wikidot
(ne sera pas publiée)
- +
Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License