Although FreeBSD forms a complete operating system, there is nothing that forces you to use the system exactly as we have packaged it up for distribution. We have tried to design the system to be as extensible as possible so that it can serve as a platform that other commercial products can be built on top of. The only “rule” we have about this is that if you are going to distribute FreeBSD with non-trivial changes, we encourage you to document your enhancements! The FreeBSD community can only help support users of the software we provide. We certainly encourage innovation in the form of advanced installation and administration tools, for example, but we cannot be expected to answer questions about it.
Many sites have complex requirements that may require additional kernel modules or userland tools be added to the installation floppies. The “quick and dirty” way to accomplish this would be to modify the staging directory of an existing make release build hierarchy:
Apply patches or add additional files inside the chroot release build directory.
rm ${CHROOTDIR}/usr/obj/usr/src/release/release.[59]
rebuild sysinstall(8), the kernel, or whatever parts of the system your change affected.
chroot ${CHROOTDIR} ./mk floppies
New release floppies will be located in ${CHROOTDIR}/R/stage/floppies.
Alternatively, the boot.flp make target can be called, or the filesystem creating script, src/release/scripts/doFS.sh, may be invoked directly.
Local patches may also be supplied to the release build by defining the LOCAL_PATCH variable in make release.
The FreeBSD system installation and configuration tool, sysinstall(8), can be scripted to provide automated installs for large sites. This functionality can be used in conjunction with Intel® PXE[12] to bootstrap systems from the network, or via custom boot floppies with a sysinstall script. An example sysinstall script is available in the CVS tree as src/usr.sbin/sysinstall/install.cfg.