release —
building an OpenBSD release
There are several steps necessary to build a release:
- Update sources.
- Build and install a new kernel.
- Build a new base system.
- Make and validate the base system release.
- Build and install Xenocara.
- Make and validate the Xenocara release.
- Make the third party packages.
- Create boot and installation disk images.
This manual describes the steps for the
release and
stable branches. To build a
current release, additional steps may be
required. See
https://www.openbsd.org/faq/current.html
for any needed workarounds.
Commands to be run as a user are preceded by a dollar sign ‘$’.
Commands that must be run as the superuser are preceded by a hash mark
‘#’. Privileges will be de-escalated to the user
build whenever possible.
Most of the defaults can be overridden by setting the appropriate variables in
mk.conf(5).
A
release should use sources that were
checked out using the same
cvs(1)
tag. There are two families of tags:
-
-
- OPENBSD_x_y_BASE
- The sources for the OpenBSD x.y release.
-
-
- OPENBSD_x_y
- The sources for the OpenBSD x.y stable branch. It
contains the patches described in
https://www.openbsd.org/stable.html.
See
https://www.openbsd.org/anoncvs.html
for instructions on fetching the sources for the first time.
To update existing sources to the versions identified by one of the above tags,
use the commands:
$ cd /usr/src && cvs up -r TAG -Pd
$ cd /usr/xenocara && cvs up -r TAG -Pd
$ cd /usr/ports && cvs up -r TAG -Pd
Warning:
cvs(1) tags are
‘sticky’. See
cvs(1)
for more information.
Always build and install a new kernel and reboot before building the programs
that will use the kernel. This ensures that any new system calls, for example,
will be present when needed.
# cd
/sys/arch/$(machine)/compile/GENERIC.MP
Replace
GENERIC.MP with a different kernel
configuration if necessary.
Create the build directory and configuration file, then compile and install the
kernel:
# make obj
# make config
# make && make install
The current kernel is copied to
/obsd and the
new kernel to
/bsd. Reboot.
The build process will place the object files in a tree under
/usr/obj. This directory must be owned by
build:wobj with mode 770.
Create the tree of obj directories and begin the build:
# cd /usr/src
# make obj && make build
After the build is completed, update
/etc,
/var, and
/dev, using
sysmerge(8) and
MAKEDEV(8):
# sysmerge
# cd /dev && ./MAKEDEV all
At this point, the base system is up to date with the code that will be made
into a release.
The base system release consists of at least one generic kernel, some
installation media, the release tarballs, installation instructions, and
checksum files.
Create a
RELEASEDIR directory to store the
release files. This directory must be writable by
build.
To build a release, it is necessary to prepare a filesystem mounted with the
noperm
mount(8) option. Either standard
FFS or
mount_mfs(8) may be
used. The root of this filesystem must have owner
build and mode 700. On this filesystem, create a
DESTDIR directory. This will be the root of a
complete
OpenBSD installation.
Warning:
DESTDIR
and
RELEASEDIR must not refer to any
directory with
/mnt in its path, as
/mnt is used in the release generation
process. The
vnd(4) device vnd0 is
also used and must not be configured.
Make the release and check the contents of the release tarballs:
# export DESTDIR=your-destdir RELEASEDIR=your-releasedir
# cd /usr/src/etc && make release
# cd /usr/src/distrib/sets && sh checkflist
# unset RELEASEDIR DESTDIR
Xenocara is based on the X.Org modular build system. Its sources are supposed to
be in
/usr/xenocara. The
/usr/src tree is also needed while building
Xenocara. The object directory
/usr/xobj
should be empty and owned by build:wobj with mode 770.
The following steps will build and install Xenocara.
# cd /usr/xenocara
# make bootstrap
# make obj
# make build
Xenocara uses
DESTDIR and
RELEASEDIR as described above. Use a
different
DESTDIR for the Xenocara release
than for the base release, as the contents of
DESTDIR will be removed.
The steps to build and validate the Xenocara release are:
# export DESTDIR=your-destdir RELEASEDIR=your-releasedir
# make release
# make checkdist
# unset RELEASEDIR DESTDIR
At this point,
OpenBSD base system and X Window System
tarballs are in
RELEASEDIR.
The ports subsystem of contributed applications is capable of producing packages
for installation, either individually or in bulk. This is described in
ports(7).
The disk images
install${VERSION}.fs
and
install${VERSION}.iso
are suitable for installs without network connectivity. They contain the
tarballs and ports built in the previous steps.
# export RELDIR=your-releasedir RELXDIR=your-xenocara-releasedir
# cd /usr/src/distrib/$(machine)/iso && make
# make install
The two installer images are now stored in the local release directory.
cvs(1),
pkg_add(1),
mk.conf(5),
ports(7),
sysmerge(8)
This document first appeared in
OpenBSD 2.8.