Table des matières
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 serveurTFTP
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'onchroot
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 |
# /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"; }
menu
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/
menu pxe
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
Où 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 là
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
menu pxe
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
: 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
non-free
Ajouter des pilotes non-free (et ça marche aussi pour Wheezy) :