mercredi 15 février 2017

NFS Boot pour Raspberry Pi

Si vous avez mis en place le serveur NFSv2 comme indiqué dans ce post et si vous avez mis en place le DHCP et le serveur TFTP comme indiqué dans cet autre post alors votre Raspberry boote via le réseau mais s’arrête avec  la terrible erreur :

PANIC Unable to mount root fs. 

Pour améliorer cela il faut faire 3 choses :

1) Dans le répertoire servit par le serveur TFTP (qui est l’équivalent de la partition FAT d’une sd-card) il faut créer le fichier cmdline.txt avec comme contenu cette unique ligne :

root=/dev/nfs nfsroot=192.168.0.100:/var/nfs/rpi-fs rw ip=dhcp rootwait 

(Remplacez 192.168.0.100 par l’ip de votre serveur NFSv2)


2) Quand nous avions configuré le serveur NFS nous avions prévu d’exporter le répertoire /var/nfs/rpi-fs Ce qui se traduit dans le fichier /etc/exports par cette ligne :

/var/nfs/rpi-fs 192.168.0.0/24(rw,sync,no_root_squash,no_all_squash,no_subtree_check)

Il faut maintenant remplir ce répertoire avec ce qu’il y a dans la partition ‘/’ d’une sd-card.
Une fois  le fichier kernel7.img chargé via TFTP, le noyau prendra le contrôle et chargera le reste en utilisant le serveur NFSv2 désigné sur sa ligne de commande par nfsroot=aa.bb.cc.dd:/path

Attention: c’est bien NFS version 2.
Version très ancienne et désactivée sur certaines distributions linux comme CentOS.

3) Dans les fichiers copiés depuis une sdcard dans le repertoire /var/nfs/rpi-fs il faut au minimum éditer le fichier /var/nfs/rpi-fs/etc/mtab et y mettre en commentaire les mount de /boot, de / et de swap. (/boot est maintenant géré par la partie TFTP, / est deja monte via nfs, et il n'y a pas de swap. Si nécessaire on pourrait créer une partition de swap en deuxième partition sur la sdcard).

Truc: Pour éviter que la phase de login n'efface l’écran et fasse disparaître les log du boot il faut éditer le fichier /var/nfs/rpi-fs/usr/lib/systemd/system/getty@.service et dans la section [service] remplacer TTYVTDisallocate=yes par TTYVTDisallocate=no
Ainsi, quand vous serez au niveau du "login: " vous pourrez remonter dans les logs du boot avec SHIFT+PgUP et SHIFT+PgDown.

Une fois ces 3 opérations effectuées vous pouvez mettre votre Raspberry Pi sous tension et observer la procédure de boot à l’écran. Il y aura des erreurs mais vous devriez arriver jusqu'au un login.

Une analyse du trafic réseau avec tcpdump (ou wireshark) montre que les premières opérations réseaux du noyau sont:
- DHCP  pour obtenir (a nouveau) une ip.
- ARP  pour trouver l'adresse mac du serveur nfs.
- Portmap  pour obtenir le port du service 'mount'.
- MOUNT de /var/nfs/rpi-fs
- Portmap pour obtenir le port du service NFS
- NFS pour charger les fichiers

Les premiers répertoires et fichiers chargés via NFS sont
- dev
- sbin
- usr/bin
- init
- ../lib/systemd/systemd
- ld-linux-armhf.so.3
...

Pour analyser le trafic réseau, le plus efficace, est de capturer dans un fichier avec tcpdump sur la machine qui fait serveur NFS et de visualiser avec Wireshark.


Aucun commentaire:

Enregistrer un commentaire