跳转至

OpenBSD 升级向导:6.9 至 7.0

[FAQ Index] | [6.8 -> 6.9]

仅支持从一个版本升级到紧随其后的版本。

在尝试之前通读并理解此过程。对于重要的或物理远程机器,首先在相同的本地系统上对其进行测试。

在使用任何升级方法之前

  • 检查 /usr 中的可用磁盘空间。确认 /usr 分区的大小至少为 1.1G。如果空间较小,升级可能会失败,你应该考虑重新安装系统。

  • 阅读配置和语法更改以及软件包升级说明。在开始升级之前,可能需要计划一些配置更改软件包更改

升级方法

  • 无人值守升级:最简单的方法是使用 sysupgrade(8) 进行无人值守升级。该程序将下载所有安装文件集(install sets),验证其签名,然后重新启动以自动执行升级。无人值守升级完成后,继续下面的操作。

  • 交互式升级:如果你坚持省略一些安装集,你将需要执行交互式升级。(带有所有安装集的 sysupgrade 升级。)

  • 手动升级:最后一个选项是手动升级系统。(不建议这样做,因为它是最容易出错的方法。)


交互式升级

获取并验证 bsd.rd。为你的机器下载相应架构的 ramdisk 内核和加密签名的校验和文件。

文件名 对应架构的下载地址
bsd.rd alpha amd64 arm64 armv7 hppa i386 landisk loongson luna88k macppc octeon powerpc64 sparc64
SHA256.sig alpha amd64 arm64 armv7 hppa i386 landisk loongson luna88k macppc octeon powerpc64 sparc64

使用 signify(1) 验证 bsd.rdSHA256.sig

$ signify -C -p /etc/signify/openbsd-70-base.pub -x SHA256.sig bsd.rd
Signature Verified
bsd.rd: OK

接下来,从上一步中获取的安装内核 bsd.rd 启动。把它放在你的文件系统的根目录下,并指示引导加载程序启动这个内核。启动此内核后,选择 (U)pgrade 选项并按照提示进行操作。

安装文件集后,系统将使用升级的内核重新启动。现在继续下一步

在升级后

升级文件集后,系统将使用升级的内核重新启动,并在引导期间运行 sysmerge(8)。在某些情况下,若无法自动修改配置文件。则运行以下命令:

# sysmerge

检查并执行这些配置更改

接下来删除旧文件。最后使用 pkg_add -u 升级软件包。

你可能需要检查勘误表页面以了解任何发布后的修复。


手动升级(没有安装内核)

这不是推荐的过程。如果可能,请使用无人值守或交互式升级方法!

有时,你需要对无法进行正常无人值守或交互式升级过程的机器进行升级。

准备

  • 将安装文件放在一个适当的位置。确保你有足够的空间!远程升级时空间不足可能是……不幸的。请注意,使用 softdep 会加剧这种情况,因为删除和覆盖的文件不会立即释放它们的空间。考虑在 /etc/fstab 中禁用 softdep 挂载选项并在进行手动升级之前重新启动。建议在 /usr 上至少有 500MB 可用空间。

  • 成为 root 用户。虽然在每个命令之前使用 doas(1) 通常是一个好习惯,但该命令可能会被最后的步骤破坏,因此你应该在开始此过程之前获得 root 权限。此时最好使用 doas 以外的方法验证你对 root 的访问权限,即直接登录或使用 su(1)

  • 停止和/或禁用任何适当的应用程序。在此过程中,所有用户态应用程序都会被替换,但可能无法运行,因此可能会发生奇怪的事情。在第一次重新启动期间,你可能还会遇到 DNS 解析问题,因此依赖于 DNS 的 PF 规则和 NFS 挂载可能会导致启动问题。可能还有其他的应用程序,你希望在升级后不要立即运行;也要停止并禁用它们。

  • 安装新的引导块。这实际上应该在任何升级结束时完成。如果这被忽略了,那么现在不这样做可能会破坏串行控制台或其他东西,具体取决于你的平台。使用 installboot(8) 进行配置,假设 sd0 是你的启动盘:

# installboot sd0

手动升级

安装新内核。复制主内核的额外步骤是为了确保磁盘上始终存在有效的内核。

如果使用多处理器内核:

# 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

如果使用单处理器内核:

# 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

启用 KARL。存储内核的校验和:

# sha256 -h /var/db/kernel.SHA256 /bsd 

安装新的用户空间。保存reboot(8) 的副本,解压缩并安装发行版包,重新启动。最后安装 base70.tgz,因为新的基本系统,特别是 tar(1)gzip(1)reboot(8),将无法与旧内核一起使用。手动解压所需的文件集:

# cp /sbin/reboot /sbin/oreboot
# tar -C / -xzphf xshare70.tgz
# tar -C / -xzphf xserv70.tgz
# tar -C / -xzphf xfont70.tgz
# tar -C / -xzphf xbase70.tgz
# tar -C / -xzphf man70.tgz
# tar -C / -xzphf game70.tgz
# tar -C / -xzphf comp70.tgz
# tar -C / -xzphf base70.tgz    # Install last!
# /sbin/oreboot

或者,如果你使用 ksh(1),你可以:

# cp /sbin/reboot /sbin/oreboot
# for _f in [!b]*70.tgz base70.tgz; do tar -C / -xzphf "$_f" || break; done
# /sbin/oreboot

请注意,tar(1) 每次调用只能扩展一个存档,因此简单的 glob 不起作用。

重启后,更新 /dev。运行 MAKEDEV(8)

# cd /dev
# ./MAKEDEV all

更新引导加载程序。仍然假设 sd0 是你的启动盘:

# installboot sd0

更新系统配置文件。运行 sysmerge(8)

# sysmerge

更新固件。你的系统可能有新固件。用 fw_update(1) 更新它:

# fw_update

完成。查看引导的控制台输出(使用 dmesg -s)并根据需要更正任何故障。以下配置更改后的所有步骤也适用于手动升级。最后,删除 /sbin/oreboot 并更新软件包:pkg_add -u。 再次重新启动以确保你使用最新的固件文件并在你自己的 KARL 生成的内核上运行。


配置和语法更改

snmpd(8)。默认安全设置已收紧。

  1. 默认协议已更改为 SNMPv3。
  2. 默认的 publicprivate 社区已被删除。现在必须明确设置社区。
  3. seclevel 默认值从 none 更改为 enc
  4. 默认 SNMPv3 加密已更改为 AES。
  5. trap receiver(陷阱接收器,用于向另一台主机发送陷阱)的协议版本不再默认为 SNMPv2。

要配置 SNMPv3,你需要在配置中添加一个或多个用户,例如:

user "manager" authkey "XblueQ300ZyAbUIbndmWjfl" auth hmac-sha1 enc aes enckey "tVadj9jxq8rdJ"

如果你需要恢复 SNMPv1/v2c,你可以在 snmpd.conf(5) 中添加如下内容:

listen on any snmpv1 snmpv2c read
read-only community U9PeBY1694bcxMnm
seclevel none

社区名称不应该是常见的或容易被暴力破解的,特别是如果暴露在互联网上。

snmp(1) 1. 默认协议版本已从 v2c 更改为 v3。 2. 默认加密已更改为 AES。 3. 默认身份验证已更改为 SHA1。 4. 默认社区 public 已被删除。

删除的文件

dmx 库已被删除。

# rm -f /usr/X11R6/lib/libdmx.* \
/usr/X11R6/include/X11/extensions/dmxext.h \
/usr/X11R6/lib/pkgconfig/dmx.pc \
/usr/X11R6/man/man3/DMX*.3

你可以借助 sysclean 包进行更详细的清理。

特殊的软件包

net/freeradius。FreeRADIUS 在 3.0.22 中删除了 LEAP。 这是以前的默认配置,因此如果你启用了 EAP,你可能需要更新 /etc/raddb/mods-available/eap 并删除leap { ... } 行。

[FAQ Index] | [6.8 -> 6.9]