26.2 安装 OpenBSD
下载镜像
以 OpenBSD 7.7、AMD64 架构为例,请访问 https://cdn.openbsd.org/pub/OpenBSD/7.7/amd64 获取系统镜像。
若是刻录 U 盘安装,请下载 install77.img(同时支持 UEFI 和 BIOS);若是用于虚拟机体验,请下载 install77.iso。
ISO 镜像同样支持 UEFI 和 BIOS 启动。
警告
截至 OpenBSD 7.7,请勿使用 Ventoy 1.1.05 引导实体机安装,否则会卡在文件集选择阶段。
安装过程(UEFI)
技巧
OpenBSD 安装程序实际上调用的是位于 distrib/miniroot/install.sub 的脚本。该安装脚本高度耦合,截至写作时,有三千两百余行。
使用 install77.iso,并开启 VMware 虚拟机的 UEFI 功能。
Welcome to the OpenBSD/amd64 7.7 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell?
i
输入 i,按 回车键,开始安装。
Choose your keyboard layout ('?', or 'L' for list) [default]?
选择键盘布局,按 回车键,选择默认的美国键盘即可。
System hostname? (short form, e.g. 'foo')
ykla
系统主机名可以选择较短的名称,将来主机名会显示为 ykla 这样的形式。
Available network interfaces are: em0 vlan0.
Network interface to configure? (name, lladdr, '?' , or 'done ' [em0] # 此处按 回车键
IPv4 address for em0? (or 'autoconf' or 'none')[autoconf] # 此处按 回车键 自动 DHCP IPv4
IPv6 address for em0? (or 'autoconf' or 'none')[none] # 此处按 回车键 不需要 IPv6
Available network interfaces are: em0 vlan0.
Network interface to configure? (name, lladdr, '?' , or 'done ' [done] # 此处按 回车键,若设定错误,可输入 [em0] 退回到上面几步。
此步骤用于选择网络连接。为避免不必要的麻烦,请尽量选择有线网络。可先输入 ?,详细了解网络名称后再选择。如本例中 em0 为有线网络,vlan0 是虚拟 VLAN 接口。
后续配置均可直接按 回车键 确认。
Password for root account? (will not echo)
设置 root 账号密码,输入后回车确认(密码不会显示在屏幕上)。
Password for root account? (again)
再次输入一遍 root 账号密码,按 回车键 确认。
Start sshd(8) by default? [yes]
按 回车键 确认,启用 SSH 服务。
Do you want the X Windows System to be started by xenodm(1)? [no]
yes# 输入yes,按 回车键 确认
启用 xenodm 以运行 X Window System。
Setup a user? (enter a lower-case loginname, or 'no') [no]
ykla# 输入你要的用户名,按 回车键 确认
设置普通用户的用户名。
Full user name for ykla?
用户全名,可随意输入或者按 回车键 默认。
Password for ykla account? (will not echo)
为该账号设置密码(密码不会显示在屏幕上)。按 回车键 确认。
Password for ykla account? (again)
再次输入该用户名的密码。按 回车键 确认。
Allow root ssh login?(yes, no, prohibit-password)[no]
yes
输入 yes 按 回车键 确认,以允许 root 登录 ssh。
What timezone are you in? ('?' for list) [GB]
Asia
输入 Asia(亚洲),按 回车键 确认。
What sub-timezone of 'Asia' are you in? ('?' for list)
Shanghai
输入 Shanghai(注意 S 为大写字母),按 回车键 确认。
Available disks are: sd0.
Encrypt the root disk? (disk, 'no' or '?' for details) [no]
按 回车键,不加密磁盘。
Available disks are: sd0
Which one is the root disk? (or 'done') [sd0]
?
输入 ? 可查看硬盘:
这一步是选择要将系统安装在哪一块硬盘。按 ? 列出识别的所有硬盘。请务必记住所有的盘符。然后输入需要安装的位置,如我们这里选择 sd0。输入 sd0 回车。
Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [gpt]
回车。
Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a]
这里我们直接回车,选择系统默认分区。
警告
由于默认情况下,自动分区的存储空间分配极其不够合理,使用该方式时很可能无法安装桌面环境。
技巧
文末附有自定义分区设置,供参考。
Available disks are: sd0. Which disk do you wish to initialize? (or 'done') [done] 直接回车。
Let's install the sets!
Location of sets? (cd0 disk ftp http or 'done') [cd0] 直接回车。
此处为指定软件源地址,选择 cd0,即使用安装介质作为软件源。
Pathname to the sets? (or 'done')[7.7/amd64] 直接回车。
此处可输入 -game* 以取消选择 game77.tgz,其余保持选中状态;也可以直接按 回车键。
警告
即使不使用桌面环境,也建议勾选
xserv77.tgz,否则部分软件可能无法正常运行。
继续回车确认。此后开始安装系统。约 5 分钟后,系统会显示如下提示:
Location of sets? (cd0 disk http nfs or 'done')[done]
Time appears wrong. Set to 'Mon Dec 16 22:43:37CST 2824' ? [yes]
警告
如果不希望在
fw_update阶段卡住,请在按 回车键 前拔掉网线,断开网络连接。
系统已成功安装,重启后即可进入新系统。
警告
如果读者不希望遇到报错
ssh(fail): no hostkeys available, invalid format,请在重启前恢复网络连接。
附录:自定义分区
OpenBSD 自动分区的源代码分析
OpenBSD 默认的自动分区实际调用的是 sbin/disklabel/editor.c 文件中的相关函数。
根据 sbin/disklabel/extern.h 头文件中的宏:
我们再看结构体 struct space_allocation:
若磁盘总大小满足,先依次按最小大小为所有指定分区进行初次分配,则在初次分配中,先将 / 分区指定 150MB,然后按照权重 5% 对剩余磁盘空间进行二次分配,二次分配后的 / 不会超过最大大小限制 1GB。即无论磁盘多大,/ 大小的硬限制始终为 1GB,上述代码最早可追溯到 2009 年。
注意到,最后超过最大权重限制的分区都会被授予以下分区:
若磁盘总大小大于等于 2.38 GB(含):
/home若磁盘总大小介于 700M(含)到 2.38 GB 之间(不含):swap
思考题
在实际使用中,
/分区很快就会被填满,而/home几乎完全为空。并且原生的文件系统不支持磁盘的再分配,如缩减分区,调整顺序。你认为这种设计的根本缺陷在哪?请读者尝试改正并提交自己的 PR 到 OpenBSD。
实际执行计算的是同 sbin/disklabel/editor.c 文件内的函数 allocate_space(),其中 if (xtrablks < sa[i].minsz) 表明先验证磁盘总大小是否满足初次分配的最小要求。从结构体 alloc_big[]、alloc_medium[]、alloc_small[] 最后到 alloc_stupid[] 依次降级计算。
函数 allocate_partition() 则执行实际写入。
思考题
请读者分析在 UEFI 下,OpenBSD 自动生成的
EFI分区在哪个位置?
自动安装的分区如下:
以人类可读格式显示 sd0 磁盘的磁盘标签信息:
400G 硬盘自动分区如下:
执行手动分区
在系统分区阶段,选择 C(Custom),即“自定义设置”。
p m(注意之间的空格)
输入 p m 来显示硬盘。其它选项如下表:
p m
查看分区大小
A
自动分区
a
增加分区
d
删除分区
z
删除全部分区
q
确认分区
假设磁盘容量为 80GB,可规划分区为:EFI 260MB、/ 75G、其余空间分配给 swap。顺序不可动,否则无法启动!必须先分一个 /,再分 swap。基本思路:自动分区——> 删去 i 分区以外的分区——> 分 /——> 分 swap
使用
d删除现有的分区,但会保留i分区这个 EFI 分区(OpenBSD 7.5 及以上,7.5 以下请逐个删除除 MSDOS 以外的所有分区)即:
apartition: [a]
offset: [532544]
size: [167239583] 75G
FS type: [4.2BSD]
mount point: [none]
/
这里设置了 75GB 的 / 分区。
apartition: [b]
offset: [157822560]
size: [9949567]
FS type: [swap]
需要注意的是,在 size 一栏中未输入具体数值而直接按 回车键,表示将上一步剩余的全部容量分配给该分区,即 swap 分区。
配置完毕,记得输入 q 确认。
qWrite new label?: [y]
至此,分区配置完成。
从 release 升级到 stable 或 current
OpenBSD 不建议 从 release 升级到 current,建议直接使用 快照版本(即预构建的 current)。
经过测试如果直接从 release 升级到 current 会卡在这里:
current:
7.3 -stable
参考文献
最后更新于