Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Dernière révision Les deux révisions suivantes | ||
sysadmin:boot_pxe [2010/01/14 22:42] james ajout chemins relatifs + note |
sysadmin:boot_pxe [2012/07/18 16:09] james ajout liveCD 12.04 i386 et amd64 |
||
---|---|---|---|
Ligne 9: | Ligne 9: | ||
===== Installation du serveur de boot PXE ===== | ===== Installation du serveur de boot PXE ===== | ||
- | 2 parties : | ||
==== Configuration du serveur TFTP ==== | ==== Configuration du serveur TFTP ==== | ||
Pour servir les images, il faut un serveur TFTP (Trivial File Transfert Protocol) | Pour servir les images, il faut un serveur TFTP (Trivial File Transfert Protocol) | ||
- | <note> sous debian, le repertoire racine du tftpboot est /var/lib/tftpboot, mais nous utiliserons /tftpboot ici</note> | + | J'utilise tftpd-hpa qui s'installe grace a la commande suivante :<code>apt-get install tftpd-hpa</code> |
- | + | Vous avez remarqué que le demon est par défaut désactivé, nous allons le configurer pour démarrer automatiquement | |
- | TODO | + | <note> sous debian, le répertoire racine du tftpboot est /var/lib/tftpboot, mais nous utiliserons /tftpboot ici</note> |
+ | Activer le démarrage automatique du démon :<code>sed -i -e 's/RUN_DAEMON="no"/RUN_DAEMON="yes"/' /etc/default/tftpd-hpa</code> | ||
+ | Changer le repertoire racine :<code>sed -i -e 's,OPTIONS="-l -s /var/lib/tftpboot",OPTIONS="-l -s /tftpboot",' /etc/default/tftpd-hpa</code> | ||
+ | Création du répertoire racine :<code>mkdir /tftpboot</code> | ||
+ | Démarrage du service :<code>/etc/init.d/tftpd-hpa start</code> | ||
==== Configuration du serveur DHCP ==== | ==== Configuration du serveur DHCP ==== | ||
- | next-server | ||
- | TODO | + | Je ne vais pas reprendre ici toute la configuration, mais je vais lister les directives a ajouter par rapport a une configuration "normale" : |
+ | * ajouter en global : <code> | ||
+ | # pour le boot reseau | ||
+ | allow booting; | ||
+ | allow bootp; | ||
+ | </code> | ||
+ | * ajouter dans le subnet/shared-network/host de votre choix :<code> | ||
+ | #next-server is your network boot server | ||
+ | next-server 192.168.1.40; | ||
+ | filename "pxelinux.0"; | ||
+ | </code> | ||
+ | ou "192.168.1.40" est l'IP de votre serveur tftp et "pxelinux.0" le fichier à télécharger. | ||
+ | Vous pouvez bien sûr mixer les serveurs tftp et/ou les fichiers a télécharger en fonction des différents réseaux/machines. Vous pouvez également utiliser un nom DNS et non une IP. | ||
+ | Voici par exemple la déclaration complete d'un subnet et celle d'un hote utilisant une configuration différente de celle par défaut : | ||
+ | <code> | ||
+ | subnet 192.168.1.0 netmask 255.255.255.0 { | ||
+ | range 192.168.1.150 192.168.1.200; | ||
+ | option routers monrouteur.mondomaine.com; | ||
+ | option domain-name "mondomaine.com mondomaine.org"; | ||
+ | option domain-name-servers ns.mondomaine.com, ns2.mondomaine.com; | ||
+ | | ||
+ | next-server pxeserver.mondomaine.com; | ||
+ | filename "pxelinux.0"; | ||
+ | } | ||
+ | |||
+ | [....] | ||
+ | |||
+ | host athlon2600 { | ||
+ | hardware ethernet ab:cd:ef:00:01:02; | ||
+ | fixed-address mamachine.mondomaine.com; | ||
+ | filename "GEEXBOX/boot/pxelinux.0"; | ||
+ | } | ||
+ | </code> | ||
==== Mise en place de l'arborescence pour le boot PXE ==== | ==== Mise en place de l'arborescence pour le boot PXE ==== | ||
Ligne 42: | Ligne 76: | ||
* Création des liens symboliques (pour faciliter les eventuelles mises a jour de syslinux) :<code> | * Création des liens symboliques (pour faciliter les eventuelles mises a jour de syslinux) :<code> | ||
cd /tftpboot/ | cd /tftpboot/ | ||
- | ln -s syslinux-3.84 /tftpboot/syslinux | + | ln -s syslinux-3.84 syslinux |
ln -s syslinux/* /tftpboot/ | ln -s syslinux/* /tftpboot/ | ||
</code> | </code> | ||
Ligne 78: | Ligne 112: | ||
* images ISO de CDROM | * images ISO de CDROM | ||
- | === Fichiers images === | + | === Fichiers images (binaires)=== |
Ca tombe bien c'est les plus simples car elles sont directement bootables :-) : | Ca tombe bien c'est les plus simples car elles sont directement bootables :-) : | ||
Par exemple nous allons proposer le boot de l'utilitaire [[http://www.memtest.org/|MemTest86+]] qui permet de tester la RAM d'une machine et qui peut s'avérer tres utile ;-) | Par exemple nous allons proposer le boot de l'utilitaire [[http://www.memtest.org/|MemTest86+]] qui permet de tester la RAM d'une machine et qui peut s'avérer tres utile ;-) | ||
Ligne 102: | Ligne 136: | ||
* Ou encore : <code>append initrd=images/fichier.img bigraw</code> | * Ou encore : <code>append initrd=images/fichier.img bigraw</code> | ||
* Ou enfin pour une image de disquette Ghost, nécessitant le driver UNDI :<code>append keeppxe initrd=images/fichier.img</code> | * Ou enfin pour une image de disquette Ghost, nécessitant le driver UNDI :<code>append keeppxe initrd=images/fichier.img</code> | ||
+ | |||
+ | === Images ISO de liveCD/DVD === | ||
+ | |||
+ | <note>Toutes les ISOs de CD/DVD ne sont pas bootables en utilisant cette technique, cependant c'est le cas de toutes les images de liveCD / installateurs d'ubuntu "récente" (>= 10.04 lucid lynx) utilisant casper, comme dans l'exemple qui suit.</note> | ||
+ | |||
+ | Pour cela vous allez avoir besoin : | ||
+ | * de l'ISO du liveCD (ici ubuntu 10.04 version 32 bits) | ||
+ | * un serveur NFS préconfiguré | ||
+ | |||
+ | Admettons que vous ayez l'ISO dans "/export/iso/linux/ubuntu/10.04-Lucid_Lynx_LTS/ubuntu-10.04-desktop-i386.iso". | ||
+ | * Il faut tout d'abord monter l'ISO en loop (ce point montage devra ensuite etre accessible et exporté en NFS ) :<code> | ||
+ | mkdir /export/ISOs/ubuntu-10.04-desktop-i386 | ||
+ | mount -o loop,ro /export/iso/linux/ubuntu/10.04-Lucid_Lynx_LTS/ubuntu-10.04-desktop-i386.iso /export/ISOs/ubuntu-10.04-desktop-i386 | ||
+ | </code> | ||
+ | * Création de l'arborescence tftpboot :<code> | ||
+ | mkdir -p /tftpboot/ubuntu-live/10.04_lucid/i386/</code> | ||
+ | |||
+ | * Il ensuite faut copier les fichier noyau et initrd pour pouvoir les distribuer en PXE :<code> | ||
+ | cp /export/ISOs/ubuntu-10.04-desktop-i386/casper/initrd.lz /tftpboot/ubuntu-live/10.04_lucid/i386/ | ||
+ | cp /export/ISOs/ubuntu-10.04-desktop-i386/casper/vmlinuz /tftpboot/ubuntu-live/10.04_lucid/i386/ | ||
+ | </code> | ||
+ | |||
+ | * Il faut ensuite ajouter les lignes suivantes a votre fichier "/tftpboot/pxelinux.cfg/default" (ou autre : voir plus haut pour les subtilités) :<code> | ||
+ | # Ubuntu Lucid Lynx 10.04 LTS liveCD | ||
+ | label lucid-i386-liveCD | ||
+ | menu label Ubuntu 10.04 Lucid Lynx i386 Live^CD | ||
+ | kernel ubuntu-live/10.04_lucid/i386/vmlinuz | ||
+ | append boot=casper netboot=nfs nfsroot=10.31.192.28:/export/ISOs/ubuntu-10.04-desktop-i386/ initrd=ubuntu-live/10.04_lucid/i386/initrd.lz -- | ||
+ | </code> | ||
+ | ou "10.31.192.28" est l'IP de votre serveur NFS distribuant l'image ISO montée dans "/export/ISOs/ubuntu-10.04-desktop-i386/" : adaptez les chemins le cas échéant. | ||
+ | |||
+ | * Voici pour info la ligne correspondant à l'export NFS (à ajouter dans le fichier /etc/exports du serveur correspondant) :<code> | ||
+ | # pour les liveCD en NFS / PXE | ||
+ | /export/ISOs/ubuntu-10.04-desktop-i386 *(ro,no_root_squash,nohide,async,no_subtree_check) | ||
+ | </code> | ||
==== Industrialisation de la chose ==== | ==== Industrialisation de la chose ==== | ||
Ligne 109: | Ligne 178: | ||
* Fichier de configuration de PXE Linux | * Fichier de configuration de PXE Linux | ||
* Pour créer un fichier de configuration propre à chaque machine, deux choix de création s'offrent à nous : | * Pour créer un fichier de configuration propre à chaque machine, deux choix de création s'offrent à nous : | ||
- | * 00-26-54-42-b1-d3-d4 (adresse MAC de la carte reseau, donc la machine) | + | * 01-00-26-54-42-b1-d3-d4 ("01-" suivi de l'adresse MAC de la carte reseau, donc la machine) |
* C0A80003 (qui correspond a l'IP de la machine "192.168.0.3" en hexadecimal) | * C0A80003 (qui correspond a l'IP de la machine "192.168.0.3" en hexadecimal) | ||
* Il faut bien sur privilégier le premier, car 'adresse IP peut ne pas etre fixe (attribution d'adresse via DHCP sans réservation par exemple) alors que l'adresse MAc est quant a elle fixe et unique. | * Il faut bien sur privilégier le premier, car 'adresse IP peut ne pas etre fixe (attribution d'adresse via DHCP sans réservation par exemple) alors que l'adresse MAc est quant a elle fixe et unique. | ||
Ligne 151: | Ligne 220: | ||
Je vous conseille les lectures suivantes : | Je vous conseille les lectures suivantes : | ||
* http://www.gentilkiwi.com/documentations-s11-t-pxe.htm | * http://www.gentilkiwi.com/documentations-s11-t-pxe.htm | ||
+ | * http://www.isalo.org/wiki.debian-fr/index.php?title=PXE | ||
+ | * http://www.syslinux.org/wiki/index.php/PXELINUX (anglais) | ||
+ | * http://www.syslinux.org/wiki/index.php/MEMDISK#EXTLINUX.2FISOLINUX.2FPXELINUX.2FSYSLINUX | ||
+ | * http://random.kakaopor.hu/ubuntu-12-04-live-nfspxe-boot-diskless-casper-kept | ||
+ | |||
+ | ===== Aller plus loin ===== | ||
+ | * http://drbl.sourceforge.net/ (Diskless Remote Boot in Linux) | ||
+ | * http://ipxe.org/start (iPXE permet de booter en iSCSI, AoE, http, .... et peut s'utiliser avec chainloader ) | ||
+ | |||
+ | ===== liveCD ubuntu 12.04 en PXE ===== | ||
+ | Quelques particularités concernant le boot d'un liveCD d'ubuntu 12.04 precise en PXE : | ||
+ | * Par defaut la commande nfsmount utilisée pour monter le / utilise maintenant NFSv4 et non plus NFSv3. Si comme moi vous voulez continuer a utiliser un serveur NFSv3 pour ca, lisez la suite. | ||
+ | * L'initrd du liveCD de la version i386 (la version amd64 n'a pas ce probleme) ne fonctionne pas : certainement a cause d'un probleme de génération de l'initrd pour les noyaux "-generic-pae", voir suite pour regénérer un initrd fonctionnel (sans le support du PAE donc) | ||
+ | |||
+ | ==== Faire fonctionner un boot de liveCD PXE ubuntu 12.04 en NFSv3 ==== | ||
+ | * comme d'habitude récupérer l'image iso du liveCD | ||
+ | * il faut ensuite la monter et rendre ce point de montage accessible en NFS comme ci dessus : | ||
+ | * <code> | ||
+ | # mkdir /export/ISOs/ubuntu-12.04-desktop-amd64 | ||
+ | # mount -o loop,ro /export/iso/linux/ubuntu/12.04_precise/ubuntu-12.04-desktop-amd64.iso /export/ISOs/ubuntu-12.04-desktop-amd64 | ||
+ | </code> | ||
+ | * ajouter l'export NFS :<code> | ||
+ | # echo "/export/ISOs/ubuntu-12.04-desktop-amd64 *(ro,no_root_squash,nohide,async,no_subtree_check)" >> /etc/exports | ||
+ | # /etc/init.d/nfs-kernel-server reload</code> | ||
+ | |||
+ | Voila pour la partie facile, maintenant il va falloir extraire l'initrd, et en modifier le contenu pour appeler la commande "mount -f nfs" au lieu de la commande "nfsmount" et ainsi utiliser le NFSv3 au lieu du NFSv4 : | ||
+ | * décompression de l'initrd fourni :<code> | ||
+ | $ mkdir /tmp/ubuntu_boot | ||
+ | $ cd /tmp/ubuntu_boot | ||
+ | $ cat /export/ISOs/ubuntu-12.04-desktop-amd64/casper/initrd.lz | lzcat | cpio -i | ||
+ | </code> | ||
+ | * modifier le script en applicant le patch suivant : <code> | ||
+ | --- ./scripts/casper.orig 2012-05-15 15:22:04.000000000 +0200 | ||
+ | +++ ./scripts/casper 2012-05-15 15:24:45.000000000 +0200 | ||
+ | @@ -223,11 +223,11 @@ do_nfsmount() { | ||
+ | NFSOPTS="" | ||
+ | fi | ||
+ | |||
+ | - [ "$quiet" != "y" ] && log_begin_msg "Trying nfsmount -o nolock -o ro ${NFSOPTS} ${NFSROOT} ${mountpoint}" | ||
+ | + [ "$quiet" != "y" ] && log_begin_msg "Trying mount -t nfs -o nolock -o ro ${NFSOPTS} ${NFSROOT} ${mountpoint}" | ||
+ | # FIXME: This while loop is an ugly HACK round an nfs bug | ||
+ | i=0 | ||
+ | while [ "$i" -lt 60 ]; do | ||
+ | - nfsmount -o nolock -o ro ${NFSOPTS} "${NFSROOT}" "${mountpoint}" && rc=0 && break | ||
+ | + mount -t nfs -o nolock -o ro ${NFSOPTS} "${NFSROOT}" "${mountpoint}" && rc=0 && break | ||
+ | sleep 1 | ||
+ | i="$(($i + 1))" | ||
+ | done</code> ou encore :<code>sed -i -e 's/nfsmount -o nolock/mount -t nfs -o nolock/' /tmp/ubuntu_boot/scripts/casper</code> | ||
+ | * Recompresser l'initrd :<code>find . | cpio --quiet --dereference -o -H newc | lzma -c9 > /tmp/initrd_new.lz</code> | ||
+ | * Rendre ce nouvel initrd ainsi que le noyau accessible en tftp en les copiant a la racine du serveur tftp :<code> | ||
+ | # mkdir -p /tftpboot/ubuntu-live/12.04_precise/amd64/ | ||
+ | # cp /tmp/initrd_new.lz /tftpboot/ubuntu-live/12.04_precise/amd64/ | ||
+ | # cp /export/ISOs/ubuntu-12.04-desktop-amd64/casper/vmlinuz /tftpboot/ubuntu-live/12.04_precise/amd64/ | ||
+ | </code> | ||
+ | * Il faut ensuite ajouter les lignes suivantes a votre fichier "/tftpboot/pxelinux.cfg/default" (ou autre : voir plus haut pour les subtilités) :<code> | ||
+ | # Ubuntu Precise Pangolin 12.04 liveCD | ||
+ | label precise-amd64-liveCD | ||
+ | menu label Ubuntu 12.04 ^Precise Pangolin amd64 LiveCD | ||
+ | kernel ubuntu-live/12.04_precise/amd64/vmlinuz | ||
+ | append boot=casper netboot=nfs nfsroot=10.31.192.28:/export/ISOs/ubuntu-12.04-desktop-amd64/ initrd=ubuntu-live/12.04_precise/amd64/initrd_nfsmount.lz -- debian-installer/locale=fr_FR keyboard-configuration/layoutcode=fr keyboard-configuration/variantcode=oss | ||
+ | </code> | ||
+ | ou "10.31.192.28" est l'IP de votre serveur NFS distribuant l'image ISO montée dans "/export/ISOs/ubuntu-12.04-desktop-amd64/" : adaptez les chemins le cas échéant. | ||
+ | |||
+ | ==== La même chose mais pour un liveCD i386 ==== | ||
+ | Pour la version i386, l'initrd présent sur le cdrom ne fonctionne pas (en tous cas chez moi :p) : il n'arrive pas a charger les modules lors du boot , comme par exemple le fichier /lib/modules/3.2.0-23-generic/modules.dep. | ||
+ | |||
+ | |||
+ | Il a donc fallu générer un nouvel initrd en utilisant le noyau linux-image-3.2.0-23-generic-generic et non pas le linux-image-3.2.0-23-generic-pae d'origine avant de réaliser les opérations décrites ci dessus. | ||
+ | |||
+ | |||
+ | Pour ce faire, il faut prendre une machine ubuntu 12.04 i386 (dans mon cas une simple VM utilisant l'iso du liveCD 12.04 i386) et : | ||
+ | <code># apt-get install linux-image-3.2.0-23-generic | ||
+ | # /usr/sbin/mkinitramfs -o /tmp/initrd_3.2.0-23-generic.lz -c lzma 3.2.0-23-generic</code> | ||
+ | Il ne restait donc ensuite plus qu'a en extraire le contenu, patcher le script scripts/casper pour utiliser le NFSv3 et recompresser | ||
+ |