OpenBSD -stable

What is the -stable (patch) branch?

OpenBSD provides a source tree that contains important patches and fixes (i.e. those from the errata, plus others which are obvious and simple, but do not deserve an errata entry) and makes it available via CVS, in addition to the -current source. Thus, users can choose three options:

As a general principle, all errata entries will be merged into the patch branch shortly before/after they are published. Other post-release patches may be merged in as well, subject to a number of conditions:

It is worth pointing out the name -stable refers ONLY to the API and operations of OpenBSD not changing, not the overall reliability of the system. In fact, if things go as desired, the -current flavor of OpenBSD, on its way to becoming the next -release, will be an improvement in reliability, security and overall quality over the previous -release and -stable.

Getting -stable source code

To obtain the patch branch for a particular release of OpenBSD, you can update on top of a pre-existing source tree (from a mirror or the CD), or you can grab a fresh source tree from an AnonCVS server. Instructions for getting the patch branch and staying up to date are described in the Getting Started section of the AnonCVS documentation. Note that patch branches do not help to upgrade from one release of OpenBSD to another. They only provide a means for staying up to date with the patches within a given release.

Do not attempt to go from one release to another via source. Instead, please read the upgrade guide for the release in question. Also, you cannot go backwards, from -current back to -stable, because of library versioning problems and other changes.

Building OpenBSD -stable

Full details on building from source are provided here. This is a simplified summary.

Once you have obtained a source tree via CVS, you must rebuild the system. The steps for doing so are:

Rebuilding the kernel

To rebuild the default kernel from stable:
# cd /usr/src/sys/arch/$(uname -m)/conf
# config GENERIC
# cd /usr/src/sys/arch/$(uname -m)/compile/GENERIC
# make clean && make
Replace GENERIC with GENERIC.MP for multiprocessor systems.

Rebooting with the new kernel

To reboot with the newly compiled kernel:
# cd /usr/src/sys/arch/$(uname -m)/compile/GENERIC
# make install
# reboot
If your system has trouble booting the new kernel, you can easily go back and reboot from the old kernel, now called obsd.

Rebuilding the userland

To rebuild the base system binaries:
# rm -rf /usr/obj/*
# cd /usr/src
# make obj
# cd /usr/src/etc && env DESTDIR=/ make distrib-dirs
# cd /usr/src
# make build
This may take some time, depending on the speed of your system. Use of the root account can be limited to only the final step if you follow the instructions on this page.

If you have a number of machines to keep on the -stable branch, you may wish to make a release by creating file sets that can be quickly and easily installed on any machine of the same platform. The release(8) man page contains all the relevant information.