NanoBSD avec / en nfs

Dans un précédent post j’expliquais comment utiliser le script /usr/src/tools/tools/nanobsd.sh des sources FreeBSD pour construire un système FreeBSD pour l’embarqué.

Dans le processus de création d’un tel système, il peut être utile de tester son système sans utiliser la carte flash. On peut adapter le système en le testant sur NFS et n’écrire l’image finale sur la carte flash que quand on a fini.

kernel

Il faut compiler le kernel avec support NFS et NFS comme système de fichier racine

options NFSCLIENT
options NFS_ROOT

dhcpd.conf

Avec l’option root-path on spécifie le path du montage nfs au client dhcp.

filename "pxeboot";
next-server 192.168.0.20; # le serveur tftpd
option root-path "192.168.0.20:/usr/obj/nanobsd.solo/_.w; # le montage NFS

inetd.conf

Le bootloader pxeboot est récuperé via tftp, lui même activé par inetd

tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /tftpboot

pxeboot

On compile pxeboot avec un baud de 115200 sur la sortie série.

cd /usr/src/sys/boot
make BOOT_PXELDR_ALWAYS_SERIAL=1 BOOT_COMCONSOLE_SPEED=115200
mkdir /tftpboot
cp i386/pxeldr/pxeboot /tftpboot

nfs

Juste une ligne dans /etc/exports, 192.168.0.1 étant l’IP donnée par mon serveur dhcp à la machine cible.

/usr/obj/nanobsd.solo/_.w -alldirs -maproot=root 192.168.0.1

rc.conf

On active tout ça dans /etc/rc.conf

inetd_enable="YES"
nfs_server_enable="YES"
rpcbind_enable="YES"
mountd_flags="-r"
dhcpd_enable="YES"

Et on démarre les services :

/usr/local/etc/rc.d/isc-dhcpd start
/etc/rc.d/inetd start
/etc/rc.d/rpcbind start
/etc/rc.d/nfsd start

Maintenant il faut modifier le système généré par NanoBSD car il s’attend à avoir la carte flash comme système de fichier.

J’ai juste crée une fonction dans ma config nanobsd (fonction à enlever quand on crée les images disques bien entendu) :

post_nfsroot {
rm ${NANO_WORLDDIR}/etc/fstab
rm ${NANO_WORLDDIR}/conf/default/etc/remount
echo "" > ${NANO_WORLDDIR}/conf/base/etc/fstab
}
late_customize_cmd post_nfsroot

Voilà, n’oubliez pas l’option -i pour gagner le temps de construction des images disques et bon debug :)