Unofficial NanoBSD technical resources
Here are a list of docs and tutorials about NanoBSD:
It's a shell script (/usr/src/tools/tools/nanobsd/) that generate embedded FreeBSD image disk.
After using NanoBSD, you will found a full disk image (_.disk.full) that contains 2 partitions (p1 and p2) (both copy of _.disk.image file). The file _.disk.image is the light FreeBSD filesystem (in diskless mode). Using 2 partitions permit to use a simple and safe upgrading process: The new _.disk.image file is copied over the non-active partition, and the bootloader is modified for boot on the non-active partition at the next boot. There are the scripts updatep1 and updatep2 for this task.
NanoBSD manage flash device and prevent fsck by mounting the filesystem read-only. For saving configuration file, you need to copy /etc into /conf: There is the script save_cfg for this task.
Here are the command line options of NanoBSD:
Usage: $0 [-bikqvw] [-c config_file] -b suppress builds (both kernel and world) -i suppress disk image build -k suppress buildkernel -n add -DNO_CLEAN to buildworld, buildkernel, etc -q make output more quite -v make output more verbose -w suppress buildworld -c specify config file -h Display usage information.
Here are the functions steps:
| Name | Value (in BSDRP) | Description |
|---|---|---|
| CONF_BUILD | Options to put in make.conf during buildworld only | |
| CONF_WORLD | A big list of WITHOUT_ | Options to put in make.conf during both build- & installworld |
| CONF_INSTALL | A big list of WITHOUT_ too | Options to put in make.conf during installworld only |
| MAKEOBJDIRPREFIX | /usr/obj/nanobsd.BSDRP.{ARCH} | object directory |
| NANO_ARCH | i386/amd | Target architecture |
| NANO_BOOT0CFG | -o packet -s 1 -m 3 | Boot0cfg configuration mode |
| NANO_CONFSIZE | 2048 | Size of configuration file system in 512 bytes sectors |
| NANO_CUSTOMIZE | Customize commands | |
| NANO_DATASIZE | 2048 | Size of data file system in 512 bytes sectors |
| NANO_DISKIMGDIR | /usr/obj/nanobsd.BSDRP.{ARCH} | The directory to put the final images |
| NANO_DRIVE | ad0 (TO ADD in BSDRP make!) | The drive name of the media at runtime |
| NANO_GLABEL_SYS | BSDRP | glabel name for system partition |
| NANO_GLABEL_CFG | cfg | glabel name for configuration partition |
| NANO_GLABEL_DATA | data | glabel name for data partition |
| NANO_IMAGES | 2 | Number of code images on media (1 or 2) |
| NANO_IMGNAME | BSDRP.img | The default name for any image we create |
| NANO_INIT_IMG2 | 0 | What to do with the second image partition: 0 (empty), 1 (copy twice the image) |
| NANO_KERNEL | BSDRP-I386 / BSDRP-AMD64 | Name of the kernel config file |
| NANO_LATE_CUSTOMIZE | Late customize commands | |
| NANO_MAKE_CONF_INSTALL | /usr/obj/nanobsd.BSDRP.{ARCH}/make.conf.install | |
| NANO_MAKE_CONF_BUILD | /usr/obj/nanobsd.BSDRP.{ARCH}/make.conf.build | |
| NANO_MD_BACKING | file | Backing type of md(4) device (file or swap) |
| NANO_MEDIASIZE | 1200000 | Target media size in 512 bytes sectors |
| NANO_NAME | BSDRP | Name of the obj dir |
| NANO_NEWFS | -b 4096 -f 512 -i 8192 -O1 -m 2 -U | Newfs paramters to use |
| NANO_OBJ | /usr/obj/nanobsd.BSDRP.{ARCH} | Object tree directory |
| NANO_PACKAGE_DIR | /usr/src/tools/tools/nanobsd/BSDRP/Pkg | Where cust_pkg() finds packages to install |
| NANO_PMAKE | make -j 3 | Parallel Make |
| NANO_RAM_ETCSIZE | 10204 | Size of the /etc ramdisk in 512 bytes sectors |
| NANO_RAM_TMPVARSIZE | 20480 | Size of the /tmp+/var ramdisk in 512 bytes sectors |
| NANO_SRC | /usr/src | Source tree directory |
| NANO_TOOLS | tools/tools/nanobsd/BSDRP | Where nanobsd additional files live under the source tree |
| NANO_WORLDDIR | /usr/obj/nanobsd.BSDRP.{ARCH}/_.w | Target World directory |
| Name | Description |
|---|---|
| build_kernel | Copy kernel config file and Build Kernel |
| build_world | Run Build World |
| clean_build | Delete and create object directory |
| clean_world | Clean and create object directory |
| cust_install_files | Copy all files under Files to nanobsd target |
| FlashDevice | Load FlashDevice.sub |
| install_world | Install all binary (make installworld) |
| install_etc | Install /etc (make distribution |
| install_kernel | Install kernel (make installkernel) |
| make_conf_build | Construct build make.conf using $CONF_WORLD and $CONF_BUILD |
| make_conf_install | Construct install make.conf using $CONF_WORLD and $CONF_BUILD |
| prune_usr | Remove all empty directories in target /usr |
| run_customize | run customize scripts (commands in $NANO_CUSTOMIZE) |
| run_late_customize | run late customize scripts (commands in $NANO_LATE_CUSTOMIZE and cust_ functions) |
| setup_nanobsd | configure nanobsd setup: Move /usr/local/etc to /etc/local |
| setup_nanobsd_etc | configure target nanobsd /etc: enable diskless, enable r/o of /, create fstab |
| UsbDevice | USB device geometries |
| create_${NANO_ARCH}_diskimage | Build disk image (partition, format, bootloader, etc.) |
| last_orders | Empty function to be customized by user (ex: copy diskimage to other place) |
| Name | Description |
|---|---|
| _.bk | Build Kernel log |
| _.bw | Build World log |
| _.di | Disk image creation log |
| _.dl | nanobsd setup creation log (/etc, /conf, etc..) |
| _.du | nanobsd disk usage (du) output |
| _.env | All environnement used during nanobsd runs |
| _.etc | Install etc log |
| _.fdisk | File used for fdisk the nanoBSD image |
| _.ik | Install kernel log files |
| _.iw | Install world log files |
| _.mtree | Light mtree file of the nanoBSD image |
This patches is an improvement of the method used by Gitoyen NanoBSD router.
It replaces the installation of package by compiling ports during NanoBSD image build: This permit to add ports during build process of NanoBSD images.
This patch support cross-compilation i386 ports from an amd64 release.
You can found this patches as the function add_port () in the BSDRP nano configuration file.
But the best solution should to use poudriere to generate packages.