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 :)