15/05/2010

PXE : Y a-t-il un bootloader sur l’réseau ?

Du diskless par distribution « live »

Concrètement qu’est-ce qu’il nous manque pour avoir du vrai diskless et non juste un installeur ? Il nous faut un kernel qui puisse récupérer son root (pas l’utilisateur mais son système de fichier) soit par le réseau soit par un initrd. Je vais commencer par la seconde possibilité avec Tiny Core Linux. Ce qu’on va faire c’est booter un kernel et lui fournir un initrd qui lui servira de racine. Les changements ne seront pas conservés après reboot, comme une distribution sur LiveCD.

On va donc faire ce système avec Tiny Core Linux. Il s’agit d’une toute petite distro avec interface graphique qui tient dans 10 Mo. Ça se récupère ici. Et ça s’intègre en moins de deux sur votre PXE. Mettez le bzImage et le tinycore.gz dans (par exemple) /var/tftp/distros/tinycore et ajoutez ces quelques lignes à votre menu :

LABEL Tiny_Core_Linux
         MENU LABEL Tiny Core Linux
         KERNEL distros/tinycore/bzImage
         APPEND initrd=distros/tinycore/tinycore.gz max_loop=256

Et c’est bootable. Cette distrib est pratique quand on veux un shell vite fait. C’est juste dommage de ne pas avoir de client SSH pré-installé mais c’est une autre histoire.

Un linux vrai de vrai avec root en nfs

Maintenant au lieu de se limiter à un kernel et un initrd, on va fournir l’arborescence complète. En fait la racine sera un export NFS. Le système sera donc utilisable comme un nunux classique. Mieux encore, vous pourrez l’utiliser sur plusieurs PC (non simultanément). Allez c’est parti pour se monter une petite Debian en mois de deux.

D’abord on installe les paquets nécessaires :

# emerge debootstrap nfs-utils

Debootstrap est un script recréant une debian (ou ubuntu) à partir d’un miroir. Si vous voulez monter une autre distrib, pas la peine de le prendre. Nfs-utils apporte quelques outils pour la mise en place du serveur NFS. Il faut que votre kernel possède le module nfs-server.

Maintenant créons la Debian de toute pièce :

# mkdir /var/exports/debian/lenny
# debootstrap lenny /var/exports/debian/lenny

Après une pause bien méritée, noyautons cette petite. Soit vous vous faites votre kernel aux petits oignons, soit vous prenez celui de la Debian qu’il faudra installer par chroot. Bien évidemment, le mieux est de le compiler soi-même en n’oubliant surtout pas filesystems/network file systems/root filesystems on nfs. vous placerez ce kernel non pas dans l’export NFS (enfin ce n’est pas indispensable) mais dans le tftp /var/tftp/distros/debian/kernel_perso.

Créez l’export NFS dans le fichier

/etc/exports
/var/exports/debian/lenny 10.0.0.0/8(rw,async,no_subtree_check,no_root_squash,no_all_squash)

Donc là je déclare tout le dossier contenant la lenny visible pour tout mon réseau local (en 10/8) avec des droits de lecture/écriture.
Il ne reste plus qu’à ajouter une entrée dans le menu du PXE.

LABEL Debian
MENU LABEL Debian NFS
    KERNEL distros/debian/kernel_perso
    APPEND ip=dhcp root=/dev/nfs nfsroot=10.0.0.1:/var/exports/debian/lenny

Et il ne reste plus qu’à booter et rebooter !

What else ?

Bon voilà vous avez vu comment monter votre joli PXE. Vous pouvez donc installer ure distrib sur ce petit EeePC sans lecteur CD. Vous pouvez réparer ce grub que vous venez de dégommer sans sortir votre clé USB bootable. Pour aller plus loin, sachez qu’il est possible par mesure de sécurité (ou commodité) de proposer un PXE différent pour chaque machine en fonction de sa MAC.

  1. khemael
    | #1

    Et pour ceux qui cherchent la ptite bête qui les empeche de faire correctement un PXE LiveCD Gentoo, c’est par ici :

    http://blog.dastrup.com/?p=12

    A adapter car un peu vieillo.

  2. | #2

    wget ftp://machinblabla.com/truc -qO c’est mieux…sinon ça ne met pas le fichier au bon endroit 😉

  3. | #3

    encore une petite coquille :
    # wget http://www.memtest.org/download/4.00/memtest86+-4.00.bin.gz
    tar xvf memtest86+-4.00.bin.gz
    # cp memtest86+-4.00/precomp.bin /var/tftp/tools/memtest

    on pourrait mettre une version à jour :
    # wget http://www.memtest.org/download/4.10/memtest86+-4.10.bin.gz
    et ceci n’est pas un tar
    gzip -d memtest86+-4.10.bin.gz && cp memtest86+-4.10.bin /var/tftp/tools/memtest

  4. | #4

    encore une petite coquille (désolé, le truc pour éditer ne fonctionne pas très bien…)
    reboot.c32 se trouve (dans la version à jour de syslinux -3.86-) dans syslinux-3.86/com32/modules/reboot.c32

  5. j0ck3r
    | #5

    Génial cet article ! Merci ^^

  6. | #6

    Encore un petit commentaire pour signaler que les manips sont exactement les même pour Ubuntu (étonnant non ?) en utilisant l’initrd.gz et le linux fournis par http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/ (pour Lucid Lynx AMD64, je vous laisse le soin de parcourir les répertoires pour les versions i386 et autres distribs)

    Prochaine étape : un PXE pour l’install de Windows ?

  7. | #7

    arghhh quel dommage de ne pas avoir continué le tuto sur la compilation des kernel pour le live nfs…
    je ne suis pas un expert de la compil, encore moins du debootstrap…je suis donc bloqué avec Tiny Core Linux…
    Une MAJ est-elle prévue ? (nb : j’ai remarqué que les suggestions de corrections que j’avais faites n’ont pas été intégrées au site)

  8. Lord
    | #8

    Sn4kY → merci j’ai corrigé pour le reboot.c32 . Par contre, il existe bien une version tarball de syslinux (j’ai pris l’habitude de les préférer).
    Concernant la compil du kernel c’est pas trop difficile, je te conseille ce tuto qui est prévu pour gentoo mais qui devrait passer comme sur des roulettes pour tout noyau nunux : http://www.gentoo.fr/install/configuration-noyau.htm . Il te faudra donc activer le support de root nfs dans les filesystems.
    Concernant Debootstrap, c’est encore plus simple puisqu’il s’agit en fait d’un script qui se charge de créer une arboressence debian ou ubuntu en téléchargeant sur internet tout ce qu’il faut :
    # debootstrap version_de_debian /endroit/ou/l’installer http://miroir.debian.que.tu.veux
    N’hésites pas si tu as encore des soucis (par irc serait plus simple).

  9. | #9

    @ Lord :
    je pense que je vais fortement m’inspirer du tuto pour rédiger le mien (avec des modifs particulières, notamment l’implémentation d’un apt-cacher)
    je mettrai bien sur en source geekfault.

  10. | #10

    OK, je crois que je viens de capter, en fait l’export NFS du debootstrap et le “kernel_perso” que tu décrit ici n’ont rien à voir…J’avais compris qu’on obtenait le “kernel_perso” en compilant je ne sais quoi a partir de debootstrap…d’où mon incompréhension…
    mais ayé, j’ai capté. effectivement, c’est mieux de se refaire un petit noyaux, aux oignons 🙂

  11. | #11

    Hop hop ! encore un petit feedback, vu que j’ai bien galéré, je vous en fait profiter.
    Pour pouvoir activer THE option “Root File system on NFS” vous devez au préalable activer DHCP et BOOTP (tant qu’à faire) dans “Networking” —> “Networking Options” —> “IP: Kernel level autoconfiguration”
    ensuite ça semble OK, (je pense que le module pour la carte réseau de mon eeePC 900 n’est pas intégré)

  12. | #12

    2uajz4

  13. | #13

    mc6v7p

  14. | #14

    qol5kb

  1. | #1
  2. | #2