在 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 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 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
qm set 106 --cipassword "132132"
|
启动
首次启动可能要 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