无人值守安装
本文译自 The Omarchy Manual — Unattended Installs,同步自 basecamp/omarchy@ed7bae4。术语以 TERMS.md 为准。
Omarchy ISO 可以在无人碰键盘的情况下自行安装。只要安装器发现第二块标记为 cidata 的硬盘并带有配置文件,就会把它们拷走、完全跳过安装向导,然后自行重启进入装好的系统。无需特制 ISO,无需额外的引导菜单项——不挂这种盘时,一切照旧,还是正常的向导。
这让 Omarchy 成了一次性开发环境的绝佳基础镜像:用 Proxmox 或 Packer 创建虚拟机、启动、走人、SSH 进来。cidata 是 cloud-init 的 NoCloud 标签,所有常见虚拟化工具都已经知道怎么挂这种盘。
配置文件
这些文件与安装器向导自己写的一模一样。最省事的起步方式是先跑一次交互式安装(比如在 VM 里),把它写到 /root 的东西复制出来:
| 文件 | 必需 | 用途 |
|---|---|---|
user_configuration.json |
是 | 磁盘、主机名、时区、键盘 |
user_credentials.json |
是 | 用户名和密码哈希 |
user_full_name.txt |
否 | Git 全名 |
user_email_address.txt |
否 | Git 邮箱 |
user_encrypt_installation.txt |
否 | 配置含 disk_encryption 块时为 true |
authorized_keys |
否 | SSH 公钥,每行一条 |
tailscale_authkey |
No | 首次开机加入 tailnet 用的 Tailscale auth key |
user_credentials.json 的密码哈希用 openssl passwd -6 "yourpassword" 生成。
也可以放一个名为 defer-provisioning 的空文件替代 user_credentials.json。这会触发与交互模式相同的替另一位主人准备机器的安装:机器不带任何个人信息完成安装,第一个开它的人自选键盘并创建自己的用户。这就是装机工位的模式——盘上根本不该带任何人的凭证。
SSH 访问
存在 authorized_keys 时,安装会把这些密钥设为用户的 ~/.ssh/authorized_keys、启用 sshd 并为其打开防火墙。(原版 Omarchy 出厂 openssh 服务禁用、端口关闭,否则无人值守的机器根本连不上。)安装只添加你的密钥——不会放宽 SSH 守护进程的其他认证设置。
存在 tailscale_authkey 时,机器改为在首启加入你的 tailnet:Tailscale 从 ISO 内置包安装、防火墙放行 tailnet 接口,后台任务一检测到真实网络就执行加入并不断重试直至成功。使用可复用的预授权密钥,让一块盘镜像能服务多台机器。
制作 cidata 盘
任何带正确卷标的文件系统都行。做个小 ISO 最简单:
mkdir cidata
cp user_configuration.json user_credentials.json authorized_keys cidata/
genisoimage -output cidata.iso -volid cidata -joliet -rock cidata/
然后把它与 Omarchy ISO 一起挂到 VM 上。完整的 Proxmox 示例:
qm create 101 --name my-omarchy \
--bios ovmf --machine q35 --cpu host --cores 4 --memory 8192 \
--ostype l26 --scsihw virtio-scsi-single \
--efidisk0 local-lvm:0,efitype=4m,pre-enrolled-keys=0 \
--scsi0 local-lvm:40,discard=on,iothread=1 \
--net0 virtio,bridge=vmbr0 --vga virtio --serial0 socket \
--ide2 local:iso/omarchy.iso,media=cdrom \
--ide3 local:iso/cidata.iso,media=cdrom \
--boot order='scsi0;ide2'
qm start 101
启动顺序特意把磁盘排在前面:空盘第一次启动会落到 ISO 上,装好后的系统从此一直从磁盘启动。
两个注意事项
加密的无人值守安装并非完全无人值守——首启时仍需有人输入 LUKS 密码。而且 user_configuration.json 的 disk_encryption 块以明文携带该密码,所以对待由加密安装构建的 cidata 盘要像对待机密一样。