[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.rd
SHA256.sig
Verify 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_fpmIf 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.spIf 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/orebootor, 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/orebootNote 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]