Hacker News 中文摘要

RSS订阅

OpenBSD 8.0 正式发布 -- OpenBSD 8.0

OpenBSD 8.0 于2026年10月20日发布,是该系统的第61个版本,版权归西奥·德·拉特(Theo de Raadt)所有,时间为1997-2026年。8.0版本的主题曲为《The Simps on AI》,美术作品由 yvaneht nioj 和 clanker 创作。用户可访问 FTP 页面查看镜像站点列表,前往其中一个镜像站点的 pub/OpenBSD/8.0/ 目录,或查阅8.0勘误页了解漏洞与临时解决方法,也可浏览7.9到8.0之间的详细变更日志。本次发布的 signify(1) 公钥包括 openbsd-80-base.pub、openbsd-80-fw.pub、openbsd-80-pkg.pub 和 openbsd-80-syspatch.pub,相关版权与致谢信息存放在 src.tar.gz、sys.tar.gz、xenocara.tar.gz、ports.tar.gz 文件中,或通过 ports.tar.gz 获取的文件内。

正文

骑自行车的河豚

OpenBSD 8.0 于 2026 年 10 月 20 日发布,是第 61 个 OpenBSD 版本。版权为 1997–2026 年 Theo de Raadt。8.0 歌曲是“The Simps on AI”,美术作品由 yvaneht nioj 和 clanker 创作。

  • 镜像机器列表请参阅 FTP 页面 上的信息。
  • 前往任一镜像站点的 pub/OpenBSD/8.0/ 目录。
  • 查看 8.0 errata 页面 获取缺陷和临时解决办法列表。
  • 7.9 与 8.0 版本之间的详细变更日志见 detailed log of changes。
  • 本版本的 signify(1) 公钥:openbsd-80-base.pub:RWSMSt0erHTctUxq2JDAgQRo64ztikp8JvQeiSPte3NZ0Geou0TkTEiE;openbsd-80-fw.pub:RWRjzXzC89s1iQC9P3xgcdeN6OUoJz9t7ggTY0xBb1W8PfeOzAdwod66;openbsd-80-pkg.pub:RWRspL7ERnSFIscdEvBwVySymWNopP+CEZHbaB3IMJIt0bUXGBuIfUqC;openbsd-80-syspatch.pub:RWQAeCccO9yAASmUJSCJEW9C5WOP/GAsa5dhMtPPmb5pehzPO7EAmqhK

所有适用的版权和鸣谢信息都包含在 src.tar.gz、sys.tar.gz、xenocara.tar.gz、ports.tar.gz 文件中,或通过 ports.tar.gz 获取的文件中。

What's New

以下是 OpenBSD 8.0 新增功能和系统的部分列表。完整列表请参阅通往 8.0 的 changelog。

  • 平台特定改进:

    • amd64:
      • amd64 内核虚拟地址空间从 4G 增大到 512G。
      • pmap(9) 直接映射现在置于随机位置。
      • 使用 AES CPU 指令加速交换分区加密。
    • arm64:
      • 增加休眠支持。
      • 使用 AES CPU 指令加速交换分区加密。
      • 实现 bounce buffers(反弹缓冲区)。
    • luna88k:
      • 修复 m88k 多次 CMMU 寄存器写入。
      • 扩展 m88k 内核态 CMMU 故障处理,以处理写保护故障。
      • 确保 luna88k m8820xinitializecpu() 在非 MP 内核上初始化逻辑 CPU #0。
      • 加快 luna88k m8820xcpunumber() 中的 CMMU 遍历。
    • riscv64:
      • 检测 CPU 扩展,并通过 elfauxinfo(3) ATHWCAP 和 ATHWCAP2 查询向用户态通告可用扩展。
      • 增加对 'V' 向量扩展的内核支持。
      • 实现 bounce buffers。
      • 增加对 RISC-V 高级中断架构的支持;新增 imsic(4) 和 aplic(4) 驱动。
      • 增加对 Sstc 定时器扩展的内核支持。
    • sparc64:
      • 为 sparc64 重定位标志表增加边界检查。
      • sparc64 切换到 LLVM 工具链。
      • 改进 SPARCV9 上的内存对齐。
    • 其他架构:
      • 停止支持 loongson 架构(与 Clang 22 不兼容)。
      • 修复 LLVM 中各种 RISC-V 和 MIPS 缺陷。
      • 修复 hppa 保护位的编码。
    • 更多平台特定变更见下面的硬件支持部分。
  • 各种内核改进:

    • 修复 open_wmemstream(3) 中的内存大小计算。
    • 修复 semop(2) 信号量 ID 在上下文切换期间被销毁/替换的问题。
    • 改进 pagedaemon 交换页面/释放内存时的非活动页队列启发式算法。
    • 新增 getexecpath(3),提供 elf(5) 程序执行路径的副本。
    • 为更大的 disklabel 做更多准备。
  • 挂起/休眠支持:

    • 为 qwz(4) 启用挂起/恢复。
    • 使 ufshci(4) 在 Samsung Galaxy Book4 Edge 和 HONOR MagicBook Art 14 Snapdragon 上能在挂起后存活。
    • 当笔记本盖子关闭且 machdep.lidaction=0 时,不再唤醒挂起的笔记本。
    • 增加全局睡眠模式变量以区分休眠与“正常”挂起。
    • 为 qcuart(4) 增加挂起/恢复支持。
    • 为 bytgpio(4) 增加唤醒中断支持,修复 IdeaPad 从挂起恢复的问题。
    • 在休眠解包磁盘镜像时验证复制到 piglet 的块大小。
    • 在 unhibernate 中读取块时验证磁盘镜像大小,防止整数溢出。
    • 在 unhibernate 中读取块表时防止磁盘镜像越界读取。
    • unhibernate 后清理帧缓冲。
    • 使 nvme(4) 休眠支持专用队列分配失败不再致命。
  • 直接渲染管理器和图形驱动:

    • 将 drm(4) 更新至 Linux 6.18.53。
    • 在 inteldrm(4) 中支持 Intel Arc A 系列(DG2/Alchemist)显卡。
    • amd64 上内核虚拟地址空间增大,允许映射超过 4GB 的 VRAM。
    • 规避部分 Alder Lake 系统上 inteldrm(4) 的 GuC 超时错误。
  • VMM/VMD 改进:

    • 每个虚拟机最多支持 64 个 VCPU 的 MP 支持。
    • 重新设计,使用文件管理虚拟机所有权。
    • 为客户虚拟机增加 x2apic 模式支持。
    • 修复 vmd(8) 启动时未检测到内核的问题。
    • 为 vmm(4) 的 MMIO 退出向 vmd(8) 提供故障 GPA。
    • 重构 vmm(4) 退出处理并修正 RIP 调整。
    • 在 vmm(4) 的 VMX 路径中支持可变长度指令。
    • 防止 vmd(8) 在 32/64 位 elf(5) 加载器中因畸形 elf(5) 文件导致越界读取。
    • 实现缺失的 lapic/ioapic 模式,修复 vmd(8) 对 32 位 Linux 客户机的支持。
    • 为 vmd(8) 客户机增加校验和卸载。
    • 增加 MSI/MSI-X virtio 设备中断支持。
    • 在 vmd(8) 中支持真正拆分 split-virtqueues。
    • 为 vmd(8) 增加 i82093aa ioapic 和 i82489dx 兼容 lapic 模拟。
    • 改进 qcow 处理。
  • 各种新的用户态功能:

    • netstat(1) 现在可以打印接口多播计数器;使 '-q' 更具体。
    • 调整 ddb(4) 默认 'ps' 输出,分别打印 'struct process' 和 'struct proc'。
    • 使 mount(8) 支持带 DUID 的 -u;更新文件系统时保留 DUID。
    • 通过 sndioctl(1) 控制 midithru 端口。
    • 允许通过 sndioctl(1) 添加或删除列表元素。
    • 新增 sndiod(8) server.mode 控制,使设置动态化,可通过 sndioctl(1) 更改。
  • 用户态中的更多缺陷修复和调整:

  • 改进的硬件支持和驱动缺陷修复,包括:

    • 在 Samsung Galaxy Book4 Edge 上启用 GXTP7936 触摸屏。
    • 增加对 riscv64 K3 PCIe/USB3 组合 PHY 的支持。
    • 在 riscv64 上启用 gpioleds(4)。
    • 在 smte(4)(SpacemiT K1 以太网设备)中改进接收数据包的错误检查。
    • 修复 SpacemiT K1 SoC 上的常规 MSI 中断。
    • 在 smtclock(4) 中增加对 SpacemiT K3 SoC 的支持。
    • 为 qcgpio(4) 增加 SC7280 支持。
    • 增加对 SpacemiT K3 dwpcie(4) PCIe 控制器的支持。
    • 增加 RK3528 I2C5 时钟,用于 Radxa E24C。
    • 增加 Qualcomm Glymur (X2) SoC 的 ACPI 硬件 ID。
    • 在 apldart(4) 中实现页表镜像;为 Apple USB 控制器启用 IOMMU。
    • 新增 samsabi(4) 驱动,用于 Samsung Advanced BIOS Interface (SABI)。
    • 新增 sambat(4) 驱动,用于 Samsung 笔记本电池监控。
    • 新增 rkotp(4) 驱动,用于 Rockchip OTP 内存。
    • 增加对 Radxa Zero 3 板上用于 CPU 电压的 RK8600 稳压器的支持。
    • 增加更多 AMD “Krackan Point” 设备 ID。
    • 修复 HONOR MagicBook 触摸板多点触控支持。
    • 修复 esp(4) FIFO 内存溢出。
    • 修复 softraid(4) 重建中的潜在内存泄漏。
    • 修复 softraid(4) 在 4096 字节扇区磁盘上的重建。
    • 修复 64 位 DMA 能力 re(4) 的高内存 mbuf。
  • 新增或改进的网络硬件支持:

    • 在 em(4) 中增加对 Panther Lake 和 Wildcat Lake 以太网设备的支持。
    • 在 ix(4) 驱动中增加对 Intel E610 以太网设备的支持。
  • 新增或改进的无线网络驱动:

    • 正确处理 qwx(4) 硬件返回空数据包的潜在情况。
    • 为 qwx(4) SRNG DMA 描述符内存补齐缺失的 DMA 同步。
    • 正确处理 qwx(4) 在连接时 VIF DMA 映射分配失败。
    • 修复 qwx(4) vif 列表上使用陈旧指针导致崩溃的问题。
    • 如果 qwx(4) 在 qwx_init() 中未能进入 RUNNING,则正确重置驱动和设备状态。
    • 避免 qwx(4) 设备上电期间的竞争条件。
    • 在 qwx(4) qwx_activate() 中正确使用 ioctl rwlock。
    • 确保 qwx(4) rxring->bufsmax 和 freemap 始终正确初始化。
    • 停止 qwx(4) init 任务等待 ioctl 锁可用。
    • 使 qwx(4) 正确处理 qwxqmifwinitdone() 中发生的错误。
    • 修复 qwx(4) 在 AP 之间漫游的问题。
    • 接口 UP 时始终允许 qwx(4) 中的数据帧中断。
    • 为 qwx(4) 增加 40MHz 信道支持。
    • 使 qwx(4) 仅在有空闲 Rx ring 槽位时才分配新 mbuf。
    • 避免在 qwx(4) 中从中断上下文调用 busdmamapcreate()。
    • 处理 qwx(4) 固件发送的国家代码事件,使关联更可靠。
    • 命令环重置时重置 qwx(4) 命令环 'queued' 计数器。
    • 确保在切换 net80211 状态时始终清除 qwx(4) nq 标志。
    • 修复 qwx(4) mac 配置中设置的 tx/rx 流数量。
    • 使 qwx(4) 在跳出 RUN 状态时发送 PMF goodbye 解除认证帧。
    • 确保在 qwxstop() 中 IFFRUNNING 时不调度新任务,防止 qwz(4) 崩溃。
    • 使 qwx(4) 优先选择 ic_bss 而非扫描树中的临时节点。
    • 在启动 vdev 之后(而非之前)将 peer 添加到 qwx(4) 固件,修复固件崩溃。
    • 为 qwx(4) 增加 802.11n 支持,通告 HT 能力并传递 HT/QoS peer 关联。
    • 在重置设备前请求 qwx(4) 固件进入 M3 状态。
    • 避免在 qwx(4) 中从中断上下文调用 busdmamapdestroy()。
    • 为 qwz(4) 增加 40MHz 宽度的 802.11n 支持。
    • 让 qwz(4) 处理原生 WiFi 帧中的 QoS。
  • 安装程序、升级、引导加载器和 pkg-tools 改进:

  • 安全改进:

    • 修复 vfs(9) 中的 pledge(2)。
    • 修复 aplmca(4) SoC 上的越界访问尝试。
    • 停止在各种实用程序中使用非标准 UIDMAX 和 GIDMAX。
    • 改进 ipsec(4) AES GMAC 加密。
    • 使 iked(8) 拒绝畸形和处于错误状态的 IKEv2 消息。
    • 修复 x509_verify 中的内存泄漏(CID 656293)。
    • 避免 sysctl(2) KERNPROCARGS 中的溢出。
    • 防止伪造或恶意的 iaddr 数据使 dhcpd(8) 崩溃。
    • 避免通过 dhcpd(8) 中的 DHCPINFORM 导致潜在内存耗尽。
    • 在 libcrypto RSA-PSS 中正确使用 saltlen 和 min_saltlen。
    • 在 libcrypto x509 中拒绝无效的 delta CRL。
    • 修复 libcrypto 路径验证中的 RFC 3779 继承处理。
    • 在 ld.so(1) 中使用 execve(2) 作为 $ORIGIN(否则回退到 realpath)。
    • 加固 syspatch(8) 抵御恶意脚本。
    • 限制允许通过 smtpd(8) 环境和 mda 的字符。
    • 修复 pax(1) 越过 NUL 读取的问题。
    • 停止 pax(1) 将恶意归档解压到工作目录之外。
    • 为 lldpd(8) 的 pledge(2) 增加 'mcast'。
    • 收紧不同类型套接字的 pledge_sockopt() level/optname 检查。
    • 扩展 'mcast' pledge(2) 以允许在以太网帧套接字上进行多播调整。
    • 将 libexpat 更新到 2.8.4(CVE-2026-66046、CVE-2026-76641、CVE-2026-76957)。
    • 当 vnode 更改时,避免 exec 中的脚本路径名 TOCTOU。
    • 使 execve(2) realpath 处理更健壮。
    • 将 luna88k 内核文件构建切换为 -fno-pie。
    • 从 m88k 88100 数据流水线中移除未授权内核内存读写漏洞。
    • unveil(2) 现在限制 man(1)、makewhatis(8) 和 man.cgi(8) 的读写访问权限。
    • dhcpleased(8) 现在验证 DHCP 服务器确认的 IP 地址。
    • 修复 perl(1) Storable 中的有符号整数溢出(CVE-2026-57433)。
    • 修复 perl(1) pack 和 unpack 中的整数溢出(CVE-2026-57432)。
    • 修复 perl(1) 错误的正则表达式匹配(CVE-2026-13221)。
    • 修复 profil(2) 中的内存泄漏和竞争条件。
    • 改进 elf(3) note 检查;防止越界访问。
    • 拒绝没有可加载段的 elf(3) 解释器。
    • 在 execelfmakecmds() 中对静态二进制文件禁用 kbind(2) 和 pinsyscalls(2)。
    • 修复 elf(5) 结构以避免泄漏内核栈内容。
    • LibXfont 2 修复 CVE-2026-56001、CVE-2026-56002 和 CVE-2026-56003。
    • Xserver(1) 修复 CVE-2026-55999 和 CVE-2026-56000。
    • 将 perl(1) Socket 更新到 2.041(包含 CVE-2026-12087 越界堆读取修复)。
    • 修复 iked(8) 使用 bzero(3) 清除掩码数据结构,而非使用 mask4。
    • 修复 nsd(8) 中的 CVE-2026-12244、CVE-2026-12245、CVE-2026-12246 和 CVE-2026-12490。
    • 停止在 isakmpd(8) 的 udpencaphandle_message() 错误路径中泄漏传输。
    • 在 isakmpd(8) ipsecvalidateid_information() 中强制按类型检查 ID 载荷大小。
    • 避免 memmem(3) 和 strstr(3) 中的移位溢出。
    • isakmpd(8) 中增加多个额外边界检查。
    • 为 syslogd(8) 父进程提供单独的可执行文件,用于权限分离。
    • 使 smtpd(8) 在通过 imsg 发送前清除 userinfo。
    • 使 smtpd(8) 拒绝通过 privsep IPC 收到的超大 sockaddr 载荷。
    • 使用前清零 smtpd(8) 信封解析临时缓冲区以加强 privsep。
    • 在拆卸时清除挂起的异步查询,以增强 smtpd(8) privsep。
    • 修复未初始化的 ktrace(1) 栈变量可能导致的信息泄漏。
  • 网络栈中的新功能:

    • 将 ice(4) 链路状态设置为全双工。
    • 减少 ice(4) 中的最大 TSO segs,以允许更多接口连接。
    • 在 ice(4) 上为 TSO 数据包启用 128 个 DMA 段。
    • 为 bge(4) BCM5720 启用 64 位 DMA。
    • 在 ogx(4) 中启用巨型帧。
  • 网络栈中的进一步变更和缺陷修复:

    • 停止 ipsec(4) 在 IP 头中溢出最大包大小。
    • 检测 bpf(4) bpf_mem 后端中整数溢出导致的越界读取。
    • 将外出数据包的 bpf(4) 移到传输路径的更后面。
    • 避免在 tun(4) tundevwrite() 中 mbuf 链分配失败时泄漏内存。
    • 修复 ixl(4) 中的 hardmtu 和 rxmax。
    • 在 iwx(4) 中正确处理动态信道宽度变更。
    • 加固 bpf(4) bpffilter;用 bpfvalidate 阻止未处理指令。
    • 为 bpf(4) 引擎增加适当的程序边界检查(libpcap CVE-2026-31912)。
    • 修复 ppp(4) 中的 bpf filter 调用;使用 bpf_mfilter(9)。
    • 改进 ospfd(8) 中 LSUPD、LSFLOOD 和 LS_SNAP 的 imsg 处理。
    • 更改 ospfd(8) imsg 处理。
    • ospfd(8) 现在添加缺失的 rtlabel 引用,并在只有标签更改时更新路由。
    • 在 ospf6d(8) 链路更新时保留配置的接口类型。
    • 确保 ospfd(8) 不会从进程中泄漏内存地址布局信息。
    • 使 authpf(8) read_config() 删除尾部空格以避免配置错误。
    • 修复 veb(4) SIOCBRDGRTS 和 SIOCBRDGVRTS ioctl 泄漏内核栈数据。
    • 修复 veb(4) 中的数据包损坏。
    • veb(4) 现在在 vebrulelist_get() 中 mallocarray() 失败时返回 ENOMEM。
    • 修复 ifconfig(8) 的 'vebX -tagged ifX' 接受过多参数的问题。
    • 改进 em(4) K1 退出超时,以接收非广播包。
    • 简化 em(4) 上的 mac 类型测试。
  • pf(4) 防火墙进行了以下更改:

    • 修复 pf(4) ioctl DIOCIGETIFACES 中的 off-by-one。
    • 附加表失败时不再释放调用者的 pf(4) 规则集。
    • 不再允许 pf(4) ioctl 中出现未终止的字符串。
    • 停止 pf(4) 丢弃源地址未指定的有效 MLD 包。
    • 防止 pf(4) 在收到精心构造的重置包时丢弃 TCP 状态。
    • 修复 pf(4) 连接计数器中的竞争,该竞争导致计数器下溢。
    • pf(4)/inet(4)/inet6(4) 中的分片重组现在发生在正确的路由域中。
    • 停止 'pfctl -s all' 转储加载到 pf(4) 的所有 OS 指纹。
    • 修复 pf(4) 出站包路径中的空指针解引用。
    • 修复 pf(4) pfrulecopyin() 中的越界读取。
  • 路由守护进程和其他用户态网络程序的改进如下:

    • 调整 smtpd(8) 代码,避免 LLM 扫描器误报缺陷。
    • 防止 agentx(3) 和 snmpd(8) 中畸形包上的 size_t 下溢。
    • 将 httpd(8) 服务器标志扩展到 64 位整数。
    • httpd(8) 现在对传递给 fastcgi 的分块请求强制执行“max request body”。
    • 使 httpd(8) 拒绝为共享 TLS 监听器配置不同客户端 CA 或 CRL。
    • httpd(8) 现在为每个参数发送一个 imsg fastcgi param 结构,以保留配置顺序。
    • 为 httpd(8) 增加自定义 HTTP 头支持。
    • 修复 httpd(8) 后缀范围处理。
    • 停止 httpd(8) 两次发送 location fcgiparams。
    • 使 httpd(8) 通过 bufferevent 排出中止响应,防止错误被截断。
    • 在 iked(8)、httpd(8)、relayd(8) 和 snmpd(8) 中,将 IMSGCTLPROCFD 限制为父进程,并检查进程 id/实例。
    • 将 httpd.conf(5) 中的默认 TLS 密码套件从 'compat' 切换为 'secure'。
    • 使 httpd(8) 和 dhcpd(8) 正确检查 timegm(3) 错误。
    • 启动时随机重链接 smtpd(8) 和 httpd(8)。
    • httpd(8) 现在拒绝 CL.TE 请求分帧(依据 RFC 9112 第 6.1 和 6.3 节)。
    • 使 httpd(8) 以 400 拒绝 obs-fold(RFC 9112 5.2)。
    • 修复使用 httpd(8) 分块传输编码的上传。
    • 启用 gzip-static 时,httpd(8) 现在会通告 Vary: Accept-Encoding。
    • 使 httpd(8) 通告静态文件重验证,保留 Last-Modified 和 If-Modified-Since 流程。
    • 为 relayd(8) 增加更多配置检查。
    • 重新加载后显式刷新 relayd(8) 重定向规则。
    • 在 relayd(8) 中移除错误的路由器禁用标志。
    • 在 relayd(8) 中使用按主机随机的 ICMP echo id。
    • 为 relayd(8) 过滤规则增加 Lua patterns(7) 支持;改进 glob(7) 文档。
    • 在 bgpd(8)、eigrpd(8)、httpd(8)、iked(8)、ntpd(8)、relayd(8) 和 smtpd(8) 中使用 getexecpath(3) 和 execv(3)。
    • 修复 relayd(8) 延迟连接日志。
    • 使 relayd(8) 检查 proccompose 和 imsgcompose_event 返回值。
    • 允许从 relayd.conf(5) 设置日志级别。
    • 为 relayd(8) CA privsep 引擎增加 ECDSA 支持。
    • relayd(8) 现在以 400 拒绝重复的 Content-Length 头。
    • 将 relayd.conf(5) 中的默认 TLS 密码套件从 'HIGH:!aNULL' 切换为 'secure'。
    • 将 relayd(8) 切换到新的 imsg API。
    • 使 relayd(8) 为分块消息剥离 Content-Length(RFC 9112 第 6.1 节)。
    • 使 relayd(8) 拒绝 obs-fold 以防止解析器差异(RFC 9112 5.2)。
    • 移除 relayd(8) 中泄漏内存的 X509dup() 调用;为 X509set_* 增加错误检查。
    • 在 relayd(8) 中增加对 MKCALENDAR HTTP 方法的支持。
    • 修复 relayd(8) 的调试构建。
    • 让 relayd(8) 支持多个可解析地址。
    • 让 relayd(8) 处理无正文的 HTTP 响应。
    • 修复 isakmpd(8) messageallocreply() 调用者中的空解引用。
    • 修复 isakmpd(8) 可能的未对齐 32 位读取。
    • 验证 isakmpd(8) DELETE 载荷 SPI 数组大小。
    • 验证 isakmpd(8) 中的 proposal 和 transform 大小。
    • 为 login_radius(8) Access-Challenge 中的 Port-Message 和 State 属性增加长度检查。
    • 防止 dhcpleased(8) 引擎向自身发送负数量的路由。
    • 使 dhcpleased(8) 从引擎进程接受正确数量的路由。
    • 确保 dhcpleased(8) UDP 头长度字段至少覆盖 UDP 头。
    • 扩展 smtpd(8) mask-src 以抑制会话细节。
    • 将 smtpd(8) 切换到 imsgbuf_get(3)。
    • 在 smtpd(8) mdaenvelopefree() 中释放 dispatcher 以避免泄漏。
    • smtpd(8) 现在在构建 mbox 路径前拒绝空用户名或含斜杠的用户名。
    • smtpd(8) 现在在启动 SMTP 入队对话前拒绝 argv 派生字段中的 CR/LF。
    • 在 smtpd(8) smarthost 查找失败路径上正确释放复制的信封。
    • 在 smtpd(8) mdaenvelopefree() 中正确释放 mda_subaddress 以避免内存泄漏。
    • 使 smtpd(8) 使用 inflateEnd() 拆除 uncompressgzipchunk() 中的 inflate 流。
    • smtpd(8) 现在在 unpack_rr() 报告失败后停止解析 DNS 应答。
    • 在处理 auth tag 和 IV 数据前验证加密的 smtpd(8) 队列缓冲区大小。
    • 引入 rtrd(8) RPKI-To-Router 协议守护进程和 rtrctl(8)。
    • acme-client(1) 有多项更改:
    • 在 bgpd(8) 中:
      • 调整 bgpd(8) 多 AFI/SAFI 会话的优雅重启定时器处理。
      • 如果路由的验证状态发生变化,使 bgpd(8) 重新评估前缀。
      • 如果 msg->connected 为 false,在 nexthopupdate() 中清除 bgpd(8) NEXTHOPCONNECTED。
      • 当达到 MSGPROCESSLIMIT 时,使 bgpd(8) 节流从对等体读取。
      • 修复 bgpd(8) aspatableequal() 相等性比较。
      • 将 draft-ietf-sidrops-8210bis-26 中的新 RTR v2 错误代码纳入 bgpd(8)。
      • 重做 bgpd(8) IdleHoldTimer 及快速重连的实现方式。
      • 重做 bgpd(8) adj-rib-out 中的 forceupdate 逻辑。
      • 停止 bgpd(8) 向 bgpctl(8) 泄漏对等体数据。
      • 在 bgpd(8) 中实现 chmetalocate()。
      • 为常规对等体恢复 bgpd(8) pathidtx hack。
      • 在 bgpd(8) 中改进 mrtdumpentrymp() 计算处理,避免溢出。
      • 避免在 iked(8)、isakmpd(8)、bgpd(8) 和 ldpd(8) 中解析 PFKEY 回复时无限循环。
      • 让 bgpd(8) 确保存在 nlri 数据时 next-hop 属性存在。
      • 停止 bgpd(8) 在版本不匹配时硬失败;忽略额外的 end-of-params 消息。
      • 改进 bgpd(8) 对未知扩展团体的处理。
      • 将 bgpd(8) MRT 属性缓冲区增大到 MAXEXTPKTSIZE,使其在所有情况下都可用。
      • 修复 bgpd(8) ribremove 和 parse.y 中的释放后使用。
      • 增加 bgpd(8) forceupdate 标志,以在 adjoutprefixupdate() 中强制 pendprefixadd() 调用。
      • 使 bgpd(8) 在降级路径中遵守 RTR min-version 并正确关闭连接。
      • 改进 bgpd(8) add-path 发送解析器;若 max 与 best 同时使用则报错。
      • 调整 bgpd(8) upgenerateaddpath() 中的限制处理。
      • 在对等体启用的检查中增加扩展消息能力。
      • 使 bgpd(8) 对 adj-rib-out 情况下未处理的 imsg 类型返回错误。
      • 修复 bgpd(8) 在小端系统上的端口配置。
      • 为 bgpd(8) ibufsetmaxsize() 增加额外大小检查。
      • 引入 MAXADDPATHCOUNT(设为 100)并用于 bgpd(8) add-path。
      • 在 bgpd(8) mergepeers() 中也为克隆对等体设置 localbgpid,而非仅常规对等体。
      • 将 bgpd(8) 中的循环计数器从 uint8t 转换为 uint。
      • 将 bgpd(8) 中最大可配置 stale 时间减少到 CAPAGRTIMEMASK(4095)。
      • 在 bgpd(8) sessiongracefulrestart() 中也启动 SessionDown 定时器。
      • 使 bgpd(8) 检查 xp->rdesession 以了解 RDE 是否正在运行会话。
      • 改进 bgpd(8) 中的 pathcalchash()。
      • 修复无效 bgpd(8) ORIGIN 属性的 “treat as withdraw” 处理。
      • 修复 bgpd(8) chash 中的两个内存记账问题。
      • 对 bgpd(8) 中的 TLV 编码增加额外检查。
      • 将所有 bgpd(8) ASPATH 属性限制为 750 个元素。
      • 在 bgpd(8) 中防止 attroptadd 中 uint8t 长度值溢出。
      • 如果仅 PREFIXFLAGFILTERED 发生更改,重新评估 bgpd(8) 前缀。
    • 在 rpki-client(8) 中:
  • tmux(1) 改进和缺陷修复:

    • 重建列表时在树模式下保持滚动位置(issue 5631)。
    • 如果被杀死,不泄漏(wait-for 中的)等待客户端(issue 5614)。
    • 点击边框时不取消标记。
    • 增加对无边框菜单(如窗格)的支持。
    • 增加 utf8 终端特性。
    • 更早忽略焦点事件,避免它们干扰前缀。
    • 为 new-pane 增加 -K 标志,使模态窗格捕获所有按键。
    • 在分割窗口前始终取消缩放,包括浮动窗格。
    • 增加 'T' 以更改窗格标题。
    • 增加 refresh-now 命令。
    • 如果 Ms 无效(例如无 %p1)则忽略,并在客户端模式下报告。
    • 修复同步组且无当前窗口时的崩溃。
    • 增加 paneprivatemodes 格式,包含 DEC 私有模式列表。
    • 防止在 landisk 上启动时核心转储。
    • 增加模态窗格,目前通过 new-pane -O 创建。
    • 大幅重做提示。
    • 修复状态行在顶部时光标计算。
    • 为 capture-pane 增加 -H 标志以显示超链接。
    • 为 capture-pane 增加 -L 以显示行号,增加 -F 以显示行标志。
    • 从历史中移除或释放时清除整行。
    • 创建新窗格时重绘整个会话。
    • 为 kill-session 增加 -g 标志以杀死组中的所有会话。
    • 修复释放布局单元格时的崩溃。
    • 为 %unlinked-window-renamed 增加缺失参数。
    • 如果缓冲区包含部分粘贴结束,则增加转义延迟。
    • 修复因在排序列表中包含未连接客户端导致的崩溃。
    • 增加 new-pane 命令。
    • 修复重绘滚动条时下溢导致的无限循环。
    • 修复排队窗格输出的控制模式拆卸顺序。
    • 增加 Emacs 风格的 re-centre-top-bottom。
    • 为一些循环增加时间限制。
    • 为 screenmodeto_string 增加缺失标志。
  • LibreSSL 4.4.0:

    • 可移植性变更:
      • 大量针对 AIX、FreeBSD、macOS、MinGW、NetBSD 尤其是 Windows 的兼容层修复。
      • 修复 MSVC ARM64 优化器在常量时间 bignum 代码中的错误代码生成。
      • 改进许多平台上的汇编支持。
      • 修复 openssl(1)、nc(1) 和 ocspcheck(8) 在提供它们的主机上静默运行而不使用 pledge(2) 和 unveil(2) 的问题。
    • 内部改进:
      • PKCS#7 的少量代码清理。
      • 清除 RFC 3779 IP 地址范围最大值中未使用的位。
      • 对 DTLS 代码进行清理,避免许多复杂处理。
      • 在 ML-KEM 代码中清零 failurekey。
      • 改进基于预处理器的 SHA 汇编的可移植性。
      • 从公共和内部头文件中移除一些残留的 #ifdef。
      • 引入并使用 dtls12handshakemsg 框架。
      • 在 ui 代码中将 union 从 _ 重命名为 u,避免 Windows CE #ifdef。
      • 在移除 TLSv1.0 和 TLSv1.1 后清理并简化签名算法处理。
      • 在 ecdhcomputekey() 中增加无穷远点检查。
      • 修复现代 X.509 验证器中不可达非传统路径上的错误目的检查。
      • 改进 TLSv1.3 服务器对无共享组的处理。
      • 修正 HelloRetryRequests 的辅助密钥共享处理。
      • 修复 crlcb() 中 EXFLAGCRITICAL 处理不当。
      • 在得分相同的 CRL 中,优先选择 thisUpdate 最新的一个,以匹配 BoringSSL 和 OpenSSL 行为。
      • 清理 DTLS 中的序列号和消息头处理。
      • 移除 b64write() 中冗余的 BIOwrite() 长度断言。
      • 将无效 base64 BIO 状态报告为内部错误而非断言。
      • 通过使用展开和交错算法提高 SHA-3 性能。
      • 延迟分配 TLSv1.3 接收缓冲区。
      • 简化切换到传统栈时剩余记录内容的处理。
      • 避免 dtls1ctrl() 中返回值无害的窄化。
      • 从 tls1PRF() 中移除 NIDmd5_sha1 支持。
      • 移除 DTLS 未处理记录队列。
      • 移除 DTLS 应用数据队列。
      • 移除从未设置的 SSL3FLAGSNORENEGOTIATECIPHERS。
    • 兼容性变更:
      • 命名不当的 tlspeercertchainpem() 已弃用,未来版本可能移除;应改用 tlspeercertchainverifiedpem() 和 tlspeercertbundleunverifiedpem()。
      • 将 X25519MLKEM768 用作 libtls 中 TLSv1.3 连接的首选组。
      • 确保 libtls 与未来将停止 NUL 终止 ASN.1 字符串的 OpenSSL 版本继续兼容。这是 libtls 中的一个旧缺陷,可能从 OpenSSL 4.2 开始引发问题。
      • CRYPTOcleanupallexdata() 现在为空操作。它原本不是线程安全的,实际清理现在由 OPENSSL_cleanup(3) 完成。
      • 使 X509checkca(3) 与现代 OpenSSL 一致。虽然长期以来一直记录它仅在调用 X509checkpurpose(3) 后有效,但“失败关闭”仍有意义,即指示非 CA。
      • 增加 CCR、ErikIndex、ErikPartition、ErikSegmentIndex 和 communityDefinition 的 OID。
    • 缺陷修复:
      • 修复 PKCS7set{un,}signedattributes(3),允许调用者在失败时释放而非冒双重释放风险。
      • 初始化 TLS 密钥共享代码中的 decodeerror 和 invalidkey 变量,避免基于未初始化内存分支。
      • 在 ClientHello 哈希中记录类型与数据之间的扩展长度,确保第一次和第二次 CH 中的分帧相同。
      • 修复 sclient XMSS 模式中的越界写入。
      • 确保 ECGROUPcheck(3) 和 X509CRLverify(3) 失败导致 openssl(1) ecparam 和 openssl crl 中的 “app” 失败。
      • ssocket 中反向 DNS 查找失败时不导致 accept 失败。
      • 确保 X509V3EXTprint(3) 仅返回 0 和 1。
      • 避免 IPAddressFamilycmp() 中对 NULL 调用 memcmp()。
      • 在 libtls 中禁止将指定为 FQDN 的 TLD 进行通配符匹配。
      • 修复 TLSv1.2 与自定义曲线列表相关的某些问题。
      • 确保对等方提供的 EC 公钥使用未压缩编码。
      • 解码 EC 对等方 pubkey 失败时发送 decodeerror 警报。
      • 避免基于密码的 CMS 解密中的空解引用和越界读取。
      • 为 ASN1mbstrinccopy() 增加一些缺失的边界检查。
      • 避免 PKCS7verify(3) 中释放调用者拥有的缓冲区。
      • 从默认选项中移除 SSLOPLEGACYSERVERCONNECT。
      • 对各类 HelloRetryRequest 违规发送非法参数警报。
      • 检查服务器选择的密码套件是否适用于 TLSv1.2。
      • 在 uiopensession() 失败时解锁 CRYPTOLOCKUI 以避免死锁。
      • 检查 HMAC(3) 返回值,避免 openssl(1) 中后续使用未初始化值。
      • 对无 supportedgroups 的 keyshare 使用正确警报。
      • 当验证回调返回 1 时,不丢弃 X509VERRHOSTNAMEMISMATCH。长期以来一直记录这是不明智的,但某些应用仍这样做。
      • 确保服务器选择我们通告的 ALPN 协议,否则以 illegalparameter 中止握手。
      • 修复省略内容的 PKCS#7 对象流式处理。
      • 避免 PKCS7stream() 中因类型混淆导致的越界访问。
      • 修复 asn1_multi()(配置解析中处理序列和集合的辅助函数)中的泄漏和各种其他缺陷。
      • 在不破坏 RPKI 的前提下尽可能修复叶节点的 RFC 3779 继承检查。仍允许直接颁发者省略其中一个扩展,否则约三分之一的 RFC 9286 Manifests 会失效。
      • 修正 dtls1processfragment() 中一个搞砸的大小检查。
      • 避免将 delta CRL 误认为完整 CRL。
      • 复制 RSA-PSS EVPPKEYCTX 时,确保复制 saltlen 和最小 saltlen 限制,而非使用默认值。
      • 允许 DTLS 客户端接收意外的 Finished 消息。
      • 在将叶证书添加到已验证链之前缓存其扩展,使名称约束检查更可靠。
      • 确保搜索整个主题中的电子邮件地址和通用名称。
      • 在基本未使用的传统 NAMECONSTRAINTS*() API 中检查电子邮件和 subjectAltname 中的嵌入 NUL。
      • 移除 CRL 分发点扩展中对 nameRelativeToCRLIssuer 的支持。依据 RFC 5280,符合标准的 CA 不应使用它,且它在签名前一直消耗内存。
    • 安全性和可靠性修复:
      • 修复 X.509 名称约束 URI 主机解析中的解析问题。正确处理 IPv6 字面量,且不允许精心构造的 userinfo 绕过主机检查。
      • 限制缓冲 DTLS 握手消息的大小,避免小握手消息片段上过大的内存消耗。
      • 修复使用 tlsconfigocsprequirestapling() 的客户端的 OCSP 响应者授权绕过,已知只有 OpenBSD nc(1) 和 ftp(1) 在配合 “muststaple” 关键字使用时受影响。
    • 测试和主动安全:
      • 改进 DTLS 和 TLS 重协商的测试覆盖。
      • 从 pre-Apache2 许可的 BoringSSL 添加 X.509 CRL regress。
      • 重做测试框架,从基于文件改为基于内存,并更接近 Go 的输出格式。
  • OpenSSH 10.6:

    • 安全修复:
      • 禁用 ssh(1) LZ77 字典编码器以避免潜在的侧信道泄漏。
      • 修复 ChannelTimeout 和 RekeyLimit 未在 sshdconfig(5) 中应用的问题。
      • 使 ssh(1) authorizedkeys 的 “restrict” 关键字正确应用于隧道转发。
    • 潜在不兼容变更:
      • 使用 IANA 分配的 ssh-mldsa44-ed25519 代码点,而非 '@openssh.com'。
      • 使 sshd_config(5) DisableForwarding=yes 覆盖 PermitTunnel=yes。
      • 在 ssh-agent(1) 代理密钥使用约束中强制用户名最大大小。
      • 禁止 scp(1) '-O filename' 中出现 NUL 字节。
    • 新功能:
      • 新增 ssh-add(1) '-P' 选项以跳过 PIN 输入(bz3635)。
      • 修复 ssh(1) 与 readpassphrase(3) 的信号处理。
      • 将 ssh(1) 的 ed25519 从 supercop 切换到 libsodium。
      • 扩展 ssh(1) TCPKeepAlive 以支持转发(bz3921)。
      • 增加 ssh-keygen(1) 'hexdump' 以十六进制格式转储密钥 blob。
      • 允许在重置密码时为 FIDO 私钥设置/清除 ssh-keygen(1) touch-required/verify-required 标志。
      • 增加 ssh(1) '-Z user@host' 模式,列出将尝试用于认证的公钥。
      • 增加实验性 ssh(1) 对复合后量子 mldsa44-ed25519 签名方案的支持。
      • 增加 ssh(1) keygen 函数的显式种子变体。
      • 为 sshd(8) ed25519 验证增加签名可延展性和公钥有效性检查。
    • 缺陷修复:
      • 检查 ssh(1) 压缩载荷不会膨胀超过最大载荷长度。
      • 避免多个 ssh(1) 进程建立多路复用控制套接字之间的竞争。
      • 修复 ssh-add(1) 中的内存泄漏(CID 913600)。
      • 修复 ssh(1) CIDs 913601 和 913602。
      • 修复 ssh(1) CID 913600。
      • 将 ssh(1) 通道超时转换为允许小数和亚秒超时。
      • 使 ssh(1) 正确屏蔽信号以使用 sigaddset(bz3981)。
      • 修复 ssh(1) 内存泄漏(CID 913598 和 913599);添加缺失分号(CID 913599)。
      • 修正 ssh(1) 夏令时时间戳转换(bz4004)。
      • 修复近期 pledge(2) 变更后 t-multiplex 中 ssh(1) 代理套接字损坏。
      • ssh-keyscan(1) 读取服务器横幅不再在多主机扫描时阻塞/冻结。
      • 当 ssh(1) 代理锁定时,允许 session-bind@openssh.com 请求。
      • 避免 ssh(1) 客户端中潜在的 realloc 释放后使用。
      • 重新排序 ssh(1) 公钥认证期间尝试的证书。
      • 修复 ssh(1) ML-KEM/ECDH 互操作问题。
      • 从预认证攻击面移除一些 ssh(1) 密钥解析和验证路径。
      • 通过命令行执行 ssh(1) 下载时,避免下载到服务器控制路径。
      • 避免 ssh(1) 中可能的空解引用;净化通过远程 glob 接收的文件名。
      • 大幅重构 sshd(8) 配置管理代码。
      • 使 sshd(8) 将从系统解析器接收的域名强制转换为小写。
      • 修复 sshd(8) 中两次一字节越界读取。
      • 对从 preauth 传递到 postauth sshd(8) 进程的传输状态进行更严格验证。
      • 修复 ssh(1) 客户端在 cipher_init() 失败时错误路径上的释放后使用。
      • 增加 ssh-agent(1) -V 以打印版本,用于在重链接后测试二进制文件是否功能正常。
      • 停止 ssh(1) 将错误的 cipher/mac 列表参数验证为有效。
      • 修复 ssh(1) 公钥认证期间的空解引用。
      • Dropbear 最近增加了一个 -Q 选项;让 ssh(1) 在可用时使用它查询 KEX。
      • 将 ssh(1) 动态 tcpip 通道分类为批量而非交互式(bz3958)。
  • Ports 和软件包: 每个架构的许多预编译软件包:

    • aarch64:12907
    • amd64:13060
    • arm:XXX
    • i386:10659
    • mips64:9072
    • powerpc:XXX
    • powerpc64:9564
    • riscv64:11116
    • sparc64:10621

部分亮点:

  • Asterisk 20.21.0 和 22.11.0
  • Audacity 3.7.9
  • CMake 4.3.5
  • Chromium 154.0.8037.92
  • Emacs 31.1
  • FFmpeg 9.0.2
  • GCC 16.1.0
  • GHC 9.10.3
  • GNOME 49
  • Go 1.27.1
  • JDK 11.0.32、17.0.20、21.0.12 和 25.0.4
  • KDE Gear 26.08.1
  • KDE Frameworks 6.30.0
  • KDE Plasma 6.7.5
  • Krita 6.0.3
  • LLVM/Clang 21.1.8 和 22.1.8
  • LibreOffice 26.8.0.3
  • Lua 5.1.5、5.2.4、5.3.6、5.4.8 和 5.5.1
  • MariaDB 12.3.3
  • Mono 6.14.1
  • Mozilla Firefox 157.0 和 ESR 153.4.0
  • Mozilla Thunderbird 153.4.0
  • Mutt 2.4.2 和 NeoMutt 20260616
  • Node.js 24.21.0 和 Deno 2.9.7
  • OCaml 4.14.2
  • OpenLDAP 2.6.15
  • PHP 8.3.33、8.4.26 和 8.5.11
  • Postfix 3.5.28 和 3.11.7
  • PostgreSQL 18.6
  • Prism Launcher 11.1.0
  • Python 2.7.18 和 3.14.7
  • Qt 5.15.19(+ kde 补丁)和 6.11.2
  • R 4.6.1
  • Ruby 3.3.12、3.4.11 和 4.0.7
  • Rust 1.98.1
  • SQLite 3.53.2
  • Shotcut 26.8.1
  • Sudo 1.9.17p2
  • Suricata 7.0.7
  • Tcl/Tk 8.5.19、8.6.18 和 9.0.4
  • TeX Live 2026
  • Vim 9.2.1125、Neovim 0.12.5 和 Vim-Classic 2026091
  • Wayland 1.26.0 及合成器 CoW、Labwc、Mango、Niri、Sway 和 Wayfire
  • Vulkan 1.4.357.0
  • Xfce 4.20.0

    • 手册页和其他文档如常稳步改进。
    • 该系统包含以下来自外部供应商的主要组件:
  • Xenocara(基于 X.Org 7.7,含 xserver 21.1.24 + 补丁、freetype 2.14.3、fontconfig 2.17.1、Mesa 25.0.7、xterm 410、xkeyboard-config 2.20、fonttosfnt 1.2.5 等)
  • LLVM/Clang 22.1.6(+ 补丁)
  • GCC 4.2.1(+ 补丁)和 3.3.6(+ 补丁)
  • Perl 5.42.3(+ 补丁)
  • pkgconf 3.0.7
  • NSD 4.15.2
  • Unbound 1.26.1
  • Ncurses 6.4
  • Binutils 2.17(+ 补丁)
  • GDB 6.3(+ 补丁)
  • Awk 20250116
  • Expat 2.8.4
  • zlib 1.3.2(+ 补丁)

How to install

有关如何在机器上安装 OpenBSD 8.0 的详细信息,请参阅镜像站点上的以下文件:

熟悉 OpenBSD 及“disklabel -E”命令使用方法的用户的快速安装信息。如果在安装 OpenBSD 时感到困惑,请阅读上面列出的相应 INSTALL.* 文件!

OpenBSD/alpha:

如果机器能从 CD 启动,可将 install80.iso 或 cd80.iso 写入 CD 并从中启动。更多细节请参阅 INSTALL.alpha。

OpenBSD/amd64:

如果机器能从 CD 启动,可将 install80.iso 或 cd80.iso 写入 CD 并从中启动。可能需要先调整 BIOS 选项。

如果机器能从 USB 启动,可将 install80.img 或 miniroot80.img 写入 U 盘并从中启动。

如果无法从 CD、软盘或 USB 启动,可使用随附 INSTALL.amd64 文档中描述的 PXE 通过网络安装。

如果计划将 OpenBSD 与另一操作系统双启动,需要阅读 INSTALL.amd64。

OpenBSD/arm64:

根据硬件情况,可将 install80.iso 或 cd80.iso 写入 CD 并从中启动,或将特定系统的 miniroot 写入 SD 卡,在连接串行控制台后从中启动。更多细节请参阅 INSTALL.armv64。

OpenBSD/armv7:

将特定系统的 miniroot 写入 SD 卡,在连接串行控制台后从中启动。更多细节请参阅 INSTALL.armv7。

OpenBSD/hppa:

按照 INSTALL.hppa 或 hppa 平台页面 中的说明通过网络启动。

OpenBSD/i386:

如果机器能从 CD 启动,可将 install80.iso 或 cd80.iso 写入 CD 并从中启动。可能需要先调整 BIOS 选项。

如果机器能从 USB 启动,可将 install80.img 或 miniroot80.img 写入 U 盘并从中启动。

如果无法从 CD、软盘或 USB 启动,可使用随附 INSTALL.i386 文档中描述的 PXE 通过网络安装。

如果计划将 OpenBSD 与另一操作系统双启动,需要阅读 INSTALL.i386。

OpenBSD/landisk:

将 miniroot80.img 写入 CF 或磁盘的开头,然后正常启动。

OpenBSD/luna88k:

将 'boot' 和 'bsd.rd' 复制到 Mach 或 UniOS 分区,从 PROM 启动引导加载器,然后从引导加载器启动 bsd.rd。更多细节请参阅 INSTALL.luna88k 中的说明。

OpenBSD/macppc:

将镜像站点上的 install80.iso 映像刻录到 CDROM,开机时按住 C 键,直到显示屏亮起并显示 OpenBSD/macppc boot。

或者在 Open Firmware 提示符下输入 boot cd:,ofwboot /8.0/macppc/bsd.rd。

OpenBSD/octeon:

连接串行端口后,通过 DHCP/tftp 通过网络启动 bsd.rd。更多细节请参阅 INSTALL.octeon 中的说明。

OpenBSD/powerpc64:

安装时,将 install80.img 或 miniroot80.img 写入 U 盘,插入机器并在 Petitboot 中选择 OpenBSD install 菜单项。更多细节请参阅 INSTALL.powerpc64 中的说明。

OpenBSD/riscv64:

安装时,将 install80.img 或 miniroot80.img 写入 U 盘,并在插入该驱动器的情况下启动。确保同时插入 HiFive Unmatched 板随附的 microSD 卡。更多细节请参阅 INSTALL.riscv64 中的说明。

OpenBSD/sparc64:

将镜像站点上的映像刻录到 CDROM,从中启动并输入 boot cdrom。

如果这不起作用,或者没有 CDROM 驱动器,可将 floppy80.img 或 floppyB80.img(取决于机器)写入软盘,并用 boot floppy 启动。细节请参阅 INSTALL.sparc64。

确保使用格式正确且无坏块的软盘,否则安装很可能失败。

也可以将 miniroot80.img 写入磁盘上的交换分区,并用 boot disk:b 启动。

如果都不行,可以按照 INSTALL.sparc64 中所述通过网络启动。

How to upgrade

如果已有 OpenBSD 7.9 系统且不想重新安装,可在 Upgrade Guide 中找到升级说明和建议。

Notes about the source code

src.tar.gz 包含从 /usr/src 开始的源代码归档。此文件包含除内核源代码外的所有所需内容,内核源代码位于单独的归档中。解压方法:

mkdir -p /usr/src

cd /usr/src

tar xvfz /tmp/src.tar.gz

sys.tar.gz 包含从 /usr/src/sys 开始的源代码归档。此文件包含重建内核所需的所有内核源代码。解压方法:

mkdir -p /usr/src/sys

cd /usr/src

tar xvfz /tmp/sys.tar.gz

这两个目录树都是常规的 CVS 检出。使用这些目录树可以抢先使用 此处 描述的 anoncvs 服务器。使用这些文件比从头检出完整 OpenBSD 源代码树能获得快得多的初始 CVS 更新。

Ports Tree

还提供了 ports 树归档。解压方法:

cd /usr

tar xvfz /tmp/ports.tar.gz

如果此时对 ports 一无所知,请阅读 ports 页面。本文不是如何使用 ports 的手册,而是一组旨在帮助用户快速上手 OpenBSD ports 系统的说明。

ports/ 目录代表我们 ports 的 CVS 检出。与我们的完整源代码树一样,我们的 ports 树也通过 AnonCVS 提供。因此,为了跟上 -stable 分支,必须将 ports/ 树放在可读写介质上,并使用如下命令更新树:

cd /usr/ports

cvs -d anoncvs@server.openbsd.org:/cvs update -Pd -rOPENBSD80

[当然,必须将此处的服务器名替换为附近的 anoncvs 服务器。]

请注意,大多数 ports 在我们的镜像上以软件包形式提供。如果出现问题,将为 8.0 发布版提供更新的 ports。

如果有兴趣添加某个 port、想提供帮助或只是想了解更多,邮件列表 ports@openbsd.org 是个好去处。

评论

讨论气氛整体偏肯定,多数人称赞 OpenBSD 8.0 的稳定、简洁、man 文档与 sysupgrade 升级体验,并以旧款 Lenovo 长期可用为例。分歧主轴则集中在版本号 7.x→8.0 的含义、无头升级必须插显示器、ssh(1) 从 supercop ed25519 切到 libsodium 被轻描淡写,以及对发布图形/歌曲的调侃,还有人担忧低质生成内容(slop)将淹没技术圈。

称赞 OpenBSD 8.0 稳定、简洁、文档优秀且升级顺滑

  • 多名用户表示从 7.6 起用 sysupgrade/syspatch 一路升到 8.0 仍工作良好,2012 年的 Lenovo 也能继续跑,近 20 年日常使用几乎感觉不到升级变化(较多人)
  • 有人把它当堡垒机/跳板机后爱不释手,认为系统极小、pf 直观、安全加密与 pledge/unveil 等机制让人觉得这才是正统 *nix(高赞) > 刚登录时 ps aux 只有十来条,man 页始终出色,这种小巧和一致让人觉得它才是正统 *nix。(@ctolsen)
  • 发布说明被认为比近期 Linux 发行说明更清晰、更有条理,能直接理解实际影响(少数人)

肯定 VMM/VMD 的多处理器支持,并关注 SMP 网络改进

  • 有人欢呼 VMM/VMD 终于获得多处理器(MP)支持,认为进展巨大(高赞)
  • 也有用户注意到近期版本在 SMP 网络部分有明显改进,并询问 8.0 与之前版本的基准测试数据(少数人)

质疑版本号进位、发布时机与改动风格

  • 有人疑惑版本号从 7.x 跳到 8.0 是否代表比 7.8→7.9 更大的更新,还是到 X.9 后自动进位(少数人)
  • 有人读更新日志时一度要查是不是愚人节,觉得发布偏早,且不少改动听起来不像典型的 OpenBSD 改动(少数人) > 读更新日志时一度要查是不是愚人节,觉得发布偏早且不少改动不像 OpenBSD 风格。(@MycroftJones)
  • 有人对 ssh(1) 在脚注中把 ed25519 实现从 supercop 换成 libsodium 感到又好笑又警觉,认为密码学实现切换不该如此轻描淡写(少数人)

反映升级与硬件兼容上的具体痛点

  • 有人抱怨升级时必须插着显示器,否则下载完成后会重启回旧版本,并问这是否常见(少数人)
  • 有人询问是否有人在 2018 Intel Mac Mini 上成功运行,自己之前试 7.8/7.9 时受挫(少数人)

担忧低质生成内容(slop)将淹没技术圈

  • 有人悲观地认为 slop 会像病毒一样感染技术圈,让人不得不从大量半吊子内容里筛选真正可靠的人工产出(少数人)

对发布图形不买账,却照例称赞发行歌曲

  • 社区对发布周边保持轻松态度:有人不买账发布图形,也有人延续传统认为发行歌曲依旧很棒(少数人)

有价值的补充

  • 有用户(@nanolith)用“升级后几乎注意不到变化,要专门去找才会发现”来形容 OpenBSD 的稳定一致,并以一台 2012 年 Lenovo 继续作为旅行机和控制台来佐证旧硬件长期可用。