PVE定制debian系统及创建模板

在 PVE 上面安装 Debian 系统,每次都要做一下那个 DVD 引导安装很麻烦,这几天冲浪,看到一篇文章发现一个简简单的方法。

https://blog.skk.moe/post/proxmox-ve-customize-debian-cloud-image

详细的介绍看原文吧,我直接说我的过程

开始

创建工作目录:

1
2
mkdir -p /root/debian-cloud-build
cd /root/debian-cloud-build

安装构建工具

1
2
apt update
apt install -y libguestfs-tools axel qemu-utils

axel是多线程下载工具,不想安装或者没有 axel 时用 wget 亦可(见下一步)。

下载官方 Debian 13 genericcloud 镜像

1
2
3
4
cd /root/debian-cloud-build

axel -n 8 -o debian-13.qcow2 \
https://cdimage.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2

备选 wget:

1
2
wget -O debian-13.qcow2 \
https://cdimage.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2

确认:

1
ls -lh debian-13.qcow2

定制镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cd /root/debian-cloud-build

virt-customize -a debian-13.qcow2 \
--smp 2 \
--timezone Asia/Hong_Kong \
--append-line "/etc/default/grub:# disables OS prober to avoid loopback detection which breaks booting" \
--append-line "/etc/default/grub:GRUB_DISABLE_OS_PROBER=true" \
--run-command "update-grub" \
--run-command "systemctl enable [email protected]" \
--run-command "sed -i 's|Types: deb deb-src|Types: deb|g' /etc/apt/sources.list.d/debian.sources" \
--run-command "sed -i 's|generate_mirrorlists: true|generate_mirrorlists: false|g' /etc/cloud/cloud.cfg.d/01_debian_cloud.cfg" \
--append-line "/etc/ssh/sshd_config.d/99-internal-password.conf:PermitRootLogin yes" \
--append-line "/etc/ssh/sshd_config.d/99-internal-password.conf:PasswordAuthentication yes" \
--append-line "/etc/ssh/sshd_config.d/99-internal-password.conf:KbdInteractiveAuthentication yes" \
--append-line "/etc/cloud/cloud.cfg.d/99-ssh-pwauth.cfg:ssh_pwauth: true" \
--append-line "/etc/cloud/cloud.cfg.d/99-ssh-pwauth.cfg:disable_root: false" \
--update \
--install "sudo,qemu-guest-agent,spice-vdagent,bash-completion,unzip,wget,curl,net-tools,iputils-ping,nano,less,vim,mtr-tiny,htop,dnsutils,zstd" \
--run-command "apt-get -y autoremove --purge && apt-get -y clean" \
--append-line "/etc/systemd/timesyncd.conf:NTP=time.apple.com time.windows.com" \
--delete "/var/log/*.log" \
--delete "/var/lib/apt/lists/*" \
--delete "/var/cache/apt/*" \
--truncate "/etc/machine-id"

这几段做的

部分 作用
GRUB OS_PROBER 避免虚拟机里探测其它系统导致启动异常
serial-getty@ttyS1 额外串口登录(PVE 仍需 --serial0 提供 ttyS0)
去 deb-src / 关 mirrorlist 自动覆盖 源配置更可控
99-internal-password.conf sshd:允许 root + 密码 + 键盘交互
99-ssh-pwauth.cfg cloud-init:别在首启再关掉密码认证、不禁用 root
--update + --install 升级并装常用工具 / qemu-guest-agent
清理 + machine-id 模板克隆更干净

压缩镜像

1
2
3
4
cd /root/debian-cloud-build

virt-sparsify --compress debian-13.qcow2 debian-13-custom.qcow2
ls -lh debian-13.qcow2 debian-13-custom.qcow2

最终产物:

1
/root/debian-cloud-build/debian-13-custom.qcow2

确认 custom 生成成功后,可删中间文件省空间:

1
rm -f /root/debian-cloud-build/debian-13.qcow2

导入 PVE 并制成模板(存储 = local)

创建空白 VM(之后转换成模板)

1
2
3
4
5
6
7
8
9
10
11
12
13
qm create 9000 \
--name debian-13-cloud-template \
--machine q35 \
--cpu cputype=host \
--ostype l26 \
--memory 1024 \
--cores 1 \
--scsihw virtio-scsi-single \
--net0 virtio,bridge=vmbr0 \
--serial0 socket \
--vga none \
--agent 1 \
--scsi2 local:cloudinit

导入磁盘并挂载(local 版)

1
2
3
qm importdisk 9000 "/root/debian-cloud-build/debian-13-custom.qcow2" local -format qcow2
qm set 9000 --scsi0 local:9000/vm-9000-disk-0.qcow2,discard=on,ssd=1
qm set 9000 --boot order=scsi0

设置 DHCP

1
qm set 9000 --ipconfig0 ip=dhcp

转为模板

1
qm template 9000

从模板克隆并首次启动

克隆

1
2
3
4
5
qm clone 9000 106 \
--name "Debian-13-vm" \
--full 1 \
--storage local \
--format qcow2

硬盘扩容,原3GB,后续不够用了应该也可以这样扩容(还没试过)

1
qm resize 106 scsi0 +17G

启动前配置 Cloud-Init

1
2
3
4
5
#设置用户
qm set 106 --ciuser root

#设置root密码
qm set 106 --cipassword "132132"

启动

1
qm start 106

首次启动可能要 2–5 分钟(cloud-init,镜像若带 package_upgrade 会更久)。

网页 Console 可能长时间只有:

1
starting serial terminal on interface serial0

这是正常现象,等等就好了。有几分钟就点进黑屏按几次 Enter。


参考文章

https://blog.skk.moe/post/proxmox-ve-customize-debian-cloud-image

https://zhuanlan.zhihu.com/p/1962816613435806021

https://github.com/xixi-zhao/debian-cloud-build