跳转到内容

自动化安装:answer file 与 proxmox-auto-install-assistant ​

装一台机器走一遍安装向导没什么负担,但要重复装十几台、或者动不动就要重建实验环境时,手点几十遍就很烦。Proxmox VE 从 8.2 起提供了无人值守安装:把安装向导里要填的内容写进一个 answer file(TOML 格式),做成自定义 ISO 或让安装器通过网络取回,开机之后不用人管就能装完。

无人值守意味着没有人在中途确认

影响范围:安装器一旦匹配到目标磁盘/网卡,就会直接执行分区和格式化,中途没有任何确认提示。answer file 写错了磁盘过滤条件,轻则装错机器,重则清空一台不该动的服务器。

前置条件:正式批量部署前,必须先用下文的 validate-answer、device-info、device-match 在测试机器或测试虚拟机上核对过滤条件确实只命中你想要的磁盘和网卡。

怎么回退:磁盘一旦被安装器写入就无法回退,只能靠备份恢复或重装。降低风险的办法:先在一台不重要的旧机器或虚拟机上完整跑一次,确认过滤条件和分区结果符合预期,再对生产硬件使用同一份 answer file。

开始之前 ​

  • 一台能装软件的 Debian 或 PVE 机器,用来跑 proxmox-auto-install-assistant(下面简称 assistant)。
  • 已经理解普通安装向导每一屏在问什么,见安装过程逐屏讲解——answer file 本质是把那些问题的答案提前写好。
  • 这个机制在持续演进,8.2 引入后,8.3/8.4/9.0/9.1/9.2 陆续加了 post-install webhook、first-boot 钩子、网卡名固定等选项。写 answer file 前用 proxmox-auto-install-assistant --help 和官方 Wiki 核对你这个版本支持的字段,不要照抄网上找到的、可能是旧版本的示例。

Proxmox Datacenter Manager 也能生成 answer file

PDM 1.1 起提供了图形化的 answer file 编辑向导,如果你不想手写 TOML,可以从那里开始,再用本文的方法校验和打包。

操作步骤 ​

1. 安装 assistant ​

在本地电脑或一台 Debian/PVE 机器上,先按配置软件源加好 PVE 仓库,然后:

sh
apt update
apt install proxmox-auto-install-assistant xorriso

xorriso 是 prepare-iso 重新打包 ISO 时需要的依赖。

2. 写 answer file ​

新建 answer.toml,按你的环境填写。下面是一个 ext4 单盘的例子,每个字段的合法取值以你安装的 assistant 版本的官方文档为准,尤其是 keyboard、country 这类需要精确代码的字段:

toml
[global]
keyboard = "en-us"
country = "cn"
fqdn = "pve1.home.lan"
mailto = "admin@example.com"
timezone = "Asia/Shanghai"
# 用 mkpasswd -m sha-512 生成,不要在 answer file 里明文写密码
root-password-hashed = "<mkpasswd 生成的哈希值>"

[network]
source = "from-answer"
cidr = "192.168.1.10/24"
gateway = "192.168.1.1"
dns = "192.168.1.1"
filter.ID_NET_NAME = "<网卡设备名,用 device-info 查>"

[disk-setup]
filesystem = "ext4"
filter.ID_SERIAL = "<目标磁盘序列号,不要用 /dev/sdX 这种会漂移的名字>"

磁盘和网卡优先用序列号/MAC 过滤,别用设备名

/dev/sda、eth0 这类名字在不同硬件甚至同一台机器重启后都可能变化。filter 支持按 ID_SERIAL、ID_NET_NAME、MAC 地址等 udev 属性匹配,配合通配符(*、?、[abc])能覆盖一批相似但序列号不同的机器。用哪个字段、值该填什么,下一步会验证。

想要 ZFS 镜像系统盘,把 [disk-setup]换成:

toml
[disk-setup]
filesystem = "zfs"
disk-list = ["<磁盘1>", "<磁盘2>"]
zfs.raid = "raid1"

3. 校验语法 ​

sh
proxmox-auto-install-assistant validate-answer answer.toml

成功会提示解析无误;失败会指出具体哪一行有问题。

4. 核对过滤条件命中的设备 ​

在目标机器或同型号的测试机器上(可以用安装器的 debug 模式,或已经装好的 PVE 机器):

sh
proxmox-auto-install-assistant device-info -t disk
proxmox-auto-install-assistant device-info -t network

列出可用的 udev 属性后,用 device-match 确认你的过滤条件只命中预期的设备:

sh
proxmox-auto-install-assistant device-match disk ID_SERIAL='<你的过滤表达式>'

这一步不能跳过——它是发现「过滤条件写宽了,命中了不该动的盘」这种错误的最后机会。

5. 准备安装介质 ​

三选一,把 answer file 交给安装器:

sh
# 方式一:直接塞进 ISO
proxmox-auto-install-assistant prepare-iso proxmox-ve_9.x-x.iso \
  --fetch-from iso --answer-file answer.toml

# 方式二:ISO 通用,用一块标了 PROXMOX-AIS 卷标的独立分区提供 answer file
proxmox-auto-install-assistant prepare-iso proxmox-ve_9.x-x.iso \
  --fetch-from partition

# 方式三:开机后通过 HTTPS 拉取(适合给多台机器共用一个 answer 逻辑)
proxmox-auto-install-assistant prepare-iso proxmox-ve_9.x-x.iso \
  --fetch-from http --url "https://<你的服务器>/get_answer/" \
  --cert-fingerprint "<证书指纹>"

方式二需要额外准备一块分区:格式化为 vfat、打上 PROXMOX-AIS 卷标,再把 answer.toml 复制进去。方式三最适合批量场景,但要注意 --answer-auth-token 之类的鉴权信息会以明文形式留在 ISO 里,服务器一侧务必配 TLS。

按上一步做好的介质(U 盘或虚拟机挂载的 ISO)启动目标机器,会看到 Automated Installation 菜单项,静置约 10 秒后自动开始安装。

检查结果 ​

打包完之后,先自检生成的 ISO 是否符合预期,再拿去装机器:

sh
proxmox-auto-install-assistant inspect-iso /path/to/prepared.iso

它会显示这份 ISO 使用的产品、取值方式(iso/partition/http)和内嵌的 answer file 内容(默认隐藏敏感字段,加 --show-sensitive 才会显示)。

装完目标机器后,按普通安装的检查方法验证:登录 https://<IP>:8006、执行 pveversion -v、确认主机名和网络与 answer file 里写的一致。

常见问题 ​

disk-list 和 filter 可以一起用吗? 不行,[disk-setup] 里两者互斥,只能选一种方式选盘。

装到一半失败进了 shell。 先查看 /tmp/fetch_answer.log(取 answer file 阶段的日志)和 /tmp/auto_installer(安装阶段的日志),多数是网络取不到 answer file,或者过滤条件在这台硬件上没有命中任何设备。

想让装完出错时自动重启而不是停在 shell。 在 [global] 里设置 reboot-on-error = true,但这样会看不到出错时的现场,调试阶段建议先保持默认(false)。

参考资料 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。