FreeBSD Update
FreeBSD-Update (de)
FreeBSD Update (en)

Tech Stuff – FreeBSD Update Survival Guide

freebsd-update and custom kernels

Upgrades from one minor version of FreeBSD to another, like from FreeBSD 9.0 to FreeBSD 9.1, are called minor version upgrades. Major version upgrades occur when FreeBSD is upgraded from one major version to another, like from FreeBSD 9.X to FreeBSD 10.X. Both types of upgrades can be performed by providing freebsd-update with a release version target.

Upgrade to a new Patch-Level

$ freebsd-update fetch
$ freebsd-update install
$ reboot

$  freebsd-version -kru
-k   version and patch level of the installed kernel
-r   version and patch level of the running kernel
-u   version and patch level of the installed userland

Upgrade to a new Release Version

$ uname -a
FreeBSD gateway 10.0-RELEASE [...] GENERIC  amd64

$ freebsd-update upgrade -r 10.2-RELEASE
$ /usr/sbin/freebsd-update install
$ reboot
$ /usr/sbin/freebsd-update install
$ pkg upgrade -f
$ /usr/sbin/freebsd-update install
$ uname -a
FreeBSD 10.1-RELEASE [...] NS2-BACHI-NET  amd64

$ df
Filesystem  1K-blocks    Used    Avail Capacity  Mounted on
/dev/ada0p2   2031132  969868   898776    52%    /      <== includes /boot
                                                            kernel uses ca. 450 MB
devfs               1       1        0   100%    /dev
/dev/ada0p3   8106716  452652  7005528     6%    /var
/dev/ada0p4   4053308   35020  3694024     1%    /tmp
/dev/ada0p6  64995324 7673760 52121940    13%    /usr
/dev/ada0p7  42651260   32836 39206324     0%    /web
/dev/ada0p8  26396824   32836 24252244     0%    /db
devfs               1       1        0   100%    /var/named/dev

$ cd /usr/src
$ make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null
/boot/kernel/kernel        <- GENERIC kernel
/boot/kernel.old/kernel    <- your kernel

$ rsync -a /boot/kernel /boot/GENERIC
$ rm /boot/kernel
$ mv /boot/kernel.old /boot/kernel

$ sysctl -n kern.bootfile

$ sysctl kern.bootfile=/boot/kernel/kernel
kern.bootfile: /boot/kernel.old/kernel -> /boot/kernel/kernel

$ sysctl -n kern.bootfile

$ freebsd-update upgrade -r 10.2-RELEASE
Looking up mirrors... none found.
Fetching public key from done.
Fetching metadata signature for 10.1-RELEASE from done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.

WARNING: This system is running a "ns2-bachi-net" kernel, which is not a
kernel configuration distributed as part of FreeBSD 10.1-RELEASE.
This kernel will not be updated: you MUST update the kernel manually
before running "/usr/sbin/freebsd-update install".

The following components of FreeBSD seem to be installed:
kernel/generic src/src world/base world/doc world/lib32

The following components of FreeBSD do not seem to be installed:

Does this look reasonable (y/n)? y

Fetching metadata signature for 10.2-RELEASE from done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
Inspecting system... done.
Fetching files from 10.1-RELEASE for merging... done.
Preparing to download files... done.
Fetching 39913 patches.....10....20....30....40....50....60
Applying patches... done.
Fetching 6731 files... done.
Attempting to automatically merge changes in files... done.

The following file could not be merged automatically: /etc/dhclient.conf
Press Enter to edit this file in vi and resolve the conflicts

The following files are affected by updates, but no changes have
been downloaded because the files have been modified locally:

The following files will be removed as part of updating to 10.2-RELEASE-p8:
To install the downloaded upgrades, run "/usr/sbin/freebsd-update install".

$ /usr/sbin/freebsd-update install
Installing updates...
Kernel updates have been installed.  Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.
$ sudo freebsd-update upgrade -r 9.1-RELEASE

[ warnings about custom kernel ]

$ sudo freebsd-update install

[ this is when the new generic kernel is installed if we weren't running a custom kernel ]

$ cd /usr 
$ mv src{,-8.2}
$ sudo svn co
$ sudo cp src{-8.2,}/sys/i386/conf/PULP
$ cd src

$ sudo rsync -a /boot/kernel{,-8.2}/
$ sudo make kernel-toolchain
$ sudo make buildkernel KERNCONF=PULP
$ sudo make installkernel KERNCONF=PULP

$ sudo reboot

$ sudo freebsd-update install
$ sudo reboot

Custom kernel in loader.conf

How to keep freebsd-update from trashing custom kernel?
FreeBSD Boot Process

Just an idea, not tested: Leave the GENERIC kernel updated
by freebsd-update, and put your own kernel unter a different
name into /boot, for example:

	/boot/kernel/kernel		<- GENERIC kernel
	/boot/mykernel/kernel		<- your kernel

Then change /boot/loader.conf to contain:


1 thought on “freebsd-update

  1. Pingback: FreeBSD 12: Mail Server Installation | Andreas' Blog

Leave a Reply

Your email address will not be published. Required fields are marked *