Par yttrium.
PXE signifie en anglais Pre-boot eXecution Environment soit en français environnement d'exécution de pré-amorçage. C'est un protocole propriétaire qui a été crée par IBM et fait partie de la norme WfM (Wired for Management) développée par Intel. La majorité des sociétés incluent la prise en charge de ce protocole dans leurs cartes réseau et dans le BIOS de leur carte mère.
La carte réseau possède une PROM (Programmable Read Only Memory) sur laquelle la machine va démarrer. Cette PROM contient des instructions qui permettent d'exécuter une image de système d'exploitation placée sur un serveur. Cela permet notamment à la machine qui a démarré en PXE d'installer sur son disque dur le système d'exploitation qu'elle a reçu par le réseau
Il faut au préalable configurer le BIOS pour activer la fonctionnalité de démarrage par PXE en priorité, c'est à dire, avant le démarrage par boot du disque dur ou par un autre média.
Le boot par PXE s'articule en plusieurs étapes exécutées par la PROM de la carte réseau :
Du côté client, il vous faut :
Du côté serveur, il vous faut (tout est inclus dans votre distribution Slackware) :
Dans ce tutoriel, nous allons apprendre à configurer un serveur DHCP, TFTP et NFS sur une Slackware 12.0.
Je vais utiliser une configuration réseau propre à l'objectif de ce tutoriel. Il sera nécessaire de modifier de votre côté les valeurs présentées ici afin que cela fonctionne chez vous.
Je vais utiliser la plage réseau 192.168.16.0 à 192.168.16.254 avec un masque 255.255.255.0 que l'on pourra noter 192.168.16.0/24.
Le serveur réseau portera l'adresse IP 192.168.16.1 et la passerelle sera également notre serveur.
Le service DHCP attribuera des adresses sur la plage 192.168.16.5 à 192.168.16.20.
Le nom de domaine sera example.net.
Le serveur héberge tous les services pré-cités ainsi que BIND, le serveur de noms de domaines.
La racine du répertoire contenant les paquets Slackware est stockée sur /usr/local/Slackware12.0
.
La racine du répertoire contenant les fichiers de boot pour le serveur TFTP est située sur /tftpboot/Slackware12.0
.
Vous utilisez probablement un serveur DHCP basique placé sur votre routeur internet, il est nécessaire de le désactiver pour que vous puissiez utiliser celui de Slackware qui inclus beaucoup plus de fonctionnalités.
Votre distribution Slackware inclut le paquet ISC DHCP appelé également démon dhcpd
.
Afin de pouvoir monter un serveur PXE bien configuré, il est nécessaire de travailler sur le fichier /etc/dhcpd.conf
qui permet de définir de manière très fine les actions à exécuter auprès des clients de votre réseau.
Par défaut, il n'est pas possible d'allouer automatiquement un démarrage par le réseau, et heureusement, parce que n'importe quel ordinateur pourrait exécuter l'installation de Slackware !!
Dans le fichier de configuration /etc/dhcpd.conf
, nous allons ajouter une section globale dans laquelle on pourra définir quels sont les ordinateurs qui pourront démarrer par le réseau.
Typiquement, dans la section globale, on rajoutera ce type de lignes pour chaque hôte habilité à booter par le réseau :
host torngat { hardware ethernet 00:15:56:D8:80:B5; fixed-address 192.168.16.21; }
Dans la section hôte torngat, on définit un ordinateur client du même nom, son adresse MAC est 00:15:56:D8:80:B5
et nous lui assignons automatiquement l'adresse IP 192.168.16.21
.
Les sections hôtes sont regroupées dans la section globale suivante :
group { # boot PXE allow bootp; next-server 192.168.16.1; use-host-decl-names on; if substring (option vendor-class-identifier, 0, 9) = "PXEClient" { filename "/Slackware12.0/pxelinux.0"; } host A { #code } host Z { #code } }
Le code ci-dessus permet au serveur DHCP d'identifier les clients qui ont besoin de booter par le réseau en utilisant PXE. Il est alors en mesure de leur distribuer le fichier de boot PXElinux stocké dans /Slackware12.0/pxelinux.0
. Le fonctionnement du fichier de boot est expliqué plus loin dans ce tutoriel.
Le paramètre next-server contient l'adresse IP du serveur TFTP. La plupart du temps, le serveur TFTP et le serveur DHCP sont installés sur la même machine. Il est très important de définir l'adresse du serveur TFTP sur Slackware 12.0, que celui-ci soit sur la même machine ou non, sinon l'adresse IP retournée sera vide et interdira au client PXE de récupérer le fichier de démarrage puisqu'il n'aura pas connaissance de l'adresse IP correcte !
Le paramètre use-host-decl-names on;
dit que pour chaque client définit dans la section globale, le nom d'hôte attribué deviendra son nom d'hôte sur le réseau. Pour être plus clair, voici un exemple concret du paramètre use-host-decl-names
:
group { use-host-decl-names on; host tsointsoin { hardware-ethernet 05:01:30:4c:28:45; fixed-address 192.168.16.5; } }
Le code ci-dessus correspond à :
host tsointsoin { hardware-ethernet 05:01:30:4c:28:45; fixed-address 192.168.16.5; option host-name "tsointsoin"; }
Astuce pour trouver une adresse MAC rapidement
Pour trouver rapidement une adresse MAC, il suffit d'envoyer un ping
à une machine puis de lancer la commande arp
:
ping 192.168.16.3 arp
Voici ce qui est affiché lorsque l'on lance la commande arp
:
Address HWtype HWaddress Flags Mask Iface win98.example.net ether 00:12:C5:04:43:9E C eth0
Il suffit alors de récupérer le champ HWaddress manuellement ou par un script pour compléter le fichier /etc/dhcpd.conf
.
Le daemon tftpd
est géré par inetd
. Il faut décommenter la ligne tftpd
dans le fichier /etc/inetd.conf
:
tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot -r blksize
Il faut ensuite demander au démon inetd
de recharger le fichier de configuration en lui envoyant le signal HUP
avec la commande sudo
:
sudo killall -HUP inetd
Si sudo
n'est pas configuré sur votre ordinateur, il faut vous connecter en tant que root
dans un terminal :
$ su # killall -HUP inetd
Il est nécessaire ensuite de créer le répertoire tftpboot
à la racine du système :
sudo mkdir /tftpboot
Ce répertoire est la racine d'un chroot
qui est exécuté par le paramètre -s /tftpboot
dans le fichier /etc/inetd.conf
. Pour information, un chroot
est un bac à sable dans lequel est exécuté un processus, mais attention c'est un genre de vserver énormément moins sécurisé.
Le daemon tftpd
est configuré et opérationnel, il faut maintenant peupler le répertoire /tftpboot
, ce que j'expliquerai plus loin dans le tutoriel.
Si ce n'est pas déjà fait, pour que NFS puisse fonctionner il faut installer sur votre Slackware 12.0 les paquets nfs-utils-1.1.0-i486-2.tgz
et portmap-6.0-i486-1.tgz
. Il faut ensuite configurer les fichiers /etc/exports
, /etc/hosts.deny
et /etc/hosts.allow
.
Le fichier /etc/exports
est structuré comme ceci :
nom_du_dossier_partagé hôte(options)
nom_du_dossier_partagé
correspond au chemin du dossier partagé.
hôte
correspond à l'hôte qui peut accéder au partage, il peut être défini de plusieurs manières :
192.168.16.21
pour notre exemple) ;/etc/hosts
ou dans le serveur DNS) (torngat.example.net
pour notre exemple) ;*.example.net
pour notre exemple) ;192.168.16.0/24
pour
notre exemple).Les options correspondent aux options de partage, voici les plus importantes :
rw
: permet la lecture et l'écriture sur le partage défini ;sync
: permet de demander au serveur de respecter le protocole NFS ;root_squash
: force l'identité de l'utilisateur root
vers l'utilisateur anonyme (option définie par défaut) ;no_root_squash
: le serveur n'effectue pas de transfert d'identité ;all_squash
: force l'identité de tous les utilisateurs vers l'utilisateur anonyme ;anonuid,anongid
: indique au serveur l'UID et le GID utilisé pour l'utilisateur anonyme.A noter : l'utilisateur anonyme s'appelle nobody
et porte l'UID et le GID 99 par défaut.
Voici un exemple de fichier /etc/exports
qui donne accès à notre client aux paquets Slackware :
# See exports(5) for a description. # This file contains a list of all directories exported to other computers. # It is used by rpc.nfsd and rpc.mountd. /usr/local/Slackware12.0 192.168.16.0/24(ro,all_squash,anonuid=5000,anongid=5000,sync)
ATTENTION : Le répertoire /usr/local/Slackware12.0
doit être le mirroir du site officiel pour que l'installation de Slackware puisse se faire correctement.
Nous allons configurer le fichier /etc/hosts.deny
pour interdir par défaut l'utilisation à tout le monde de NFS :
# # hosts.deny This file describes the names of the hosts which are # *not* allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # # Version: @(#)/etc/hosts.deny 1.00 05/28/93 # # Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org # # portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL # End of hosts.deny.
Nous allons configurer le fichier /etc/hosts.allow pour autoriser l'utilisation de NFS sur notre réseau :
# # hosts.allow This file describes the names of the hosts which are # allowed to use the local INET services, as decided by # the '/usr/sbin/tcpd' server. # # Version: @(#)/etc/hosts.allow 1.00 05/28/93 # # Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org # # portmap:192.168.16.0/24 lockd:192.168.16.0/24 mountd:192.168.16.0/24 rquotad:192.168.16.0/24 statd:192.168.16.0/24 # End of hosts.allow.
On rend exécutable le script de démarrage de NFS pour le système seulement par la commande suivante :
chmod 700 /etc/rc.d/rc.nfsd
On lance le démon nfsd
en root :
/etc/rc.d/rc.nfsd start
Pour aller plus loin dans la configuration de NFS, je vous invite à vous rendre sur le linux NFS-HOWTO officiel.
PXELinux est comparable au bootloader isolinux de Slackware qui est utilisé par le CD-ROM d'installation de Slackware 12.0. Nous allons utiliser le fichier de configuration isolinux.cfg
ainsi que le fichier image initrd.img
qui sont utilisés pour créer le CD-ROM de Slackware et nous allons les transformer pour les rendre utilisables par un pxelinux bootable.
Le fichier /Slackware12.0/pxelinux.0
est distribué par le serveur DHCP aux ordinateurs clients qui sont configurés pour booter sur le réseau. Ce fichier contient le code exécutable qui télécharge et installe un noyau linux puis télécharge et extrait le système de fichiers contenant le programme d'installation et de configuration de la Slackware 12.
Le fichier /Slackware12.0/pxelinux.0
est un chemin relatif assigné au serveur TFTP. Le client PXE va utiliser le protocole TFTP pour charger en mémoire ce fichier de démarrage. Nous allons donc créer le répertoire Slackware12.0
et copier les fichiers requit à l'intérieur de celui-ci :
mkdir /tftpboot/Slackware12.0 mkdir /tftpboot/Slackware12.0/pxelinux.cfg cp /usr/lib/syslinux/pxelinux.0 /tftpboot/Slackware12.0/
Nous allons aussi avoir besoin des fichiers provenant du CD-ROM qui affichent des informations à l'écran lors du démarrage de l'installation. Ces fichiers doivent normalement être présents dans votre mirroir /usr/local/Slackware12.0 :
cp /usr/local/Slackware12.0/isolinux/message.txt /tftpboot/Slackware12.0/ cp /usr/local/Slackware12.0/isolinux/f2.txt /tftpboot/Slackware12.0/
Nous allons également avoir besoin des noyaux que vous pourrez choisir lors du démarrage de l'installation :
cp -a /usr/local/Slackware12.0/kernels/ /tftpboot/Slackware12.0/
L'installation habituelle de Slackware depuis un serveur NFS, consiste à démarrer depuis le CD-ROM, de choisir le pilote approprié pour la carte réseau avant de pouvoir lancer l'installation des paquets via le serveur NFS.
Dans notre cas, il n'y a pas de CD-ROM puisque nous démarrons par le réseau. Nous allons donc installer tous les pilotes dont nous avons besoin dans le système de fichiers que le fichier de démarrage PXElinux téléchargera depuis le serveur TFTP.
Nous allons créer le fichier initrd.img
depuis le mirroir /usr/local/Slackware12.0
contenant tous les fichiers indispensables.
On crée un répertoire temporaire de travail :
mkdir -p /tmp/img
On extrait l'image contenant le système de fichiers depuis le fichier compressé initrd.img
:
gunzip -cd /usr/local/Slackware12.0/isolinux/initrd.img > /tmp/img/initrd.dsk
On monte l'initrd sur le loopback
dans notre répertoire temporaire :
cd /tmp/img mkdir initrd mount -o loop,ro initrd.dsk initrd/
On monte le pcmcia et le network sur le loopack
dans notre répertoire temporaire :
mkdir pcmcia mount -o loop,ro /usr/local/Slackware12.0/isolinux/pcmcia.dsk pcmcia/ mkdir network mount -o loop,ro /usr/local/Slackware12.0/isolinux/network.dsk network/
On va utiliser la commande dd
pour créer un fichier suffisamment grand appelé newinitrd
. Ce fichier est destiné à recevoir un système de fichiers qui contient l'image de Slackware que nous venons de monter en loopback
. On va créer un fichier d'une taille de 30Mo composé de blocs de 1Ko :
dd if=/dev/zero of=/tmp/img/newinitrd bs=1k count=30000
En ajoutant la taille des fichiers initrd.dsk
, network.dsk
et pcmcia.dsk
, on obtient la somme de 29840Ko soit 29Mo, j'ai donc arrondi à la taille au-dessus pour être sûr que notre fichier soit assez grand pour contenir les données. On va créer un système de fichiers à l'intérieur de ce newinitrd
en indiquant à mkfs
que ce n'est pas un périphérique de type bloc et on va demander à fsck
de ne jamais contrôler ce système de fichiers :
mkfs.ext2 -m 0 -F /tmp/img/newinitrd tune2fs -i 0 /tmp/img/newinitrd
On va maintenant monter ce système de fichiers sur le loobpack
:
mkdir -p /tmp/img/up/ mount -o loop /tmp/img/newinitrd /tmp/img/up/
On va copier l'intégralité des trois disques Slackware dans le nouveau fichier :
cp -a /tmp/img/initrd/* /tmp/img/up/ cp -a /tmp/img/network/* /tmp/img/up/ cp -a /tmp/img/pcmcia/* /tmp/img/up/
On va créer un fichier script appelé network
qui servira à lancer le script de détection de cartes réseaux :
vi network
Voici le code à recopier en intégralité dans le fichier network
:
#!/bin/sh # This script configures support for ethernet cards needed during # installation for an NFS install. # # Normally this automatically loads an image from the ISO, and if # it cannot be found tries to load a floppy disk. # # You may also give a path to the network.dsk image, like this: # network /some/exact/path/network.dsk # echo echo "Network support for NFS install, 23-Sep-2004 volkerdi@slackware.com" echo # Now, let's call the network.sh script to actually do most of the work: if [ -r /scripts/network.sh ]; then sh /scripts/network.sh fi echo echo "The next step in your installation may be partitioning your hard drive" echo "(if you're installing to a Linux partition) with 'fdisk' or 'cfdisk'" echo "(the menu-driven version of fdisk). If you already have a partition" echo "prepared for Linux, run 'setup' to start the installer program." echo
On copie le fichier network dans le nouveau système de fichiers :
cat network > /tmp/img/up/bin/network
On va créer un fichier script appelé pcmcia
qui servira à initialiser votre carte pcmcia si nécessaire :
vi pcmcia
Voici le code à recopier en intégralité dans le fichier pcmcia
:
#!/bin/sh # This script configures support for PCMCIA and/or Cardbus cards needed during # installation, such as a CD-ROM drive or an ethernet card used for an NFS # install. echo echo "PCMCIA/Cardbus support script, 2003-02-18 volkerdi@slackware.com" echo # OK, here goes nothing: /scripts/rc.pcmcia start echo echo echo "The PCMCIA/Cardbus subsystem is now installed. Please make sure that" echo "all of the cards you'll need for the installation are in the machine." echo "If you still need to insert any PCMCIA/Cardbus cards, do that now. Once" echo "the drive stops (indicating that all needed modules have been" echo -n "loaded), then press [enter] to continue." read inputjunk echo echo echo "The next step in your installation may be partitioning your hard drive" echo "(if you're installing to a Linux partition) with 'fdisk' or 'cfdisk'" echo "(the menu-driven version of fdisk). If you already have a partition" echo "prepared for Linux, run 'setup' to start the installer program." echo
On copie le fichier pcmcia
dans le nouveau système de fichiers :
cat pcmcia > /tmp/img/up/bin/pcmcia
On va créer un fichier script appelé network.sh
qui servira à détecter votre carte réseau :
vi network.sh
Voici le code à recopier en intégralité dans le fichier network.sh
:
#!/bin/sh # Remove extra whitespace crunch() { while read line ; do echo $line done } echo echo "******* Welcome to the network supplemental disk! *******" echo # main loop: while [ 0 ]; do echo "-- Press [enter] to automatically probe for all network cards, or switch" echo " to a different console and use 'modprobe' to load the modules manually." echo "-- To skip probing some modules (in case of hangs), enter them after an S:" echo " S eepro100 ne2k-pci" echo "-- To probe only certain modules, enter them after a P like this:" echo " P 3c503 3c505 3c507" echo "-- To get a list of network modules, enter an L." echo "-- To skip the automatic probe entirely, enter a Q now." echo # Clear "card found" flag: rm -f /cardfound echo -n "network> " read INPUT; echo if [ "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "L" \ -o "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "l" ]; then echo "Available network modules:" for file in /lib/modules/`uname -r`/kernel/drivers/net/* /lib/modules/`uname -r`/kernel/arch/i386/kernel/* /lib/modules/`uname -r`/kernel/drivers/pnp/* ; do if [ -r $file ]; then OUTPUT=`basename $file .gz` OUTPUT=`basename $OUTPUT .o` echo -n "$OUTPUT " fi done echo echo continue fi if [ ! "$INPUT" = "q" -a ! "$INPUT" = "Q" \ -a ! "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "P" \ -a ! "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "p" ]; then echo "Probing for PCI/EISA network cards:" for card in \ 3c59x acenic de4x5 dgrs eepro100 e1000 epic100 hp100 ne2k-pci olympic pcnet32 rcpci 8139too 8139cp sktr tulip via-rhine yellowfin tg3 dl2k ns83820 \ ; do SKIP="" if [ "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "S" \ -o "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "s" ]; then for nogood in `echo $INPUT | crunch | cut -f 2- -d ' '` ; do if [ "$card" = "$nogood" ]; then SKIP=$card fi done fi if [ "$SKIP" = "" ]; then echo "Probing for card using the $card module..." modprobe $card 2> /dev/null grep -q eth0 /proc/net/dev if [ $? = 0 ]; then echo echo "SUCCESS: found card using $card protocol -- modules loaded." echo "$card" > /cardfound echo break else modprobe -r $card 2> /dev/null fi else echo "Skipping module $card..." fi done echo if [ ! -r /cardfound ]; then # Don't probe for com20020... it loads on any machine with or without the card. echo "Probing for MCA, ISA, and other PCI network cards:" # removed because it needs an irq parameter: arlan # tainted, no autoprobe: (arcnet) com90io com90xx for card in depca ibmtr 3c501 3c503 3c505 3c507 3c509 3c515 ac3200 \ acenic at1700 cosa cs89x0 de4x5 de600 \ de620 e2100 eepro eexpress es3210 eth16i ewrk3 fmv18x forcedeth hostess_sv11 \ hp-plus hp lne390 ne3210 ni5010 ni52 ni65 sb1000 sealevel smc-ultra \ sis900 smc-ultra32 smc9194 wd ; do SKIP="" if [ "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "S" \ -o "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "s" ]; then for nogood in `echo $INPUT | crunch | cut -f 2- -d ' '` ; do if [ "$card" = "$nogood" ]; then SKIP=$card fi done fi if [ "$SKIP" = "" ]; then echo "Probing for card using the $card module..." modprobe $card 2> /dev/null grep -q eth0 /proc/net/dev if [ $? = 0 ]; then echo echo "SUCCESS: found card using $card protocol -- modules loaded." echo "$card" > /cardfound echo break else modprobe -r $card 2> /dev/null fi else echo "Skipping module $card..." fi done echo fi if [ ! -r /cardfound ]; then echo "Sorry, but no network card was detected. Some cards (like non-PCI" echo "NE2000s) must be supplied with the I/O address to use. If you have" echo "an NE2000, you can switch to another console (Alt-F2), log in, and" echo "load it with a command like this:" echo echo " modprobe ne io=0x360" echo fi elif [ "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "P" \ -o "`echo $INPUT | crunch | cut -f 1 -d ' '`" = "p" ]; then echo "Probing for a custom list of modules:" for card in `echo $INPUT | crunch | cut -f 2- -d ' '` ; do echo "Probing for card using the $card module..." modprobe $card 2> /dev/null grep -q eth0 /proc/net/dev if [ $? = 0 ]; then echo echo "SUCCESS: found card using $card protocol -- modules loaded." echo "$card" > /cardfound echo break else modprobe -r $card 2> /dev/null fi done echo else echo "Skipping automatic module probe." echo fi # end main loop break done
On copie le fichier network.sh
dans le nouveau système de fichiers :
cat network.sh > /tmp/img/up/scripts/network.sh
On va recréer les fichiers de dépendances des modules du noyau afin d'avoir un système propre :
gunzip -cd /usr/local/Slackware12.0/kernels/hugesmp.s/System.map.gz > /tmp/img/System.map rm -f /tmp/img/up/lib/modules/2.6.21.5/modules.* /sbin/depmod -a -b /tmp/img/up -F /tmp/img/System.map 2.6.21.5
On va démonter tous les fichiers images et compresser avec gzip
notre système de fichiers puis nous copierons celui-ci dans /tftpboot
avant de nettoyer le répertoire temporaire :
umount /tmp/img/initrd umount /tmp/img/network umount /tmp/img/pcmcia umount /tmp/img/up gzip -9f /tmp/img/newinitrd mv /tmp/img/newinitrd.gz /tftpboot/slackware12.0/initrd.img rm -r /tmp/img
On crée le fichier isolinux.cfg
qui lancera les noyaux placés dans le nouveau système de fichiers :
vi isolinux.cfg
Voici le code à recopier en intégralité dans le fichier isolinux.cfg :
default hugesmp.s prompt 1 timeout 1200 display message.txt F1 message.txt F2 f2.txt label huge.s kernel kernels/huge.s/bzImage append initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 rw SLACK_KERNEL=huge.s label hugesmp.s kernel kernels/hugesmp.s/bzImage append initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 rw SLACK_KERNEL=hugesmp.s label speakup.s kernel kernels/speakup.s/bzImage append initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 rw SLACK_KERNEL=speakup.s
On copie le fichier isolinux.cfg
dans le nouveau système de fichiers :
cat isolinux.cfg > /tftpboot/Slackware12.0/pxelinux.cfg/default/isolinux.cfg
Configurez un ordinateur client afin que celui-ci puisse booter sur le réseau et lancer l'installeur de Slackware 12.0.
Voici quelques informations sur l'installation de Slackware 12.0 par NFS.
Tout d'abord connectez-vous en root
, configurez vos partitions avec fdisk
ou cfdisk
, chargez un module du noyau pour votre carte réseau. Exécutez la commande network
pour détecter automatiquement votre carte réseau.
Si la carte réseau n'est pas détectée, nous n'avez malheureusement pas de chance et il vous faudra un CD-ROM de Slackware 12.0 ou un disque dur externe contenant le mirroir de Slackware 12.0.
Si votre carte réseau est détectée, vous pouvez sélectionner la boîte de dialogue SOURCE
et valider l'installation par NFS. Vous allez avoir besoin de donner à l'installeur de Slackware les paramètres réseaux suivants :
Voici ci-dessous mon propre fichier de configuration dhcpd.conf
:
# dhcpd.conf # # Configuration file for ISC dhcpd (see 'man dhcpd.conf') # authoritative; ddns-update-style ad-hoc; ignore bootp; option domain-name-servers 192.168.16.4; subnet 192.168.16.0 netmask 255.255.255.0 { option domain-name "example.net"; option broadcast-address 192.168.16.255; option subnet-mask 255.255.255.0; option routers 192.168.16.1; pool { # clients connus par leur adresse mac range 192.168.16.100 192.168.16.150; default-lease-time 604800; max-lease-time 2419200; deny unknown clients; } pool { # clients inconnus range 192.168.16.151 192.168.16.170; default-lease-time 28800; max-lease-time 86400; deny known clients; } } group { # machines non PXE option domain-name "example.net"; option broadcast-address 192.168.16.255; option subnet-mask 255.255.255.0; option routers 192.168.16.1; default-lease-time 604800; max-lease-time 2419200; host win98 { hardware ethernet 00:10:c6:04:44:9f; fixed-address 192.168.16.3; } host winXP { hardware ethernet 00:c0:9f:59:ba:d9; fixed-address 192.168.16.2; } } group { # boot PXE default-lease-time 86400; max-lease-time 172800; allow bootp; next-server 192.168.16.1; option log-servers 192.168.16.1; use-host-decl-names on; if substring (option vendor-class-identifier, 0, 9) = "PXEClient" { filename "/Slackware12.0/pxelinux.0"; } else if substring (option-vendor-class-identifier, 0, 9) = "Etherboot" { filename "/Slackware12.0/kernels/hugesmp.s/bzImage"; } host portable { hardware ethernet 00:c0:9e:58:bc:d7; fixed-address 192.168.16.6; } }
Ci-dessous un script à placer dans /etc/rc.d/
pour lancer le serveur DHCPD :
#!/bin/sh # # /etc/rc.d/rc.dhcpd # This shell script takes care of starting and stopping # the ISC DHCPD service # # Put the command line options here that you want to pass to dhcpd: DHCPD_OPTIONS="-q eth0" [ -x /usr/sbin/dhcpd ] || exit 0 [ -f /etc/dhcpd.conf ] || exit 0 start() { # Start daemons. echo -n "Starting dhcpd: /usr/sbin/dhcpd $DHCPD_OPTIONS " /usr/sbin/dhcpd $DHCPD_OPTIONS echo } stop() { # Stop daemons. echo -n "Shutting down dhcpd: " killall -TERM dhcpd echo } status() { PIDS=$(pidof dhcpd) if [ "$PIDS" == "" ]; then echo "dhcpd is not running!" else echo "dhcpd is running at pid(s) ${PIDS}." fi } restart() { stop start } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) echo "Usage: $0 {start|stop|status|restart}" ;; esac exit 0
N'oubliez pas de rajouter les lignes suivantes dans votre rc.local
pour lancer à chaque démarrage votre démon dhcpd
:
# lignes précédentes if [ -x /etc/rc.d/rc.dhcpd ]; then # Start the DHCP server: /etc/rc.d/rc.dhcpd start fi # lignes suivantes
Enfin, n'oubliez pas de rendre votre script rc.dhcpd
exécutable :
chmod 700 /etc/rc.d/rc.dhcpd
L'installation de Slackware 12.0 par PXE demande quelques efforts qui sont récompensés par la compréhension du fonctionnement.
Cela permet à l'utilisateur avancé de mieux comprendre les arcanes du système. L'installation par PXE est très souvent utilisée pour déployer des dizaines de machines. Bon amusement :)
Thèmes : #articles #installation #reseau #yttrium
Sauf indication contraire, ce document est placé sous licence CC-BY-SA 3.0.