ReLoad

Thierry Jaouen ~ WikiBlog
"Rien à foutre d'être lu, tant que je peux me relire."

Outils pour utilisateurs

Outils du site


Action disabled: source
blog:2013:04:28:debian_pxe

Debian Squeeze et PXE (enfin, presque)

:!: c'est trés approximatif , mais ça marche.

Mise en place du boot réseau sous Debian Squeeze (et aussi Debian Wheezy).

Par exemple, pour démarrer “gparted” ou un “live-cd” en cas de besoin.

~~READMORE~~

Interessant: Install Debian 100% réseau

Comment ça marche

  • Prealable: activer le boot PXE, au niveau du BIOS ou de la carte réseau.

1er étape

  • Sur le client PXE, le BIOS de la carte reseau demande une adresse “IP” …
  • Le serveur dhcp lui retourne une “IP” avec l'adresse du serveur TFTP ainsi que le fichier de base a exécuter ( Par exemple: pxelinux.0 )

2ieme étape

Soit on arrive sur un menu, définit par exemple dans …/pxeconfig.cfg/default , soit la suite démarre immédiatement.

  • Le client PXE demande le “kernel” a démarrer (et aussi le “initram”…)
  • Le serveur tftp retourne les fichiers demandés.

3ieme étape

  • Le nouveau système démarre, demande éventuellement aussi une adresse “IP”. Etc…

service ''tftp''

# aptitude update
# aptitude install tftpd-ha

Éditer le fichier /etc/default/tftpd-ha afin d'avoir (pour exemple):

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="192.168.1.1:69"
TFTP_OPTIONS="--secure -4"
  • 192.168.1.1 : Parce que je ne veux pas que les autres interfaces repondent.
  • --secure : Parce qu'on chroot dans /srv/tftp
  • -4 : Parce que je ne veux que de l'IPv4 (c'est mon choix!)

Si nécessaire, créer le répertoire /srv/tftp .

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

service pxe

# aptitude update
# aptitude install pxe syslinux

pxe.conf

Extrait de ma conf (je n'ai pas touché le reste) :

interface=eth0
default_address=192.168.1.1

tftpdbase=/tftpboot

domain=local.thierry-jaouen.fr
:!: Je ne sais pas a quoi servent les paramètres “mftp_*” et autres “service=…”
C'est le signe que je n'ai pas tout compris :-X
# /etc/init.d/pxe restart

service dhcp

Voila ma conf dans /etc/dhcp/dhcpd.conf :

ddns-update-style interim;
update-static-leases off;
update-conflict-detection false;
ignore client-updates;

allow booting;    # support PXE booting
allow bootp;      # respond to bootp queries

option domain-name "local.thierry-jaouen.fr";
option domain-name-servers 192.168.1.1, 192.168.1.2;

default-lease-time 10800;
max-lease-time 43200;
min-lease-time 1800;

authoritative;

log-facility local7;

class "PXE" {
  match if substring(option vendor-class-identifier,0,9) = "PXEClient";
}

class "Etherboot" {
  match if substring(option vendor-class-identifier,0,9) = "Etherboot";
}

subnet 192.168.1.1 netmask 255.255.255.0 {
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;

  server-identifier 192.168.1.1;       # <- dans le cas où on a plusieurs IP sur la même interface.

  server-name "gateway";

  # Le pool dédié a l'ensemble du parc, **sauf** PXE
  # Cela evite de servire des infos PXE a des machines qui n'en demande pas !
  
  pool {
    range 192.168.1.1 192.168.1.127;
  
    deny members of "PXE";
    deny members of "Etherboot";
  }

  # Le pool dédié PXE, mais uniquement les clients **connus**
  
  pool {
    range dynamic-bootp 192.168.1.224 192.168.1.254;
  
    deny unknown-clients;
  
    allow members of "PXE";
    allow members of "Etherboot";
  
    next-server 192.168.1.1;
  
    # Par defaut (le "petit menu"):
    filename "/tftpboot/pxe/pxelinux.0";
  
    host test-pxe-pxe {
      hardware ethernet 01:23:45:67:89:AB;     # <-- MAC FIXME
      filename "/tftpboot/images/squeeze-amd64/debian-installer/amd64/pxelinux.0";
    }
    
    host test-autre-pxe {
      hardware ethernet 23:45:67:89:AB:CD;     # <-- MAC FIXME
    }
    
  }
}

host test-zorro {
  hardware ethernet 45:67:89:AB:CD:EF;     # <-- MAC FIXME
}

On peut noter que les “range” “IP” sont différent selon qu'on est en mode “PXE” ou pas.

192.168.1.1 .. 127 pour les clients “normaux”
192.168.1.224 .. 254 pour les clients en phase “PXE”

Par exemple, si la machine “test-pxe-pxe” ne fait pas de requête “PXE”, elle sera dans le premier pool.

Sinon, elle aura une “IP” dans le pool dédié au “PXE” , ainsi que les infos spécifique a cette environnement.

Image bootable

Il y a 2 manières de configurer le “boot” en réseaux:

  • soit directement dans la conf du serveur dhcp
  • soit dans un petit menu apparaissant au boot

Pour ce que est du “petit menu”, il faut ajouter un fichier default (en fait il peut avoir bien d'autres noms, voir la doc) dans le sous-répertoire pxelinux.cfg .

Ainsi, dans /srv/tftp/tftpboot/pxe j'ai un sous-répertoire pxelinux.cfg, avec un fichier default contenant (extrait) :

default menu.c32
prompt 0
noescape 1
timeout 600
kbdmap french.kbd

label bootlocal
  menu default
  menu label Local boot
  localboot 0

label squeeze64
  MENU LABEL Squeeze amd64
  kernel images/squeeze-amd64/debian-installer/amd64/linux
  append vga=normal initrd=images/squeeze-amd64/debian-installer/amd64/initrd.gz rw --
                                                                                                          
label rescuesqueeze64
MENU LABEL Rescue Squeeze amd64
kernel images/squeeze-amd64/debian-installer/amd64/linux
append vga=normal initrd=images/squeeze-amd64/debian-installer/amd64/initrd.gz rescue/enable=true --

# .... etc ....

Chaque section “label” correspond a un choix possible proposé par le “petit menu”.

La mise en pratique vient avec les exemples ci-dessous…

SystemRescueCD

host dans dhcp

tftp

Sur le serveur tftp , toujours en partant des configurations vu précédemment.

Copier le CD dans :

/srv/tftp/tftpboot/images/systemrescuecd-x86/

Puis dans: …/isolinux :

# mkdir pxelinux.cfg/
# ln -s ../isolinux.cfg 

dhcp

host test-pxe-pxe {
  hardware ethernet 01:23:45:67:89:AB;                    # <-- MAC FIXME
  filename "/tftpboot/images/systemrescuecd-x86/isolinux/pxelinux.0";
}

tftp

Sur le serveur tftp , toujours en partant de la config vu précédemente.

Copier le CD dans :

/srv/tftp/tftpboot/images/systemrescuecd-x86/

Dans le fichier ../pxelinux.cfg/default (toujours pour exemple) :

label systemrescuecd
  menu label SystemRescue-Cd x86
  kernel images/systemrescuecd-x86/isolinux/rescue32
  append setkmap=fr netboot=tftp://192.168.1.1/tftpboot/images/systemrescuecd-x86/sysrcd.dat initrd=images/systemrescuecd-x86/isolinux/initram.igz

192.168.1.1 est l'adresse du serveur tftp.

Un minimum de 1Go peut être necessaire pour démarrer .

Le cas Wheezy

Recupérer le fichier “netboot.tar.gz” par

Par exemple:

# cd /srv/tftp/tftpboot/images
# mkdir wheezy-amd64
# cd wheezy-amd64
# wget http://ftp.nl.debian.org/debian/dists/testing/main/installer-amd64/current/images/netboot/netboot.tar.gz
# tar xvzf netboot.tar.gz

Un coup d'oeil:

# ls -l
total 12076
drwxrwxr-x 3 root root     4096 14 nov.  15:14 debian-installer
-rw-r--r-- 1 root root 12338011 14 nov.  15:14 netboot.tar.gz
lrwxrwxrwx 1 root root       33 25 nov.  11:59 pxelinux.0 -> debian-installer/amd64/pxelinux.0
lrwxrwxrwx 1 root root       35 25 nov.  11:59 pxelinux.cfg -> debian-installer/amd64/pxelinux.cfg
-rw-rw-r-- 1 root root       56 14 nov.  15:14 version.info  

Maintenant, 2 methodes:

host httpd

On peut personnaliser l'host dans /etc/dhcp/dhcpd.conf, avec en bref :

host test-pxe-pxe {
  hardware ethernet 01:23:45:67:89:AB;                    # <-- MAC FIXME
  filename "/tftpboot/images/wheezy-amd64/pxelinux.0";
}
# /etc/init.d/isc-dhcp-server restart

Toujours en partant de la conf mis en place plus haut, modifier le “menu” générique là: /srv/tftp/tftpboot/pxe/pxelinux.cfg/default , afin d'y insérer:

label wheezy64
  MENU LABEL Wheezy Testing amd64
  kernel images/wheezy-amd64/debian-installer/amd64/linux
  append vga=normal initrd=images/wheezy-amd64/debian-installer/amd64/initrd.gz rw --

Et puis dans le fichier /etc/dhcp/dhcpd.conf, si besoin:

host test-pxe-pxe {
  hardware ethernet 01:23:45:67:89:AB;              # <-- MAC FIXME
  filename "/tftpboot/pxe/pxelinux.0";
}
# /etc/init.d/isc-dhcp-server restart

xen et xenpvnetboot

Il s'agit de montrer la mise en place du “boot” réseau pour un “DomU” para-virtuel.

Il y a 2 moyens:

  • soit un scripte qui simule le boot PXE
  • soit invoquer directement les fichiers nécessaires sur le serveur tftp

xenpvnetboot

Ce scripte xenpvnetboot n'existe pas sous Debian Squeeze. On va l'installer.

# cd /usr/local/src

Récupérer le “xen-utils” experimental.

# wget http://ftp.fr.debian.org/debian/pool/main/x/xen/xen-utils-4.2_4.2.0-1_amd64.deb

Décompresser:

#  dpkg -x xen-utils-4.2_4.2.0-1_amd64.deb xen-experimental/

Créer un lien:

# ln -s /usr/local/src/xen-experimental/usr/lib/xen-4.2/bin/xenpvnetboot /usr/local/bin/

Une dépendance a installer:

# aptitude update
# aptitude install python-urlgrabber

xenpvnetboot doit maintenant être fonctionnel sous Debian Squeeze.

PV Debian Squeeze

installation reseau

Dans la conf du PV, on notamment:

kernel  = 'tftp://192.168.1.1/tftpboot/images/squeeze-amd64/debian-installer/amd64/linux'
ramdisk = 'tftp://192.168.1.1/tftpboot/images/squeeze-amd64/debian-installer/amd64/initrd.gz'

...

bootloader = '/usr/local/bin/xenpvnetboot'
#bootargs =
...

vfb         = [ 'type=vnc,vncunused=0,vncdisplay=2,vnclisten=0.0.0.0,vncpasswd=mot_de_passe,keymap=fr' ]

Aprés avoir demarré le “PV”, on peut se connecter via VNC pour effectuer l'installation.

“Continue without boot loader” ??

Ok.

finition

Aprés l'installation, il faut modifier la configuration en mettant les traditionnels:

kernel      = '/boot/vmlinuz-2.6.32-5-xen-amd64'
ramdisk     = '/boot/initrd.img-2.6.32-5-xen-amd64'

Ou utiliser le “pygrub” comme “bootloader”.

Bref:

Au reboot:

# dpkg --configure -a
# aptitude install vbetool
# aptitude install linux-modules-2.6.32-5-xen-amd64
# reboot
# dpkg-reconfigure tzdata  
# dpkg-reconfigure locales

Dans /root/.profile , commenter les lignes comme cela:

# Installed by Debian Installer:
#  no localization for root because C
#  cannot be properly displayed at the Linux console
# TJ --------------
#LANG=C
#LANGUAGE=C

Finir l'installation de “X” :

# aptitude install

FIXME: Sous VNC, le clavier rechigne a comprendre le pavé numérique…

PV Debian Wheezy

Voir ci-dessus et adapter.

Moins de defaut avec “Wheezy”. Mais le noyau etant “3.2”, il faut utiliser “pygrub” pour demarrer.

Autres

Autres images bootables possible:

non-free

Ajouter des pilotes non-free (et ça marche aussi pour Wheezy) :

Sources

blog/2013/04/28/debian_pxe.txt · Dernière modification : 2014/05/14 10:22 de thierry