Recently, I needed to create a bootable i386 image. The easiest way was to build one on my amd64. Here's what I did. I setup my environment for the build (steps 1-3), built FreeBSD/i386 userland and kernel (steps 4 and 5), prepared the flash (steps 6-11), installed userland and the kernel (steps 12 and 13), added the extra files needed for boot (steps 14-18). The detailed commands follow:
- setenv MAKEOBJDIRPREFIX /blah
- setenv TARGET i386
- setenv TARGET_ARCH i386
- make buildworld
- make buildkernel KERNCONF=GENERIC
- fdisk -I da0
- fdisk -B da0
- bsdlabel -w da0s1 auto
- bsdlabel -B da0s1
- newfs /dev/da0s1a
- mount /dev/da0s1a /mnt
- make installworld DESTDIR=/mnt
- make installkernel DESTDIR=/mnt KERNCONF=GENERIC INSTALL_NODEBUG=t
- make distrib-dirs DESTDIR=/mnt
- make distribution DESTDIR=/mnt
- echo /dev/da0s1a / ufs rw 1 1 > /mnt/etc/fstab
- echo ifconfig_DEFAULT=DHCP > /mnt/etc/rc.conf
- echo hostname=demo >> /mnt/etc/rc.conf
I put all this on an SD card and inserted that into an usb adapater and booted the laptop with it. FreeBSD's base system isn't too big these days, only 205MB for a full system.
% df /mnt
Filesystem 1024-blocks Used Avail Capacity Mounted on
/dev/da0s1a 484822 205570 240468 46% /mnt
This can easily be trimmed, but with a 512MB SD card for $5 at Office Max, there's little point in trimming for the project I needed the flash for. I just needed something that I could boot to transition my FreeBSD/amd64 laptop to a FreeBSD/i386 laptop.
If one needed to reduce the amount of space used by an installation, then there's a number of options than can be used to reduce the footprint of the system. In my experience, it is best to build everything without these options, then use the WITHOUT_* options on the installworld step to keep the image size down. It is easy to cut FreeBSD's footprint in half with these options. In addition, the kernel is 28MB with all its modules, and this can easily be reduced below 5MB in most cases.
nanobsd can be used to automate this process, as can TinyBSD. I'll save for another column the techniques I have used in the past to reach 16MB.