© 2013 Warren Block
Last updated 2013-09-09
Building FreeBSD world and kernel: the concise version.
Introduction
Building the world and kernel on FreeBSD need not be a big deal. The Handbook has the long, detailed procedure. Most of the time, that procedure can be greatly reduced. Here we’ll use a shorter, simpler, faster version. If there are problems, try the Handbook procedure, or check /usr/src/UPDATING for instructions.
The Really Short Version
# rm -rf /usr/obj
# cd /usr/src
# make buildworld
# make kernel
# make installworld
# mergemaster -Ui
# shutdown -r now
# cd /usr/src
# make check-old ![6](data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAAAAABzHgM7AAAAAmJLR0QAAKqNIzIAAAB9SURBVHja
FY0hEsMwDAQXChaaBgoG+guB/UZhvlAYWFhqmCeUBvoJoYaCgqrMbudu9oiI86m6tQyEb1AU6kjI
3GxcQnVO2K0Uq/Ahi6tpFWClwLDe+wNkwt0R2yfk7Negv+csw8uWZR4c+NS4Z6FOTKmkTO88Df9W
kfXwiD+zczjqCrgbWQAAAEN0RVh0U29mdHdhcmUAQCgjKUltYWdlTWFnaWNrIDQuMi44IDk5LzA4
LzAxIGNyaXN0eUBteXN0aWMuZXMuZHVwb250LmNvbZG6IbgAAAAqdEVYdFNpZ25hdHVyZQBkMjVk
NzE3NmQ2N2EwMzhhZmMxYzU2NTU4ZTNkZmIxYf0Q9bUAAAAOdEVYdFBhZ2UAMTJ4MTIrMCswhG27
fQAAAABJRU5ErkJggg==)
Deleting the old object directory speeds up the build. If
/usr/obj has special permissions or flags like nodump, deleting
/usr/obj/usr is usually enough and preserves the parent directory. If
the system has enough RAM, a tmpfs(5) filesystem can be used in
/etc/fstab:
| |
Using the -j option can increase speed by running multiple jobs. How many jobs to use depends on the processor; number of cores plus one is a start. Test other values, because hardware varies. The devel/ccache port can also increase speed if you update regularly. | |
The kernel target builds and installs the new kernel. If you have a custom kernel, set the name in the KERNCONF variable (make kernel KERNCONF=MYKERNEL). The official Handbook procedure recommends a reboot into single user mode after installing the new kernel, but it is not required. | |
Do not use -j with installworld. | |
-Ui speeds mergemaster usage. Set IGNORE_FILES= in /etc/mergemaster.rc to skip files that don’t need to be merged. See mergemaster(8). | |
If old files are found, use the delete-old and delete-old-libs targets to remove them. Programs that are still using old libraries will be broken until they have been recompiled. |