Mijn aanpak met 8.1-RELEASE heb ik gebruik gemaakt van wat 'vieze trucjes' die nullfs dingen en chroot.Bouwen in een jail heb ik niet voor elkaar gekregen omdat mdconfig i386 (32bit) niet overweg kan met een amd64 (64bit) /dev/mdctl handle. Verder kan 'stock' nanobsd.sh ook niet cross-builden en maakt wat vervelende aannamems van de architecture van het systeem waar het op draait. Ik maak dus de ports en het OS in de chroot en doe de instalatie in het 'master' os.
master# svn checkout http://svn.wirelessleiden.nl/svn/code/iris/trunk/nanobsd /root/nanobsd
master# mkdir -p /usr/local/jail/i386
master# csup -h cvsup.nl.freebsd.org /usr/share/examples/cvsup/standard-supfile
master# cd /usr/src
master# make buildworld TARGET=i386
master# make installworld TARGET=i386 DESTDIR=/usr/local/jail/i386
master# kldload nullfs
master# mkdir -p /usr/local/jail/i386/usr/ports ; mount_nullfs /usr/ports /usr/local/jail/i386/usr/ports
master# mkdir -p /usr/local/jail/i386/usr/obj ; mount_nullfs /usr/obj /usr/local/jail/i386/usr/obj
master# mkdir -p /usr/local/jail/i386/root/nanobsd ; mount_nullfs /root/nanobsd /usr/local/jail/i386/root/nanobsd
master# chroot /usr/local/jail/i386/
jail# setenv UNAME_m i386
jail# setenv UNAME_p i386
jail# /root/nanobsd/tools/package-build.sh
jail# patch -d /usr/src/sys/dev/usb -i /root/nanobsd/misc/patches/usbdevs.patch
jail# patch -d /usr/src/sys/dev/usb/net -i /root/nanobsd/misc/patches/if_udav.c.patch
jail# sh /usr/src/tools/tools/nanobsd/nanobsd.sh -c /root/nanobsd/cfg/nanobsd.wleiden
Tip: This build will fail ones it tries to play around with memory disks, this actually means we are ready for the next step.
jail# exit
master# setenv CFG_ROOT_PASSWORD dd if=/dev/random bs=10k count=10 | tr -cd '[a-zA-Z0-9]' | cut -c -15
master# echo $CFG_ROOT_PASSWORD
master# sh /usr/src/tools/tools/nanobsd/nanobsd.sh -c /root/nanobsd/cfg/nanobsd.wleiden
master# ls -alh /usr/obj/nanobsd.wleiden/_.disk.*
References:
- Patches are needed for the USB devices we use, but who are not in a stock 8.1-RELEASE-p2.
- Oficial node image building page http://www.wirelessleiden.nl/projects/nodefactory/wiki/NanoBSD
- Trick the ports building architecture using UNAME_* http://lists.freebsd.org/pipermail/freebsd-arch/2009-January/008857.html