PXE + apt-cacher…Perfect setup pour du Debian-Like ?

linux

Nous allons aborder dans cette note, 2 sujets, qui deviendront complémentaire par la suite, un serveur pour PXE complet, ainsi qu’un serveur cache APT.

Un cache APT, pour quoi faire ?
Si vous avez plusieurs machines sur des distribs Debian-like, le proxy-cache est là pour vous faire économiser du temps en téléchargement. Vous lui demandez un paquet une fois, il ne l’as pas, il le télécharge, le stocke, et vous le demande. Vous le lui redemandez une 2eme fois pour une 2eme machine, il vous le distribue instantanément. On voit de suite l’intérêt…

Un serveur PXE, c’est quoi ?
PXE veut dire Preboot eXecution Environment, est un environnement de démarrage réseau, permettant de pouvoir démarrer a partir de celui-ci, notamment de lancer des installations (mais pas que). Vous avez déjà sans doute remarqué que certaines cartes mère chargent un petit bout de BIOS pour la carte réseau, et que ça prends un temps incroyable…Ben c’est ça dont on parle (rassurez vous, une fois le serveur en place, c’est très rapide)

Première étape : installation du serveur de cache pour APT

Pour celà, rien de plus simple…

aptitude install apt-cacher

Compliqué hein ?

Bon, c’est pas tout à fait fini, vous pouvez modifier quelques options dans /etc/apt-cacher/apt-cacher.conf notamment l’emplacement disque du cache a proprement dit (les fichiers que le cache va stocker), l’adresse email de l’admin, le port (par défaut 3142), etc.
Notez que tout fonctionne parfaitement sans aucune modification.
En revanche, il FAUT absolument modifier /etc/default/apt-cacher et mettre la valeur AUTOSTART à 1.
On lance le démon

/etc/init.d/apt-cacher start

Et c’est parti.
On peut vérifier que le serveur cache est bien lancé, en tapant dans votre FireFox préféré http://mon-server:3142/ (vous devriez avoir une page avec quelques informations concernant le démon apt-cacher).

Ensuite, et afin que les machines Debian-like de votre réseau aille taper dans le cache, deux solutions s’offrent à nous. La première solution, cochonne, mais indiquée sur la page http://mon-server:3142/ consiste à transformer, dans le fichier /etc/apt/sources.list les lignes deb et deb-src de la manière suivante :

deb http://ftp2.fr.debian.org/debian/ stable main

en

deb http://mon-server:3242/ftp2.fr.debian.org/debian/ stable main

Solution un peu longue à faire à la main (un sed serait le bienvenue ici…) surtout si vous souhaitez rajouter les security.debian.org/ et volatile.debian.org/.

Du coup, je vous ai trouvé une belle solution, beaucoup plus simple et élégante…Il suffit de dire à aptitude qu’il doit utiliser un proxy. Comment on fait ? On créer un fichier /etc/apt/apt.conf et on y colle dedans :

Acquire::http::Proxy "http://mon-server:3142/";

Et c’est tout.
Pour vérifier que celà fonctionne bien, un petit aptitude update suffira. Si ça ne fonctionne pas, essayez de mettre une IP plutôt qu’un nom de domaine. Si ça ne fonctionne toujours pas, refaites depuis le début :).

Seconde étape : installation et configuration des composants pour le PXE

PXE fonctionne de cette manière :
1- Le client recherche un serveur BOOTP (similaire au DHCP, mais pouvant fournir une info nécessaire au boot).
2- Un serveur BOOTP réponds, en offrant un bail DHCP, un serveur TFTP a contacter ainsi qu’un fichier a charger.
3- Le client contacte le serveur TFTP et demande le fichier en question.
4- C’est prêt.

Ce dont à donc besoin PXE : un serveur DHCP supportant le BOOTP (ils le font presque tous) et un serveur TFTP (Trivial File Transfert Protocol, c’est comme le FTP, sauf qu’on doit connaitre l’arborescence des fichiers pour pouvoir les lui demander…C’est…Trivial quoi…).

1- Installtion du serveur DHCP/BOOTP

aptitude install dhcp3-server

N.b. pour les utilisateurs de Freebox (et de boxes en général) : vous pouvez tout a fait garder le DHCP de votre Freebox, tant que vous ne définissez pas le DHCP que vous êtes en train d’installer en tant qu’autoritaire, les box n’ont généralement pas d’option BOOTP, pas de problèmes (par mesure de sécurité, on va attribuer une plage différente à la Box et pour le PXE).

On va ensuite éditer /etc/dhcp3/dhcpd.conf et y rajouter ces quelques lignes :
si vous avez déjà un autre serveur DHCP d’installé

option domain-name-servers 192.168.3.254, 8.8.8.8;
option subnet-mask 255.255.255.0;
option routers 192.168.3.254;
allow bootp;
subnet 192.168.3.0 netmask 255.255.255.0
{
range dynamic-bootp 192.168.3.1 192.168.3.10;
filename "pxelinux.0";
next-server mon-server;
}

Sinon :

authoritative;
allow bootp;

Puis, dans votre subnet :

filename "pxelinux.0";
        next-server mon-server;

On sauvegarde, et on relance le service dhcpd

/etc/init.d/dhcp3-server restart

2- Installtion du TFTP

aptitude install tftpd-hpa

Qui veut démarrer en inetd, par défaut, ce qui ne nous convient pas.
On va donc modifier /etc/default/tftpd-hpa pour mettre « yes » à l’option RUN_DAEMON. Pour plus de simplicité, j’ai également modifié le path dans lequel tftp-hpa allait démarrer (le path qui contiendra vos fichiers plus tard) en /var/tftp ça sera le chroot du serveur (TFTP ne gèrant pas d’authentification, il est primordial de ne rien y laisser trainer de compromettant).
Un petit coup de

update-rc.d tftp-hpa
/etc/init.d/tftpd-hpa start

démarrera le serveur TFTP. (Pensez à créer le répertoire chroot du serveur TFTP, il pourrait planter sinon)

3- Préparation des fichiers et répertoires
On va créer pas mal de répertoire :
distros : contiendra les fichiers nécessaires au lancement des installers de Debian et Ubuntu, versions 32 et 64 bits
menu : contiendra les fichiers nécessaires à l’affichage du menu
pxelinux.cfg : contient le fichier nécessaire à l’amorçage du loader
tools : contiendra quelques outils plus ou moins utiles.

C’est parti pour les créations de répertoires.

mkdir -p /var/tftp/distros/debian/wheezy/amd64/
mkdir -p /var/tftp/distros/debian/wheezy/i386/
mkdir -p /var/tftp/distros/ubuntu/natty/amd64/
mkdir -p /var/tftp/distros/ubuntu/natty/i386/
mkdir /var/tftp/tools/
mkdir /var/tftp/menu/
mkdir /var/tftp/pxelinux.cfg/

Téléchargement des fichiers d’installation :

wget ftp://ftp.fr.debian.org/debian/dists/wheezy/main/installer-i386/current/images/netboot/debian-installer/i386/linux -qO /var/tftp/distros/debian/wheezy/i386/linux
wget ftp://ftp.fr.debian.org/debian/dists/wheezy/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz -qO /var/tftp/distros/debian/wheezy/i386/initrd.gz
wget ftp://ftp.fr.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux -qO /var/tftp/distros/debian/wheezy/amd64/linux
wget ftp://ftp.fr.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz -qO /var/tftp/distros/debian/wheezy/amd64/initrd.gz

wget http://archive.ubuntu.com/ubuntu/dists/natty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux -qO /var/tftp/distros/ubuntu/natty/amd64/linux
wget http://archive.ubuntu.com/ubuntu/dists/natty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz -qO /var/tftp/distros/ubuntu/natty/amd64/initrd.gz
wget http://archive.ubuntu.com/ubuntu/dists/natty/main/installer-i386/current/images/netboot/ubuntu-installer/i386/linux -qO /var/tftp/distros/ubuntu/natty/i386/linux
wget http://archive.ubuntu.com/ubuntu/dists/natty/main/installer-i386/current/images/netboot/ubuntu-installer/i386/initrd.gz -qO /var/tftp/distros/ubuntu/natty/i386/initrd.gz

D’une manière générale, vous devriez pouvoir trouver ces deux fichiers pour a peu près n’importe qu’elle distribution du marché (il faut chercher un peu).
De plus, vous pouvez spécifier « stable » à la place du nom de la distribution sur Debian (le lien n’existant pas sur Ubuntu, et les autres distribs n’étant pas traitées dans ce tuto)

Des versions de syslinux et de memtest86 sont peut être plus récentes. Vérifiez…

cd /var/tftp/
wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.07.tar.gz
tar zxvf syslinux-4.07.tar.gz
cp syslinux-4.07/core/pxelinux.0 /var/tftp/
cp syslinux-4.07/com32/menu/vesamenu.c32 /var/tftp/tools/
cp syslinux-4.07/com32/hdt/hdt.c32 /var/tftp/tools/
cp syslinux-4.07/com32/modules/reboot.c32 /var/tftp/tools/reboot.c32
cp syslinux-4.07/com32/samples/localboot.c32 /var/tftp/tools/localboot.c32
wget http://www.memtest.org/download/5.01/memtest86+-5.01.bin.gz
gzip -d memtest86+-5.01.bin.gz
cp memtest86+-5.01.bin /var/tftp/tools/memtest
wget http://img.sn4ky.net/tuto/pxe/background.png -qO /var/tftp/menu/background.png

Voilà, normalement tous les fichiers sont prêt, il n’y a plus qu’à créer les fichiers de configuration pour que ça soit tout joli sur votre PXE.

On commence par pxelinux.cfg/default

DEFAULT tools/vesamenu.c32 menu/design.conf ~

MENU TITLE MarkAsRead PXE

LABEL LocalBoot
    MENU LABEL ^Boot Local
    KERNEL tools/localboot.c32

LABEL Debian Installers
    MENU LABEL ^Debian Installers >>
    KERNEL tools/vesamenu.c32
    APPEND menu/design.conf menu/debian.conf

LABEL Ubuntu Installers
    MENU LABEL ^Ubuntu Installers >>
    KERNEL tools/vesamenu.c32
    APPEND menu/design.conf menu/ubuntu.conf

LABEL Outils systemes
    MENU LABEL Outils ^systemes >>
    KERNEL tools/vesamenu.c32
    APPEND menu/design.conf menu/systemes.conf

TIMEOUT 50

Le signe « ^ » indique au PXE quelle lettre a mettre en surbrillance. La ligne sera activée dès lors qu’on tapera sur la touche en question au moment du boot.
Le Timeout est exprimé en dixième de secondes, un timeout de 50 correspond à 5sec.

Ensuite, menu/design.conf

MENU WIDTH  80
MENU MARGIN 10
MENU ROWS   12
MENU TABMSGROW  18
MENU CMDLINEROW 12
MENU ENDROW 24
MENU TIMEOUTROW 20
MENU PASSWORDMARGIN 3
MENU PASSWORDROW    11

menu background menu/background.png

Les options étant assez verbeuses d’elles-même, je ne les décrirait pas. Notons juste que le background peut accepter un PNG de 640*480 de 24 bits (ce qui laisse beaucoup de choix…)

Passons à menu/systemes.conf

MENU TITLE Outils Systemes

LABEL retour_menu
    MENU LABEL <- Retour menu principal
    KERNEL tools/vesamenu.c32
    APPEND menu/design.conf ~

LABEL memtest
    MENU LABEL ^MemTest 5.01
    KERNEL tools/memtest

LABEL HDT
    MENU LABEL ^Hardware Detection Test
    KERNEL tools/hdt.c32
    APPEND modules=tools/modules.pcimap pciids=tools/pci.ids memtest=tools/memtest

LABEL reboot
    MENU LABEL ^Reboot
    KERNEL tools/reboot.c32

Puis, menu/debian.conf

MENU TITLE Debian Installers

LABEL retour_menu
    MENU LABEL <- Retour menu principal
    KERNEL tools/vesamenu.c32
    APPEND menu/design.conf ~

LABEL --Debian Wheezy (7.1)--

LABEL Wheezy i386 Expert
    MENU LABEL Wheezy i386
    KERNEL distros/debian/wheezy/i386/linux
    APPEND priority=low vga=normal initrd=distros/debian/wheezy/i386/initrd.gz

LABEL Wheezy amd64 expert
    MENU LABEL Wheezy amd64
    KERNEL distros/debian/wheezy/amd64/linux
    APPEND priority=low vga=normal initrd=distros/debian/wheezy/amd64/initrd.gz

Notez que l’option de « priority=low » sur la ligne APPEND indique a l’installeur que nous souhaitons lancer l’install en mode ‘Expert’

Et pour finir menu/ubuntu.conf

MENU TITLE Ubuntu Installers

LABEL retour_menu
    MENU LABEL <- Retour menu principal
    KERNEL tools/vesamenu.c32
    APPEND menu/design.conf ~

LABEL --Ubuntu Natty Narwhal (11.04)--

LABEL Natty Narwhal i386
    MENU LABEL Natty Narwhal i386
    KERNEL distros/ubuntu/natty/i386/linux
    APPEND vga=normal initrd=distros/ubuntu/natty/i386/initrd.gz

LABEL Natty Narwhal amd64
    MENU LABEL Natty Narwhal amd64
    KERNEL distros/ubuntu/natty/amd64/linux
    APPEND vga=normal initrd=distros/ubuntu/natty/amd64/initrd.gz

nb. : pour Ubuntu, vous pouvez rajouter l’option DEBCONF_PRIORITY=low à la ligne APPEND pour exécuter l’installation en mode expert.
Si tout va bien, et que je ne me suis pas gouré, vous devriez avoir un serveur PXE prêt à démarrer, et à installer vos première distribs.

4- Mais là où tout le monde s’arrête, nous, on va plus loin.
Souvenez vous, au début du tuto, on installe un serveur proxy cache apt, et bien figurez vous qu’il est possible de spécifier au moment de charger l’initrd qu’on veut qu’apt utilise un proxy. Il suffit de rajouter, en fin de ligne APPEND de vos fichiers, le paramètre suivant :

mirror/http/proxy=http://mon-server:3142/

Ensuite, vous n’aurez rien à faire de plus. Aptitude créera automatiquement le fichier apt.conf avec les bons paramètres dedans. Si vous déplacez la machine, il suffit de supprimer le fichier (ou corriger ce qu’il y a dedans par la nouvelle entrée).

Elle est pas belle la vie ?

source : Geekfault et Ubuntu-fr

You can leave a response, or trackback from your own site.

11 Responses to “PXE + apt-cacher…Perfect setup pour du Debian-Like ?”

  1. […] Installation du serveur PXE : Ici, Sn4ky a déjà fait tout le travail, vous n’avez plus qu’à suivre ses instructions qui sont ici. […]

  2. Sn4kY dit :

    MAJ
    syslinux-4.02
    wget debian lenny corrigés (il restait des \etch\)
    ajout d’un tip pour debian \stable\ (et non le nom de la distrib)

  3. Tools dit :

    Tools…

    […] something about tools[…]…

  4. Sn4kY dit :

    MAJ
    syslinux-4.03
    memtools-4.20
    ubuntu MM 10.10

  5. Sn4kY dit :

    MAJ
    ajout de localboot.c32 qui était présent dans le fichier pxelinux.cfg/default mais pas copié dans l’arbo tools/

  6. Sn4kY dit :

    MaJ :
    Modifications de lenny en squeeze
    supression des installers en mode « standard »
    ajout des installeurs de Debian GNU/kFreeBSD

  7. Door Actuator dit :

    ,:~ i am always fond of reading topics and issues about this one ;,:

  8. Pierre dit :

    Bonjour,
    Merci pour cet exemple très sympa !
    Juste un détail, la version de memtest n’est pas indiqué dans le bon répertoire, remplacer :
    wget http://www.memtest.org/download/4.10/memtest86+-4.20.bin.gz
    par
    wget http://www.memtest.org/download/4.20/memtest86+-4.20.bin.gz
    Mais bon je chipotes.
    Bonne continuation !

  9. Sn4kY dit :

    MàJ :
    Modif de Ubuntu Maverick Meerkat -> Ubuntu Natty Narwhal
    Modif de syslinux 4.03 -> 4.04

Leave a Reply to Sn4kY