配置¶
配置文件¶
配置文件是可选的,存在时默认从 /etc/qm-template/config.toml 加载;可通过
--config PATH/-c 或 QM_TEMPLATE_CONFIG 指定其他位置。没有配置文件时所有命令
都能正常工作。配置由 pydantic-settings 校验,未知的键和非法值会在报错中给出文件
与键路径。所有设置都可以用 QM_TEMPLATE_* 环境变量覆盖,嵌套层级用 __ 分隔,
例如 QM_TEMPLATE_DOWNLOAD__CONNECTIONS=4;优先级为内置默认值 < 配置文件 <
环境变量 < 命令行选项。
下载的镜像默认存储在 /var/lib/qm-template,可由 paths.images_dir 覆盖,并按
上游目录结构存放:
<images_dir>/<distro>/<release>/[<tag>/]<filename>
设置¶
download.preferred 指定下载器优先级,download.connections 设置 axel 和
aria2c 的并行连接数。默认显示下载进度,可用 download.quiet = true 或
-q/--quiet 关闭。签名校验默认开启,会用 gpg 校验已签名的校验和或镜像;
没有安装 gnupg 等情况下可设 download.verify_signature = false 跳过。
prepare.preferred 指定 ISO 打包工具优先级,默认为 genisoimage、xorriso、
mkisofs。
cloudinit.user 是 Cloud-Init 的登录用户名;为空时使用发行版惯用名(Debian 为
debian、FreeBSD 为 freebsd、Amazon Linux 为 ec2-user 等),镜像不在已知
发行版目录下时回退为 admin。cloudinit.password 可选:为空表示不启用密码登录,
此时需要配置 SSH 公钥。cloudinit.sshkeys 以内联列表提供注入的 SSH 公钥,
cloudinit.sshkeys_files 指向公钥文件列表,两者的内容会按 SSH 指纹合并去重;
create 和 prepare 都要求至少配置一个公钥或密码。密码在 --dry-run 输出和
debug 日志中都会被打码。cloudinit.shell 设置本地 seed ISO(prepare)创建用户
的登录 shell;设为 "" 则保留镜像默认 shell,Alpine Linux 可设为 /bin/ash。
Cloud-Init 本身支持在 user-data 中配置多个用户,但 Proxmox VE 托管的
Cloud-Init 只暴露单个 ciuser/cipassword(多用户需要自定义 cicustom
snippets),因此 [cloudinit] 有意只描述一个用户。
create.storage 是导入磁盘和 Cloud-Init 驱动器使用的 Proxmox 存储。
create.cpu 设置传给 qm 的 CPU 类型(cputype=...,默认 host,性能最好但
无法跨 CPU 代际迁移)。create.firmware(auto、bios 或 uefi)选择固件;
auto 会对文件名包含 uefi 的镜像(例如 Fedora 的 UEFI-UKI 变体)使用
UEFI,其余使用 BIOS。UEFI 模板通过 --bios ovmf 和一块 EFI 磁盘创建
(--efidisk0 <storage>:1,pre-enrolled-keys=0,即不启用 Secure Boot)。
create.tags、create.pool、create.onboot 和 create.description 为模板添加
可选的 Proxmox 元数据。vmid.start 和 vmid.step(默认 9000 和 1)控制
VM ID 的自动选择。任何命令都可以加 -v(输出 debug 日志)或 -vv(额外输出
日志级别和时间戳)用于排查问题。
远程 Proxmox VE 主机¶
远程主机可选,位于 [pve.<name>] 下,供 create --pve <name> 使用。必填
host、user、token_name、token_secret,上传镜像还需要 import_storage;
多节点集群必须设置 node,verify_ssl、port、timeout、task_timeout
均有默认值。嵌套的 [pve.<name>.create]、[pve.<name>.vmid] 和
[pve.<name>.cloudinit] 只覆盖该主机的全局配置。可用
QM_TEMPLATE_PVE__<NAME>__TOKEN_SECRET 避免把 token secret 写进文件,并确保
配置文件仅所有者可读:
[pve.home]
host = "pve.home.arpa"
user = "qm-template@pve"
token_name = "automation"
token_secret = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
import_storage = "local"
[pve.home.vmid]
start = 9000
远程模式对 Proxmox VE 侧的要求见创建虚拟机模板。
按发行版覆盖¶
按发行版覆盖参数是可选的,位于 [distro.<name>] 下;这些覆盖不会出现在
qm-template config 打印的默认配置中,只在某个发行版需要偏离内置默认值时才添加:
[distro.debian]
release = "bookworm-backports"
arch = "arm64"
base_url = "https://mirror.example.org/debian-cloud"
qm-template distros 列出的每个参数都会按发行版校验,并且在 download 中有对应的
命令行选项(例如 --release、--variant、--fs、--firmware);给某个发行版传入
它没有声明的参数会报错。唯一的例外是 base_url,它只能通过配置文件设置。
base_url 用于把某个发行版指向上游或镜像站,镜像站必须保持上游的目录结构;校验和
文件及其签名也从同一个 base 获取。Ubuntu、Fedora、Rocky、AlmaLinux、openSUSE、
Alpine 和 Arch Linux 对元数据签名,校验和在被信任之前会先用 gpg 验证;签名公钥
只从发行版的官方来源获取(绝不从镜像站获取),上游提供稳定公钥时会校验固定的指纹。
Debian、CentOS Stream 和 FreeBSD 不对 cloud image 元数据签名,Amazon Linux 的
RSA 签名也尚未校验;对这些发行版,镜像站同时提供镜像和校验和,对真实性有要求时请
使用可信镜像,或用带外方式自行校验。
生成配置文件¶
qm-template config 会把带注释的默认配置打印到 stdout,重定向即可生成起始配置;
--full 还会追加各发行版的默认参数表。工具不会自动写配置文件:
install -d /etc/qm-template
qm-template config > /etc/qm-template/config.toml
# 显式固定每个发行版的参数
qm-template config --full > /etc/qm-template/config.toml
仓库中的 config.example.toml 是指向打包进 wheel 的同一文件的符号链接。