Transition to Git is in progress
As of r364891 the release script only supports Git and subsequently rendering the following instructions not working as intended however some functionality is still not implemented therefore this page wont be updated until they are.
A tutorial on how to build images for arm devices using FreeBSD's release building infrastructure.
Download source
svnlite checkout https://svn.freebsd.org/base/head /usr/src
Note: it's preferred that you keep /usr/src and the version you're trying to build in sync. To checkout a specific revision use -rXXX where XXX is the revision
Requirement: The host needs to run a version equal or greater to what you're building.
Remove debugging, profiling and tests (optional)
Create a directory which will contain make.conf and src.conf
mkdir /etc/release-confs
Populate /etc/release-confs/make.conf
WITHOUT_DEBUG=YES MK_PROFILE=no
See man 5 make.conf and /usr/src/UPDATING for more information
Populate /etc/release-confs/src.conf
WITHOUT_DEBUG_FILES=1 WITHOUT_KERNEL_SYMBOLS=yes WITHOUT_TESTS=yes WITHOUT_PROFILE=yes WITHOUT_LLVM_ASSERTIONS=yes WITH_MALLOC_PRODUCTION=yes
By removing symbols and debugging information you're limiting the ability to debug crashes severely.
See man 5 src.conf for more information
These files needs to be referenced in the configuration file for your target using the variables MAKE_CONF and SRC_CONF as mentioned in man 7 release.
Add board specific configuration (if needed)
This example is for Orange Pi PC as this board has support but doesn't have a configuration. In many cases you can use another board's configuration as template as long as it uses the same SoC.
Copy BANANAPI.conf to a new location
cd /usr/src/release cp -Rp arm/BANANAPI.conf arm/ORANGEPI-PC.conf
Change EMBEDDEDPORTS path to corresponding u-boot port
EMBEDDEDPORTS="sysutils/u-boot-bananapi" --> EMBEDDEDPORTS="sysutils/u-boot-orangepi-pc"
Change kernel to GENERIC-NODEBUG if you want to disable kernel debugging
KERNEL="GENERIC" --> KERNEL="GENERIC-NODEBUG"
BOARDNAME variable sets filename of generated image file.
export BOARDNAME="BANANAPI" --> export BOARDNAME="ORANGEPI-PC"
Add SRCBRANCH="base/head@rXXX" where XXX is the revision number (optional)
SRCBRANCH="base/head@r349025"
Change UBOOT_DIR to corresponding u-boot install path (u-boot-orangepi-pc)
UBOOT_DIR="/usr/local/share/u-boot/u-boot-bananapi" --> UBOOT_DIR="/usr/local/share/u-boot/u-boot-orangepi-pc"
Begin compilation
sh release.sh -c arm/ORANGEPI-PC.conf
The release script will automatically set amount of jobs (see man 7 release for more information). The compiled image will be placed in /scratch/R .
Sanitize image
If you want to distribute your image after doing modifications and/or installing packages on a "live" system you first need to clear out system specific files. Mount your / partition, remove the following directories and files before making a copy and don't forget to touch /firstboot .
- /etc/hostid
- All key files in /etc/ssh
- /var/db/entropy (clean directory)
- /boot/entropy
- touch /firstboot
See also
notes about the prebuilt images