[FAQ Index] | [6.2 -> 6.3] [6.4 -> 6.5]
Upgrades are only supported from one release to the release immediately following it. Read through and understand this process before attempting it. For critical or physically remote machines, test it on an identical, local system first.Start by performing the pre-upgrade steps. Next, boot from the install kernel, bsd.rd: use bootable install media, or place the 6.4 version of
bsd.rd in the root of your filesystem and instruct the boot
loader to boot this kernel.
Once this kernel is booted, choose the (U)pgrade option and follow the
prompts.
Apply the configuration changes and
finish up by upgrading the packages: pkg_add -u.
Alternatively, you can use the manual upgrade process.
You may wish to check the errata page or upgrade to the stable branch to get any post-release fixes.
bsd.rd.
Download the ramdisk kernel and the cryptographically signed checksum file
for your architecture.
bsd.rdSHA256.sigVerify them using signify(1):
$ signify -C -p /etc/signify/openbsd-64-base.pub -x SHA256.sig bsd.rd Signature Verified bsd.rd: OK
_rad reuses the _btd uid/gid.
The new _rad user recycles the user and group ids of the
"Bluetooth Daemon" user (_btd) which was removed in 2013.
If you upgraded your system from all the way back then and never deleted the
user and group, delete them:
# userdel _btd # groupdel _btdIf you do not delete them before upgrading, sysmerge(8) will fail and will need to be re-run manually after deleting them.
# sysctl kern.audio.record=1 # enable at runtime # echo kern.audio.record=1 >> /etc/sysctl.conf # set at bootFiner-grained controls are available using mixerctl(1): for each mixer device,
record.enable can be set to
off (always off), on (always on),
or sysctl (default: follow state of the
kern.audio.record sysctl).
UPDATES.
See RFC 8212 for more
information.
The following configuration directives are deprecated (but will be
accepted for backwards compatibility): announce all,
announce none, and announce default-route.
Furthermore, the announce self directive was removed.
Explicit use of announce self will result in a syntax error
preventing bgpd(8)
from starting.
Users are advised to review and update /etc/bgpd.conf before
upgrading.
It is possible to write configuration files that are valid and functionally the same both before and after the update.
Before updating:
deny from any and deny to any to the top of
the filter ruleset.
(After the update these rules are implicitly added to the filter)
announce self with
announce all.
prefix-set and
large-community (or community).
announce all to all neighbors for which neither
announce none nor announce default-route is
specified
(the implicit default for EBGP peers was announce self).
You can confirm that you haven't missed any:
# bgpd -nvf /etc/bgpd.conf | grep -B4 'announce self'
/etc/examples/bgpd.conf
for an example how BGP communities and prefix-set can be used in
simple network designs.
After updating:
announce all directives from the configuration.
deny from any and deny to any rules at the
top of
the ruleset filter are redundant after the update (and as such could be
removed), but leaving those may improve readability of the configuration.
wpakey.
The ifconfig(8)
utility encourages users of the wpakey keyword to use it on
the same line as any join or nwid keywords.
In particular,
hostname.if(5)
file should be adjusted:
nwid mynwid wpakey mywpakey
listen on * port 80 changed.
The meaning of listen on * port 80 changed from "listen on
all IPv4 addresses" to "listen on all IPv4 and all IPv6 addresses".
If listen on * port 80 is present,
listen on :: port 80
needs to be removed.
For example,
listen on * port 80 listen on :: port 80must be changed to:
listen on * port 80
root strip option renamed.
To be semantically correct, the root strip option has been renamed
to request strip. For example, the following configuration block is
needed for acme-client(1):
location "/.well-known/acme-challenge/*" {
root "/acme"
request strip 2
}
# echo "https://cdn.openbsd.org/pub/OpenBSD" > /etc/installurl
Before updating, use pfctl -s queue.
If you have no output or a list of queues, you should not be affected by this.
If you see the following error, adjust your
pf.conf(5) accordingly:
# pfctl -s queue pfctl: DIOCGETQSTATS: Bad file descriptorNormally, you can just specify the relevant interface name, but if you are trying to use interface groups to allow use of the same pf.conf file on multiple systems which have different interface types, you might like to define macros in a separate file that can be different on each system (sharing a common pf.conf):
$ cat /etc/pf.conf.local egress_if = ix0 $ cat /etc/pf.conf include "/etc/pf.conf.local" queue rootq on $egress_if bandwidth 1G default [...]
log updates and log all in
relayd.conf(5)
have been superseded by three new options:
log state changes log host checks log connection [errors]The first two set the logging of host checks to either changes in host state only or all check results, and replace
log updates and
log all.
The third option controls connection logging in relays which,
until now, was a side effect of log updates.
The optional errors will cause only failed connections to be
logged.
Use of the old options will result in a warning message and they will be removed in OpenBSD 6.5.
-netmask or -prefixlen usage.
If you have specified these options before the address string in
hostname.if(5) or some script, route(8)
will now print an error message and exit.
Make sure to change
route add -inet6 -prefixlen 56 2001:db8:: ::1 -blackholeto
route add -inet6 2001:db8:: -prefixlen 56 ::1 -blackholeor, better yet, use CIDR notation:
route add -inet6 2001:db8::/56 ::1 -blackholePreviously, a route for
2001:db8::/64 would have been
installed as the address string comes last for which a default
prefix length of 64 was implied.
-prefixlen or
CIDR
notation is used, route(8) no
longer interprets an IPv6 address as /64 subnet.
Previously, a route with prefixlen 64 would be installed:
# route add 2001:db8:: ::1 add net 2001:db8::: gateway ::1 # route show -inet6 | grep 2001:db8 2001:db8::/64 localhost UGS 0 0 32768 8 lo0This behavior was deprecated in 2003 by RFC 3587. The route(8) utility now takes a host address as-is:
2001:db8:: localhost UGHS 0 0 32768 8 lo0
route add [-net] 192.0.2.0/24 ... route add [-net] 192.0.2.0 -netmask 255.255.255.0 ... route add -inet [-net] 192.0.2.0 -prefixlen 24 ...If neither
-net nor -netmask nor
-prefixlen is given, -host is now assumed.
/etc/rad.conf configuration file.
For example, if you had rtadvd_flags=em0 in
/etc/rc.conf.local, /etc/rad.conf would be:
interface em0For more advanced configurations consult rad.conf(5). With the
/etc/rad.conf file in place you can stop rtadvd(8)
and start rad(8):
# rcctl stop rtadvd # rcctl disable rtadvd # rcctl enable rad # rcctl start rad
The change is mostly mechanical and requires splitting current rules into actions and matching patterns, examples are available in the man page.
Authenticated users are no longer considered as local users, if your configuration file allows remote users to authenticate and send mail, an explicit rule must be written to match these.
smtpd(8) supported LMTP both as a relaying protocol and as a local delivery method. The local delivery method was implemented within the daemon and not as an MDA, it no longer does and must be used through the 'mda' action:
action lmtp-local mda "/usr/libexec/mail.lmtp [...]"The mail.lmtp(8) MDA provides all the features that used to be supported internally by smtpd(8).
action lmtp-local mda "/usr/libexec/mail.lmtp [...]"The grammar has been extended to provide an LMTP action hiding the details behind the mail.lmtp(8) MDA. The LMTP action is documented in smtpd.conf(5) and looks as follow:
action lmtp-local lmtp localhost:25In addition, the unix: and inet: prefixes which were used in LMTP destinations to distinguish between a UNIX socket or a network socket have been removed.
set and limit removed as main keywords.
The grammar allowed setting options of components with the set keyword:
set queue compression set mta max-deferred 100The keyword brought no value and was dropped in favor of component namespaces:
queue compression mta max-deferred 100In addition, the
limit option which could be used with mta:
limit mta session-transaction-delay 0is now an option within the
mta namespace:
mta limit session-transaction-delay 0
+auth specifier has been removed: it is implied by the presence
of an auth label in the rest of the string.
secure:// has been removed: use smtp+tls:// or smtps:// explicitly.
tls:// has been replaced by smtp+tls://.
smtp:// becomes SMTP with opportunistic STARTTLS: use smtp+notls:// to disable TLS.
smtp+tls:// becomes SMTP with mandatory STARTTLS: use smtp:// for opportunistic STARTTLS.
smtp:// and smtp+tls:// relays.
~/.sndio/cookie.
If you allow access to your audio/MIDI hardware to other users or to
remote systems, you may want to move your authorization cookie to the
new location:
$ mkdir -p ~/.sndio $ mv ~/.aucat_cookie ~/.sndio/cookieThis is probably simpler than deleting the old cookie, generating a new one and installing it to all appropriate locations.
/dev/audio and /dev/audioctl.
The /dev/audio and /dev/audioctl symbolic links
are not used anymore and can be removed:
rm /dev/audio /dev/audioctlRemove rtadvd(8):
rm /etc/rc.d/rtadvd /usr/sbin/rtadvd /usr/share/man/man5/rtadvd.conf.5 /usr/share/man/man8/rtadvd.8Remove the
_rtadvd user and group:
userdel _rtadvd groupdel _rtadvdAs part of the update to xcb 1.13, two obsolete libxcb components (xevie and xprint) have been removed. The corresponding files can be removed:
rm /usr/X11R6/lib/libxcb-xevie.* rm /usr/X11R6/lib/libxcb-xprint.* rm /usr/X11R6/lib/pkgconfig/xcb-xevie.pc rm /usr/X11R6/lib/pkgconfig/xcb-xprint.pc
Upstream renamed buildslave to buildbot-worker a
while ago.
Accordingly, the buildslave rc script was renamed to
buildbot_worker.
You need to adjust the list of daemons:
# rcctl disable buildslave # rcctl enable buildbot_workerMake sure to stop any running
buildslave instances before
upgrading, otherwise rc.d(8) will lose
track of the process.
/etc/php-5.6.ini to
/etc/php-7.0.ini.
It may be useful to diff(1)
against the original file in
/usr/local/share/examples/php-5.6/php.ini-production.
/usr/local/share/doc/pkg-readmes/php-7.0*.
# rcctl disable php56_fpm; rcctl enable php70_fpm
# rcctl stop php56_fpm; rcctl start php70_fpm
If using the module for Apache httpd, update the symlink for
/var/www/conf/modules/php.conf as shown in the pkg-readme.
pkg_add php-apache%7.0, pkg_add php-sqlite3%7.0,
pkg_add php-pdo_sqlite%7.0 or similar for 5.6).
For the SQLite extensions, create symbolic links to enable the
modules as shown in the pkg-readme.
FPM and CLI remain in the main PHP package.
security/kc storage format change. The storage format of keychains has changed in a backward incompatible way. Dump all your keychains to XML before updating:
$ kc -k ~/.kc/default.kcd Password: <example_chain% > dump kcdump Dump OK <example_chain% > quitAfter updating follow the instructions in
/usr/local/share/doc/kc/Changelog.
${PREFIX}/sbin/smtp was removed from apcupsd package
in favor of smtp(1).
The programs are not option-compatible, so any scripts using an smtp
command require adjustment.
${PREFIX}/share/doc/pkg-readmes/sogo
Sometimes, you need to do an upgrade of a machine for which the normal upgrade process is not possible. The most common case is a machine in a remote location and there is no easy access to the system console.
softdep mount option in /etc/fstab
and rebooting before undertaking a manual upgrade.
Having at least 500MB free on /usr would be recommended.
sd0 is your boot disk:
installboot sd0
If using the multiprocessor kernel:
cd /usr/rel # where you put the release files
ln -f /bsd /obsd && cp bsd.mp /nbsd && mv /nbsd /bsd
cp bsd.rd /
cp bsd /bsd.sp
If using the single processor kernel:
cd /usr/rel # where you put the release files
ln -f /bsd /obsd && cp bsd /nbsd && mv /nbsd /bsd
cp bsd.rd bsd.mp / # may give a harmless warning
sha256 -h /var/db/kernel.SHA256 /bsd
base64.tgz last, because the new base system, in particular
tar(1),
gzip(1) and
reboot(8),
will not work with the old kernel.
Either untar the needed filesets manually
cp /sbin/reboot /sbin/oreboot
tar -C / -xzphf xshare64.tgz
tar -C / -xzphf xserv64.tgz
tar -C / -xzphf xfont64.tgz
tar -C / -xzphf xbase64.tgz
tar -C / -xzphf man64.tgz
tar -C / -xzphf game64.tgz
tar -C / -xzphf comp64.tgz
tar -C / -xzphf base64.tgz # Install last!
/sbin/oreboot
or, if you use
ksh(1), you can do
cp /sbin/reboot /sbin/oreboot
for _f in [!b]*64.tgz base64.tgz; do tar -C / -xzphf "$_f" || break; done
/sbin/oreboot
Note that tar(1)
can expand only one archive per invocation, so a simple glob won't work.
/dev.
Run
MAKEDEV(8):
cd /dev
./MAKEDEV all
sd0 is your boot disk:
installboot sd0
sysmerge
fw_update
dmesg -s)
and correct any failures as necessary.
All the steps following configuration changes
above also apply to manual upgrades.
Finally, remove /sbin/oreboot and update packages:
pkg_add -u.
Reboot once more to make sure you run on your own kernel generated by KARL.
[FAQ Index] | [6.2 -> 6.3] [6.4 -> 6.5]