Installation par le réseau

De La Mouche VII
Révision datée du 30 novembre 2008 à 23:36 par Xiloynaha (discussion | contributions) (ça ira pour aujourd'hui)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche


Cette page explique comment démarrer une machine par le réseau. Ceci peut avoir plusieurs buts :

  • démarrer un système de secours sans disposer d'un CD autonome ;
  • installer un système d'exploitation sur une machine ne disposant pas d'un lecteur optique ;
  • démarrer une machine ne disposant pas d'un disque dur…

Le minimum vital de la théorie

À faire.

Matériel et logiciels nécessaires

Outre la machine à démarrer (machine cliente), vous devez disposer d'un ordinateur qui fera office de serveur, mettant à disposition les services nécessaires au client pour démarrer. Au minimum, ce serveur disposera des composants logiciels suivants :

  • serveur DHCP pour fournir une adresse IP ;
  • serveur TFTP pour fournir les fichiers nécessaires au démarrage.

Dans certains cas, un serveur NFS sera également requis.

Comme d'habitude, j'utilise une distribution GNU/Linux Debian, mais la même chose peut être faite sous d'autres distributions GNU/Linux, ou BSD.

Préliminaire : que faire si ma machine ne peut pas démarrer sur le réseau ?

À faire.

Serveur DHCP

J'utilise le serveur dhcp3 (je suppose que d'autres, comme udhcpd, fonctionneraient tout aussi bien). Installons-le :

# aptitude install dhcp3-server

Il faut ensuite modifier le fichier de configuration /etc/dhcp3/dhcpd.conf selon nos besoins. Voici un exemple commenté, adapté du fichier de configuration d'exemple (voir /usr/share/doc/dhcp3-server/examples/dhcpd.conf).

# option definitions common to all supported networks...
option domain-name "lm7.fr";
option domain-name-servers 212.27.54.252, 212.27.53.252;

default-lease-time 600;
max-lease-time 7200;

# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;

# [Non nécessaire, même si un autre serveur DHCP est présent sur le réseau :]
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# Déclaration de notre réseau local (192.168.0.0/24) :
subnet 192.168.0.0 netmask 255.255.255.0 {
	# Les attributions d'adresses ne se font que dans la plage [151-160] :
	range 192.168.0.151 192.168.0.160;

	# Adresse de la passerelle vers Internet :
	option routers 192.168.0.254;

	# Adresse de diffusion du réseau (optionnel) :
	option broadcast-address 192.168.0.255;

	# Fichier par défaut vers lequel on oriente les clients (optionnel) :
	filename "riplinux/pxelinux.0";

	# Adresse du serveur TFTP :
	next-server 192.168.0.1;

	# [Optionnel, présent dans la configuration par défaut :]
	ping-check = 1;
}


### Configurations d'hôtes spécifiques ###

# Mon système de sauvegarde (nommé "glen") :
host glen {
	# Adresse MAC de la carte réseau de la machine :
	hardware ethernet f1:23:45:67:89:0a;

	# J'accède à la machine en SSH, je veux donc une adresse fixe :
	fixed-address 192.168.0.70;

	# Fichier de démarrage :
	filename "lenny32/pxelinux.0";
}

# Machine à installer sous Debian :
host inst-debian {
	# Adresse MAC de la carte réseau de la machine :
	hardware ethernet 67:89:ab:cd:ef:45;

	# L'adresse fixée est normalement facultative, mais je préfère
	# en mettre une dans tous les cas, ça évite les trucs bizarres
	# quand il change d'adresse IP au milieu de l'installation :
	fixed-address 192.168.0.80;

	# Fichier de démarrage :
	filename "debian-etch/pxelinux.0";
}

# Machine à installer sous NetBSD :
host inst-netbsd {
	# Adresse MAC de la carte réseau de la machine :
	hardware ethernet BA:FE:A5:00:10:0D; # salon

	# Je dois spécifier à qui je partage les fichiers par NFS,
	# je suis donc (presque) obligé de fixer une adresse :
	fixed-address 192.168.0.81;

	# Fichier de démarrage :
	filename "netbsd/pxeboot_ia32.bin";

	# Adresse du serveur NFS (si différent du 'next-server' par
	# défaut spécifié plus haut) :
	#next-server 192.168.0.20;

	# Chemin du montage NFS sur le serveur :
	option root-path "/home/nfs/netbsd/";
}

Redémarrons ensuite le serveur DHCP pour prendre en compte les modifications :

# /etc/init.d/dhcp3-server restart

Serveur TFTP

J'utilise personnellement tftpd-hpa, mais il existe également en paquets dans Debian tftpd tout court, et atftpd (je n'ai essayé ni l'un ni l'autre).

# aptitude install tftpd-hpa

Il n'y a pas grand chose à configurer, mais deux solutions s'offrent à nous pour le lancement du serveur TFTP :

  1. soit le faire s'exécuter en tant que démon, ce qui est plus rapide en cas de clients nombreux (ce qui n'est pas mon cas), mais qui prend un (tout petit) peu plus de mémoire vive ; ça a l'avantage de permettre de ne démarrer le service que quand on veut l'utiliser ;
  2. soit passer par inetd, ce qui a l'avantage d'être simple et de ne pas laisser trainer un démon en mémoire.

Dans les deux cas, il faudra ensuite déployer les fichiers nécessaires au démarrage du ou des systèmes voulus.

Solution 1 : démon

Pour la solution 1, il faut éditer le fichier /etc/default/tftpd-hpa et mettre « "yes" » en face de « RUN_DAEMON », ce qui fait que le fichier ressemble à ça :

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

Il faut ensuite démarrer le démon avec la commande :

# /etc/init.d/tftpd-hpa start

On pourra désactiver le lancement du démon à chaque démarrage en utilisant un utilitaire du type rcconf (dans le paquet du même nom), ou en trifouillant à la main dans /etc/rc?.d ; on devra ainsi lancer à la main le démon lorsque l'on voudra faire démarrer une machine par le réseau (même remarque pour dhcp3-server, d'ailleurs).

Solution 2 : inetd

Pour configurer inetd, il suffit d'éditer /etc/inetd.conf et de décommenter (ou ajouter si elle n'existe pas) la ligne suivante :

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

Déploiement des fichiers de démarrage

Comme vous l'avez peut-être déduit des extraits de fichiers de configuration qui précèdent, la racine du serveur TFTP est par défaut (sous Debian en tout cas : cela varie selon les distributions) dans /var/lib/tftpboot. Je n'aime pas utiliser /var/lib, mais bon, c'est par défaut, alors pourquoi pas… et si cela vous dérange vraiment, il est très facile de modifier le comportement du serveur TFTP (cf. la section précédente).

La procédure classique est de récupérer une archive contenant les fichiers nécessaires au démarrage, de la décompresser dans un sous-répertoire de /var/lib/tftpboot, et d'adapter la configuration du serveur DHCP en fonction : le « filename » doit pointer vers le fichier correspondant à l'image PXE du système à démarrer, avec un chemin relatif à la racine du serveur TFTP.

Les sections suivantes présentent quelques exemples.

Debian

Dans un dépôt Debian, les images de l'installateur réseau se trouvent dans dists/DISTRIBUTION/main/installer-ARCHITECTURE/current/images/netboot/. Par exemple, pour lenny en version i386, on pourra utiliser : ftp://ftp.fr.debian.org/debian/dists/lenny/main/installer-i386/current/images/netboot/

Le fichier à télécharger est netboot.tar.gz. Voici un exemple de téléchargement et déploiement au bon endroit (le texte en gras correspond aux commandes tapées) :

naha@ein:~$ cd /tmp
naha@ein:/tmp$ wget ftp://ftp.fr.debian.org/debian/dists/lenny/main/installer-i386/current/images/netboot/netboot.tar.gz
[…]
2008-12-01 00:21:23 (425 KB/s) - « netboot.tar.gz » sauvegardé [7413233]
naha@ein:/tmp$ cd /var/lib/tftpboot
naha@ein:/var/lib/tftpboot$ su
Mot de passe : 
ein:/var/lib/tftpboot# mkdir debian-lenny
ein:/var/lib/tftpboot# cd debian-lenny
ein:/var/lib/tftpboot/debian-lenny# tar xzf /tmp/netboot.tar.gz
ein:/var/lib/tftpboot/debian-lenny# ls -l
total 8
drwxr-xr-x 3 root root 4096 oct 29 14:11 debian-installer/
lrwxrwxrwx 1 root root   32 déc  1 00:23 pxelinux.0 -> debian-installer/i386/pxelinux.0*
lrwxrwxrwx 1 root root   34 déc  1 00:23 pxelinux.cfg -> debian-installer/i386/pxelinux.cfg/
-rw-r--r-- 1 root root   55 oct 29 14:11 version.info

Ubuntu & ses petites sœurs

Ubuntu est un dérivé de Debian, la procédure est donc exactement la même, en adaptant l'adresse du fichier à télécharger. Pour la distribution intrepid en version i386, on pourra par exemple utiliser l'adresse : ftp://ftp.ubuntu.com/ubuntu/dists/intrepid/main/installer-i386/current/images/netboot/

Il faudra également utiliser sudo -s à la place de su.

NetBSD

À faire.

RIPLinuX

À faire.

Système maison avec racine NFS

À faire.

Serveur NFS

À faire.