NAME
build
—
information on how to build the
system
DESCRIPTION
The source for the DragonFly system and applications is located in /usr/src. This directory contains the “base system” sources, which is loosely defined as the things required to rebuild the system to a useful state. It also contains the source for the system documentation, including manual pages. Refer to development(7) for more information on how to obtain the DragonFly sources.Third party applications have to be built using the
dports(7) system. The file /usr/Makefile has
targets for obtaining the dports tree. Typing make
in /usr gives specifics on how to obtain the tree
for building packages.
The make(1) command is used in /usr/src to build and install the things in that directory. Issuing the make(1) command in any directory or subdirectory of those directories has the same effect as issuing the same command in all subdirectories of that directory. With no target specified, the things in that directory are just built. The following list provides the names and actions for other targets:
clean
- Removes any files created during the build process.
install
- Installs the results of the build for this directory.
The other /usr/src make targets are:
buildworld
- Rebuild everything but the kernel.
quickworld
- Same as
buildworld
, but skip bootstrap, build and cross-build tool steps. This target can be used for incremental upgrades once a full build of the world has been done withbuildworld
. realquickworld
- Same as
quickworld
, but also skip the depend step. crossworld
- Just do the bootstrap, build and cross-build steps.
installworld
- Install everything built by
buildworld
, as well as the rescue tools and the initial ramdisk if they do not exist yet. installworld-force
- Force an
installworld
. This will install to a temporary directory, then copy the main binaries and libraries with a static cpdup(1) toDESTDIR
and finally will issue a normalinstallworld
andupgrade
. It is a special case to be used on older systems as a last resort when the normalinstallworld
doesn't work. world
buildworld +
installworld
.buildkernel
- Rebuild the kernel and the kernel-modules.
nativekernel
- Rebuild the kernel and the kernel-modules using native tools.
quickkernel
- Same as
buildkernel
, but do not clean out the obj modules. This target can be used for incremental upgrades once a full build of the kernel has been done withbuildkernel
. realquickkernel
- Same as
quickkernel
, but also skip the depend step. installkernel
- Install the kernel and the kernel-modules.
reinstallkernel
- Reinstall the kernel and the kernel-modules.
kernel
buildkernel +
installkernel
.preupgrade
- Perform certain upgrades that have to be done before
installworld
, such as adding new users and groups.installworld
will complain if they have not been done. upgrade
- Upgrade the files in /etc and also setup the rest of the system for the version of DragonFly just installed.
initrd
- Install the statically linked rescue tools and the initial ramdisk built
by
buildworld
. backupworld
- Manually archive binaries from installed world to location specified by
WORLD_BACKUP
. backup-clean
- Delete archive created by
backupworld
. backup-auto-clean
- Delete archive created automatically during
installworld
. restoreworld
- Restore binaries from archive created by
backupworld
. restoreworld-auto
- Restore binaries from archive created automatically during
installworld
. The archive location is specified byAUTO_BACKUP
.
ENVIRONMENT
TARGET_ARCH
,TARGET_PLATFORM
- The target machine processor architecture and hardware platform. These
have to be set for cross-building.
TARGET_ARCH
is analogous to the “uname
-p
” output. For the 64 bit AMD architecture known as AMD64, x86-64 or Intel 64, use:TARGET_ARCH=x86_64 TARGET_PLATFORM=pc64
DESTDIR
- An existing directory to be the root of the hierarchy where the resulting binaries will be installed (the default is /).
MAKEOBJDIRPREFIX
- The directory hierarchy where the object files will be built (the default is /usr/obj).
__MAKE_CONF
- Used to override the path of make.conf(5) (the default is /etc/make.conf).
KERNCONF
- The name of one or more kernel configurations from which kernels should be
built (the default is
X86_64_GENERIC
). KERNCONFDIR
- The directory where the kernel configuration files are kept (the default is /usr/src/sys/config).
DESTLABEL
- Common suffix added to kernel and modules directory names, prefixed by a
single dot. For example,
make DESTLABEL=test installkernel
installs them as /boot/kernel.test/kernel and /boot/kernel.test, respectively.
DESTKERNDIR
- Where to install the kernel and the modules (the default is
/boot), in the directory hierarchy specified by
the environment variable
DESTDIR
. DESTKERNNAME
- The name of the installed kernel file (the default is
kernel), under the directory specified by
DESTKERNDIR
. This overrides the effect ofDESTLABEL
. DESTMODULESNAME
- The name of the directory to install the kernel modules (the default is
modules), under the directory specified by
DESTKERNDIR
. This overrides the effect ofDESTLABEL
. WORLD_BACKUP
- Directory for manual backup of binaries of installed world (default: /var/backups/world_backup).
AUTO_BACKUP
- Directory for automatic backup of binaries of installed world (default:
MAKEOBJDIRPREFIX
/world_binaries/DESTDIR
). NO_BACKUP
- When defined, the automatic backup feature of
installworld
is inhibited. COPTFLAGS
- Overrides the default optimization flags for kernel and module compiles.
KCFLAGS
- Allows you to add additional compiler flags for kernel and module
compiles. But use
COPTFLAGS
to specify any optimization overrides, as some modules may have to override it to enforce a lower optimization level.
OTHER
There are two other mechanisms that users should be aware of.
First, when you issue a installkernel
DragonFly will make a backup of the current kernel
in /boot/kernel.old. Because people often do
multiple installkernel operations, this backup kernel can also get lost in
the noise. It is usually prudent to make a backup of the old kernel manually
every once in a while when you know that it is a good kernel. you can do
this after issuing the installkernel
by running the
command:
cpdup /boot/kernel.old /boot/kernel.bak
The advantage of this is that no installation mechanism will overwrite your /boot/kernel.bak, and in addition to that the loader's boot menu will check for its existence and present a menu option 'b' to allow you to boot from it.
The second mechanism is related to the two-stage root mount. When
using an encrypted root, the system will actually boot from a small initial
ramdisk (a.k.a. initrd) image stored as
/boot/kernel/initrd.img.gz. This image will handle
the encrypted configuration, mount, and chroot to the real root. This image
is also used as the rescue ramdisk boot menu option. This image is NOT
updated automatically by installworld
or
installkernel
. Instead, updating this image has to
be done by running the manual command:
make initrd
It is usually a good idea to run this command after rebooting into the new world that you installed (so you know the world you installed is good). This command will update the initrd image in /boot/kernel and the rescue tools in /rescue.
FILES
- /etc/make.conf
- /etc/defaults/make.conf
- /usr/src/share/doc/Makefile
- /usr/src/Makefile
- /usr/src/Makefile.inc1
- /usr/src/Makefile_upgrade.inc
EXAMPLES
The “approved” method of updating your system from the latest sources is:
make buildworld make buildkernel KERNCONF=FOO make installkernel KERNCONF=FOO make installworld make upgrade reboot make initrd
The above mentioned build and install order enforces that the new
kernel is installed before the new world. Sometimes it might be necessary to
reboot the system between those two steps. In this case
“make
installworld
” will tell you to do so.
SEE ALSO
cc(1), install(1), make(1), wmake(1), make.conf(5), development(7), dports(7), release(7), config(8), reboot(8), shutdown(8)
AUTHORS
Mike W. Meyer <mwm@mired.org> and Sascha Wildner <swildner@gmail.com>.