Proxmox VE Cloud-Init 系统镜像自动制作

注意:这不是什么新颖高端的技术。您可以随意修改并二次发布我们的代码。
我们乐于分享自己的解决方案,如果您有需求,可以随时联系我们

目前脚本可制作的镜像有

  • rockylinux8
  • debian12-bookworm
  • almalinux9
  • rockylinux9
  • debian11-bullseye
  • almalinux8
  • ubuntu2204-jammy

镜像将从官方或者镜像源中下载,然后创建虚拟机。

使用方法

此脚本有以下几个参数。

storage: 存储池名称

vmbr: 虚拟机网桥名称

可选:user: Cloud init 用户名

可选:password: Cloud init 密码

可选:image: 要制作的特定的镜像

举例

下载并创建全部镜像到 local-lvm 中,网桥为 vmbr0,默认用户名 root,密码 123456。

curl -s https://ivampiresp.com/files/pve/image.sh | bash -s local-lvm vmbr0 root 123456

下载 2000,ubuntu2204-jammy 镜像,存储是 local-lvm, 网桥为 vmbr1,默认用户名 root,密码 123456。

curl -s https://ivampiresp.com/files/pve/image.sh | bash -s local-lvm vmbr1 root 123456 2000,ubuntu2204-jammy

更新镜像

重新执行脚本即可,此脚本会删除原来的虚拟机模板,然后重新执行 wget 并创建虚拟机模板。

添加镜像

仓库地址: https://github.com/iVampireSP/proxmox-ve-template-maker/

编辑 image.sh,在最上面的 os_images 变量中添加镜像即可。

格式为 vmid,os_name。

比如 2000,ubuntu2204-jammy,其中 2000 是虚拟机模板的 vmidubuntu2204-jammy 是镜像名称。

创建后的虚拟机模板名字是 Template-ubuntu2204-jammy

注意

如果检测到相同的 vmid,脚本会删除原 vmid 的机子,然后重新创建,在请慎重使用。

部分镜像 ssh 密码登录可能是关闭的,这意味着可能无法直接通过 ssh 密码登录。

原理

在下载镜像后,会根据预先设置的虚拟机名称,判断虚拟机是否存在。

# 检查是否存在同名的虚拟机,如果存在则删除
local template_name="Template-$os"
qm stop "$vmid"
qm destroy "$vmid" --destroy-unreferenced-disks=1  --purge=1

随后,创建虚拟机

创建虚拟机并转换为模板

qm create "$vmid" --name "$template_name" --memory 1024 --net0 virtio,bridge=$vmbr
# 导入磁盘
qm disk import "$vmid" "$image_file" "$storage"

# 设置参数
qm set "$vmid" --ostype l26 --ciuser="$user" --cipassword="$password" --virtio0 "$storage:vm-$vmid-disk-0" --boot c --bootdisk virtio0 --ide2 "$storage:cloudinit" --scsihw virtio-scsi-pci --serial0 socket --vga serial0

# 转换为模板
qm template "$vmid"

至此,镜像制作完成。

整个脚本运作原理非常简单。