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:
- sparc64:
- 为 sparc64 重定位标志表增加边界检查。
- sparc64 切换到 LLVM 工具链。
- 改进 SPARCV9 上的内存对齐。
- 其他架构:
- 停止支持 loongson 架构(与 Clang 22 不兼容)。
- 修复 LLVM 中各种 RISC-V 和 MIPS 缺陷。
- 修复 hppa 保护位的编码。
- 更多平台特定变更见下面的硬件支持部分。
- amd64:
各种内核改进:
- 修复 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) 更改。
用户态中的更多缺陷修复和调整:
- 确保加载时 elf(5) 头与程序头适合共享库。
- 修复 getpwent(3) yp_next() 中密钥内存的泄漏。
- 在 patch(1) 中,解决畸形 ed(1) 脚本输入导致的无限循环。
- 在 authpf(8)、pflogd(8)、ldapd(8)、ldpd(8)、lpd(8)、radiusd(8)、snmpd(8) 中使用 execv(3) 绝对路径。
- uaudio(4) 现在测试报告的格式和声道是否可用。
- 停止 sndiod(8) 在 MIDI 端点以非空缓冲区连接时中止。
- 修复 sndiod(8) 中两处遗漏的 file_new() 返回值检查。
- 修复 npppd(8) LCP MRU 选项处理。
- 调整 pstat(8) 以返回会话领导进程的 pid;允许 '-t -M' 工作。
- 使 eigrpd(8) 验证 prefixlen 以避免溢出。
- 使 sndiod(8) 在堆上分配所有 midithru 结构。
改进的硬件支持和驱动缺陷修复,包括:
- 在 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。
新增或改进的网络硬件支持:
新增或改进的无线网络驱动:
- 正确处理 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 改进:
- 统一 pkg_add(1)、sysupgrade(8) 和 syspatch(8) 中的 installurl(5) 处理。
- 修复 fw_update(8) 对非限定文件名的可用空间检查。
- 设置 fw_update(8) 可下载文件大小限制。
- fw_update(8) 中更严格的验证,不再将不可信注释视为数据。
- pkg_add(1) 现在检测并克服一些与 merge-sets 相关的无限循环。
- 清除 fw_update(8) FWURL 末尾的斜杠。
- 从 pkg_add(1) 默认搜索路径中移除当前目录。
- 改进 fw_update(8) 按文件名下载固件的方式。
- 改进 fw_update(8) 在找不到 SHA256.sig 时的错误信息。
- fw_update(8) 现在检查本地 SHA256.sig 的签名。
- 在 fw_update(8) 中,使 tar(1) 跳过预期位置之外的文件。
- 停止 syspatch(8) 在查找潜在更新时下载整个 tgz 文件。
安全改进:
- 修复 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) 栈变量可能导致的信息泄漏。
网络栈中的新功能:
网络栈中的进一步变更和缺陷修复:
- 停止 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) 有多项更改:
- 允许在 acme-client(1) 配置的备用名称中指定通配符。
- 使 acme-client(1) 在使用后通过 freezero(3) 清除 optarg/eab/eab_key。
- 为 acme-client(1) 外部账户绑定检查 strdup() 错误。
- 在 acme-client(1) 中防止 HTTP 请求注入。
- 让 acme-client(1) 处理 base64url 编码 EAB 密钥中的 '=' 填充。
- 修复 acme-client(1) 中的 timegm(3) 调用。
- 增加对 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) 中:
- 修复 rpki-client(8) 以避免 OpenSSL 4.1 下的缓冲区越界读取。
- 在 rpki-client(8) 中拒绝不符合标准的证书主题编码。
- 使 rpki-client(8) 检查证书 CRLDP 与所引用 Manifest 的对齐。
- 重做 rpki-client(8) cmsparsevalidate()。
- 修复 rpki-client(8) 对叶节点中继承资源的处理。
- 统一 rpki-client(8) 中所有签名对象解析器函数。
- rpki-client(8) 现在无条件警告不正确的 RSA 参数;拒绝一些畸形 ROA。
- 限制添加到 rpki-client(8) 队列的 delta 范围。
- 确保持久 rpki-client(8) HTTP 连接中的状态一致。
- 移除有/无 gbr 支持的 rpki-client(8) 版本之间的行为差异。
- 修复 rpki-client(8) 解析器中可能的退出竞争。
- 使 rpki-client(8) 仅在成功运行时记录 NCA 历史。
- rpki-client(8) 现在仅在成功运行时输出配置文件。
- 根据 rsync 基础 URI 批量重试 rpki-client(8) 中无功能的 CA。
- 对 rpki-client(8) BGPsec Router 证书正确应用约束。
- 去重 rpki-client(8) 的 skiplist、shortlist 和 NCA 重试处理。
- 移除 rpki-client(8) ncahistload() 中的错误 free。
- 在 rpki-client(8) certcasia() 中,在错误消息中使用正确的 notify 字符串。
- 移除 rpki-client(8) 成功路径中的重复 fclose。
- 增加 coinflip 以增大 rpki-client(8) 的周期间抖动。
- 在 rpki-client(8) 中增加对无功能 CA 的退避重试机制。
- rpki-client(8) 现在拒绝具有重复扩展 OID 的证书。
- 在持久 HTTP rpki-client(8) 连接上,在每个响应后清除 lastmodified。
- 在 rpki-client(8) 中,将 CCR manifests 中的下属切换为简单队列。
- 使 rpki-client(8) 通过 rsync 同步时排除隐藏文件和目录。
- 在 rpki-client(8) 中,将某些 ASN.1 字段中的文件名长度限制为 255。
- 修复 rpki-client(8) 中不完整的 strncmp() 检查。
- 修复 rpki-client(8) ipaddrcheckoverlap() 中的 off-by-one。
- 修复 rpki-client(8) 中的 shortlist 和 skiplist 检查。
- 为 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 不应使用它,且它在签名前一直消耗内存。
- 安全性和可靠性修复:
- 测试和主动安全:
- 改进 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/8.0/alpha/INSTALL.alpha
- .../OpenBSD/8.0/amd64/INSTALL.amd64
- .../OpenBSD/8.0/arm64/INSTALL.arm64
- .../OpenBSD/8.0/armv7/INSTALL.armv7
- .../OpenBSD/8.0/hppa/INSTALL.hppa
- .../OpenBSD/8.0/i386/INSTALL.i386
- .../OpenBSD/8.0/landisk/INSTALL.landisk
- .../OpenBSD/8.0/luna88k/INSTALL.luna88k
- .../OpenBSD/8.0/macppc/INSTALL.macppc
- .../OpenBSD/8.0/octeon/INSTALL.octeon
- .../OpenBSD/8.0/powerpc64/INSTALL.powerpc64
- .../OpenBSD/8.0/riscv64/INSTALL.riscv64
- .../OpenBSD/8.0/sparc64/INSTALL.sparc64
熟悉 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 继续作为旅行机和控制台来佐证旧硬件长期可用。