跳转至

无人值守安装

本文译自 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.jsondisk_encryption 块以明文携带该密码,所以对待由加密安装构建的 cidata 盘要像对待机密一样。