Table des matières

PXE

L'amorçage PXE 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 un serveur.

L'image ainsi récupérée peut être le système d'exploitation brut ou bien le système d'exploitation personnalisé avec des composantes logicielles (suite bureautique, utilitaires, packs de sécurité, scripts, etc…).

Une fois cette image « pré-chargée », elle peut être installée sur la machine qui a été amorcée en PXE.

Le client

Il faut vérifier dans le bios de la machine à installer que le boot par la carte réseau soit autorisé. Il faut ensuite brancher la machine sur un port désauthentifié dans le VLAN 999 et booter.

Le VLAN

Un nouveau VLAN a été créé : le 999. Voici un plan d'adressage :

routeur npasserelle999 serveur pxe
192.168.150.1 192.168.150.2 192.168.150.3
192.168.103.172 192.168.102.196

Le serveur DHCP de la vm pxe donne les adresses IP dans {192.168.150.10, 192.168.150.250}

Mise en place du PXE

Pour pouvoir faire fonctionner le PXE, nous avons besoin de deux serveurs, le serveur de PXE à proprement parler, comprenant un serveur dhcp, tftp et nfs, et un serveur faisant office de passerelle pour télécharger les paquets. Le premier est idéalement monté sur une openvz, le second sur une kvm.

Pour la mise en place des images, rendez-vous ici

Mise en place de la passerelle

La passerelle actuelle npasserelle999 a pour IP 192.168.103.172.

Dans une kvm ayant une interface dans le Vlan 40 et une dans le Vlan 999, il faut d'abord faire du NAT pour que les machines en cours d'installation puissent avoir accès aux dépôts. Pour cela, faites ce qui suit :

  # iptables -F
  # iptables -X

Cela permet d'effacer les anciennes règles iptables. Ensuite :

    echo 1 > /proc/sys/net/ipv4/ip_forward
    /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    /sbin/iptables -A FORWARD -i eth1 -o eth2 -m state --state RELATED,ESTABLISHED -j ACCEPT
    /sbin/iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT
  # chmod +x script.sh
  # ./script.sh

N'oubliez pas de sauvegarder vos règles pour qu'elles soient appliquées à chaque redémarrage :

# iptables-save > /etc/iptables-save
# iptables-restore < /etc/iptables-save # cette ligne est à mettre dans le rc.local

Et votre machine agira comme passerelle.

Mise en place du serveur

Avec le serveur tftp utilisé ici, tous les fichiers nécessaires pour le PXE se trouvent dans le répertoire /var/lib/tftpboot du serveur 192.168.103.173

Installer le serveur DHCP

Il faut maintenant installer le DHCP sur une autre vm (openvz).

  # apt-get install dhcp3-server
  INTERFACES="[interface dans le vlan 999]"
option domain-name-servers 157.159.40.55, 157.159.40.54;
option domain-name "minet.net";
option architecture-type code 93 = unsigned integer 16;

subnet 192.168.150.0 netmask 255.255.255.0 {
        range 192.168.150.10 192.168.150.250;
        option routers 192.168.150.2
        filename "pxelinux.0";
      } 

puis :

    # /etc/init.d/isc-dhcp-server start

Installer le serveur tftp

Une fois ceci fait, il reste à configurer le tftp, toujours sur la même machine :

  # apt-get install tftpd-hpa openbsd-inetd
      #:BOOT: TFTP service is provided primarily for booting.  Most sites
      #       run this only on machines acting as "boot servers."
      tftp    dgram   udp     wait    root    /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
    # update-inetd --enable BOOT
    #netstat -lu}}} devrait vous donner une ligne comme celle-ci :
      {{{udp        0      0 *:tftp                  *:*

Un serveur nfs pour Ubuntu live

Nous avons besoin d'un serveur nfs pour ubuntu Live afin qu'il puisse télécharger ses fichiers comme à partir d'un CD. Il faut donc activer le module nfs sur le node et sur la vm openvz.

donc :

  modprobe nfsd
  vzctl set VMID --features nfsd:on --save
  apt-get install rcpbind (pour remplacer portmap)
  apt-get install nfs-kernel-server
   /var/lib/tftpboot/path_vers_image 192.168.150.0/255.255.255.0(async,no_root_squash,no_subtree_check,ro)
  /etc/init.d/nfs-kernel-server restart

Pour monter des iso

  vzctl set VMID --devnodes fuse:rw --save
  apt-get install fuseiso

Pour monter une image:

  fuseiso path/to/file.iso path/to/mount/point

Pour démonter :

  fusermount -u path/to/mount/point

Mettre en place les fichiers nécessaires

    # D-I config version 2.0
    default pxelinux.cfg/menu/vesamenu.c32
    menu hshift 13
    menu width 49
    menu margin 8

    menu title Installer boot menu
    #menu background ubuntu/i386/ubuntu-installer/i386/boot-screens/splash.png
    menu background pxelinux.cfg/menu/minetpex.png
    menu color title        * #FFFFFFFF *
    menu color border       * #00000000 #00000000 none
    menu color sel          * #ffffffff #76a1d0ff *
    menu color hotsel       1;7;37;40 #ffffffff #76a1d0ff *
    menu color tabmsg       * #ffffffff #00000000 *
    menu color help         37;40 #ffdddd00 #00000000 none
    menu vshift 12
    menu rows 10
    menu helpmsgrow 15
    # The command line must be at least one line from the bottom.
    menu cmdlinerow 16
    menu timeoutrow 16
    menu tabmsgrow 18
    menu tabmsg Press ENTER to boot
    LABEL Ubuntu 12.10  32 bits
            kernel install/ubuntu/i386/ubuntu-installer/i386/linux
            append vga=normal initrd=install/ubuntu/i386/ubuntu-installer/i386/initrd.gz ramdisk_size=16464 root=/dev/rd/0 rw  --
    LABEL Ubuntu 12.10  64 bits
            kernel install/ubuntu/amd64/ubuntu-installer/amd64/linux
            append vga=normal initrd=install/ubuntu/amd64/ubuntu-installer/amd64/initrd.gz ramdisk_size=16464 root=/dev/rd/0 rw  --
    LABEL Ubuntu_graphic 12.10  32 bits
            Kernel live/ubuntu/casper/vmlinuz
            append boot=casper netboot=nfs nfsroot=192.168.150.3:/var/lib/tftpboot/live/ubuntu debian-installer/language=fr console-setup/layoutcode=fr console-setup/variantcode=oss quiet splash initrd=live/ubuntu/casper/initrd.lz --
    LABEL Debian 6.0  32 bits
            kernel install/debian/i386/debian-installer/i386/linux
            append vga=normal initrd=install/debian/i386/debian-installer/i386/initrd.gz ramdisk_size=16464 root=/dev/rd/0 rw  --
    LABEL Debian 6.0  64 bits
            kernel install/debian/amd64/debian-installer/amd64/linux
            append vga=normal initrd=install/debian/amd64/debian-installer/amd64/initrd.gz ramdisk_size=16464 root=/dev/rd/0 rw  --
    LABEL Fedora 17  32 bits
            kernel install/fedora/i386/vmlinuz-i386
    #       append initrd=install/fedora/i386/initrd-i386.img method=http://fedora.mirrors.ovh.net/linux/releases/17/Fedora/i386/os/
            append initrd=install/fedora/i386/initrd-i386.img method=http://download.fedoraproject.org/pub/fedora/linux/releases/17/Fedora/i386/os/
    LABEL Fedora 17  64 bits
            kernel install/fedora/amd64/vmlinuz-amd64
            append initrd=install/fedora/amd64/initrd-amd64.img method=http://download.fedoraproject.org/pub/fedora/linux/releases/17/Fedora/x86_64/os/
    LABEL LinuxMint 14 mate  32 bits
            kernel live/mint/casper/vmlinuz
            append boot=casper netboot=nfs nfsroot=192.168.150.3:/var/lib/tftpboot/live/mint quiet splash initrd=live/mint/casper/initrd.lz --

L'image peut être supprimée. C'est 640*480 en 24bits obligatoirement. Ce fichier se compose des distributions proposées avec les chemins vers le noyau et celui du init.rd Sauf pour le dernier Ubuntu, se référer à l'étape précédente

Un menu plus élaboré

Vous pouvez aussi faire un menu un peu plus élaboré en créant les fichiers comme suit dans le dossier pxelinux.cfg:

    # D-I config version 2.0
    default pxelinux.cfg/menu/vesamenu.c32 
    include pxelinux.cfg/menu/design.conf

    MENU TITLE PXE boot menu
    MENU TABMSG Press [Enter] to select

    MENU BEGIN Installation
    INCLUDE pxelinux.cfg/menu/installation.conf
    MENU END
    MENU BEGIN Live
    INCLUDE pxelinux.cfg/menu/live.conf
    MENU END
menu background pxelinux.cfg/menu/minetpex.png
menu color title        * #FFFFFFFF *
menu color border       * #00000000 #00000000 none
menu color sel          * #ffffffff #76a1d0ff *
menu color hotsel       1;7;37;40 #ffffffff #76a1d0ff *
menu color tabmsg       * #ffffffff #00000000 *
menu color help         37;40 #ffdddd00 #00000000 none
menu vshift 12
menu rows 10
menu helpmsgrow 15
# The command line must be at least one line from the bottom.
menu cmdlinerow 16
menu timeoutrow 16
menu tabmsgrow 18
MENU TITLE Live boot
LABEL Ubuntu_graphic 12.10  32 bits
        MENU LABEL Ubuntu Live 12.10 32 bits
        KERNEL live/ubuntu/casper/vmlinuz
        APPEND boot=casper netboot=nfs nfsroot=192.168.150.3:/var/lib/tftpboot/live/ubuntu debian-installer/language=fr console-setup/layoutcode=fr console-setup/variantcode=oss quiet splash initrd=live/ubuntu/casper/initrd.lz --
LABEL LinuxMint 14 mate  32 bits
        MENU LABEL LinuxMint 14 mate 32bits
        KERNEL live/mint/casper/vmlinuz
        APPEND boot=casper netboot=nfs nfsroot=192.168.150.3:/var/lib/tftpboot/live/mint quiet splash initrd=live/mint/casper/initrd.lz --
LABEL Back
        MENU EXIT
        MENU LABEL <-Back
MENU TABMSG Press [Enter] to boot live image
MENU TITLE Installation menu

INCLUDE pxelinux.cfg/menu/ubuntu.conf
INCLUDE pxelinux.cfg/menu/debian.conf
INCLUDE pxelinux.cfg/menu/fedora.conf
LABEL Back
        MENU EXIT
        MENU LABEL <-Back

MENU TABMSG Press [Enter] to select
MENU BEGIN Ubuntu
MENU TITLE Ubuntu
LABEL 32 bits
        kernel install/ubuntu/i386/ubuntu-installer/i386/linux
        append vga=normal initrd=install/ubuntu/i386/ubuntu-installer/i386/initrd.gz ramdisk_size=16464 root=/dev/rd/0 rw  --
LABEL 64 bits
        kernel install/ubuntu/amd64/ubuntu-installer/amd64/linux
        append vga=normal initrd=install/ubuntu/amd64/ubuntu-installer/amd64/initrd.gz ramdisk_size=16464 root=/dev/rd/0 rw  --
LABEL Back
        MENU EXIT
        MENU LABEL <-Back
MENU TABMSG Press [Enter] to install
MENU END

Il faut retrouver dans l'ensemble de ces fichiers les lignes du premier fichier default cité.

De la doc