在 Proxmox VE 上创建 Rocky/Alma/CentOS 模板
在 Proxmox VE 中,VM 模板是预先配置的操作系统映像,供在旋转新虚拟机时使用。它包含操作系统的完整安装以及运行操作系统所需的其他附加软件包和设置。 Proxmox VE 支持并允许用户为大多数 Linux 发行版和 Windows 桌面/服务器版本创建自定义操作系统模板。
使用操作系统模板的主要目的是简化创建新虚拟机的过程。模板提供了一种标准化且更快速的操作系统部署方式,无需使用冗长乏味的 ISO 映像。使用模板创建新虚拟机就像选择操作系统模板、自定义硬件设置、分配资源以及在几秒钟内启动虚拟机一样简单。
在我们之前的文章中,我们讨论了 Debian 和 Ubuntu 模板的创建。该文章可在以下链接中找到:
- 在 Proxmox VE 上创建 Ubuntu 和 Debian 操作系统模板
在 Proxmox VE 上创建 Rocky/AlmaLinux/CentOS 操作系统模板
在本文结束时,您将使用包含您的应用程序特定依赖项的定制配置创建 Rocky/AlmaLinux 或 CentOS 操作系统模板。我们将致力于以下操作系统:
- 洛基 Linux 9/洛基 Linux 8
- AlmaLinux 9/AlmaLinux 8
- CentOS Stream 9/CentOS Stream 8
让我们深入了解一下!
1. 下载云基础镜像
我们需要大多数 Linux 发行版提供的基础云镜像。使用以下变量:
- imageURL:云图像链接
- IMAGE:下载并存储在系统本地的云镜像的名称
- TID:要创建的模板的ID。
- TNAME:分配给正在创建的模板的名称。
- CUSER:我们将使用 Cloud-init 自定义设置,例如操作系统用户、密码和网络配置。这是要使用的默认操作系统名称。
以下是示例。
Rocky Linux 8 云镜像:
imageURL=https://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-GenericCloud.latest.x86_64.qcow2
wget $imageURL
IMAGE=Rocky-8-GenericCloud.latest.x86_64.qcow2
TID=700
TNAME=Rocky-8-Template
CUSER=rocky
Rocky Linux 9 云镜像:
imageURL=https://dl.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud.latest.x86_64.qcow2
wget $imageURL
IMAGE=Rocky-9-GenericCloud.latest.x86_64.qcow2
TID=701
TNAME=Rocky-9-Template
CUSER=rocky
AlmaLinux 8云镜像:
imageURL=https://repo.almalinux.org/almalinux/8/cloud/x86_64/images/AlmaLinux-8-GenericCloud-latest.x86_64.qcow2
wget $imageURL
IMAGE=AlmaLinux-8-GenericCloud-latest.x86_64.qcow2
TID=702
TNAME=AlmaLinux-8-Template
CUSER=alma
AlmaLinux 9云镜像:
imageURL=https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-latest.x86_64.qcow2
wget $imageURL
IMAGE=AlmaLinux-9-GenericCloud-latest.x86_64.qcow2
TID=703
TNAME=AlmaLinux-9-Template
CUSER=alma
CentOS 8 Stream云镜像
imageURL=https://cloud.centos.org/centos/8-stream/x86_64/images/CentOS-Stream-GenericCloud-8-latest.x86_64.qcow2
wget $imageURL
IMAGE=CentOS-Stream-GenericCloud-8-latest.x86_64.qcow2
TID=704
TNAME=CentOS-8-Stream-Template
CUSER=centos
CentOS 9 Stream云镜像
imageURL=https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2
wget $imageURL
IMAGE=CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2
TID=705
TNAME=CentOS-9-Stream-Template
CUSER=centos
2.定义模板变量
这里我们定义创建模板所需的以下变量:
SIZE=50G #Default root disk size
BRIDGE=vmbr1 #Default network bridge name
RAM=2048 #Default VM Ram size
CORES=1 #Default CPU cores
STORAGE=local-zfs #Storage pool name to use, check with pvesm status
CPASS="Str0nGUserPasswr=ord" #CloudInit User password to be injected
要查看可用的网桥,请使用:
# brctl show
bridge name bridge id STP enabled interfaces
vmbr0 8000.5ced8cedb886 no eno1
vmbr1 8000.5ced8cedb889 no eno4
如果您需要有关在 PVE 上创建 Linux 网桥的指导,请查看:使用 NAT 在 Proxmox VE 上创建专用网桥
可以使用以下命令列出可用的存储池:
# pvesm status
Name Type Status Total Used Available %
local dir active 1884995968 10524288 1874471680 0.56%
local-zfs zfspool active 1875328912 857128 1874471784 0.05%
3.使用virt-customize
自定义镜像
virt-customize
命令由 libguestfs-tools 软件包提供。让我们安装它。
sudo apt update && sudo apt install libguestfs-tools
安装后我们可以确认 virt-customize 是否正常工作。
# virt-customize --version
virt-customize 1.48.2
使用virt-customize在基础云镜像中安装基本密钥包。
# virt-customize -a $IMAGE --install vim,bash-completion,wget,curl,unzip,qemu-guest-agent
[ 0.0] Examining the guest ...
[ 8.2] Setting a random seed
[ 8.3] Setting the machine ID in /etc/machine-id
[ 8.3] Installing packages: vim bash-completion wget curl unzip qemu-guest-agent
[ 163.2] Finishing off
接下来我们启用 qemu-guest-agent 服务以在系统启动时启动。
# virt-customize -a $IMAGE --run-command 'systemctl enable qemu-guest-agent'
[ 0.0] Examining the guest ...
[ 7.6] Setting a random seed
[ 7.6] Running: systemctl enable qemu-guest-agent
[ 8.2] Finishing off
您还可以设置默认时区
# virt-customize -a $IMAGE --timezone "Africa/Nairobi"
[ 0.0] Examining the guest ...
[ 7.5] Setting a random seed
[ 7.6] Setting the timezone: Africa/Nairobi
[ 8.0] Finishing off
可以启用 SSH 密码验证。不过不建议这样做。如果您不使用 SSH 密钥,则这是必要的。
# virt-customize -a $IMAGE --run-command 'sed -i "s/.*PasswordAuthentication.*/PasswordAuthentication yes/g" /etc/ssh/sshd_config'
[ 0.0] Examining the guest ...
[ 7.4] Setting a random seed
[ 7.5] Running: sed -i "s/.*PasswordAuthentication.*/PasswordAuthentication yes/g" /etc/ssh/sshd_config
[ 8.1] Finishing off
禁用 root 用户的 SSL 登录。
# virt-customize -a $IMAGE --run-command 'sed -i "s/.*PermitRootLogin.*/PermitRootLogin no/g" /etc/ssh/sshd_config'
[ 0.0] Examining the guest ...
[ 7.2] Setting a random seed
[ 7.3] Running: sed -i "s/.*PermitRootLogin.*/PermitRootLogin no/g" /etc/ssh/sshd_config
[ 7.7] Finishing off
重新标记 SELinux
# virt-customize -a $IMAGE --selinux-relabel
[ 0.0] Examining the guest ...
[ 7.4] Setting a random seed
[ 7.4] SELinux relabelling
[ 7.9] Finishing off
要完全禁用 SELinux,请运行:
# virt-customize -a $IMAGE --run-command ' sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config'
[ 0.0] Examining the guest ...
[ 4.7] Setting a random seed
guest
[ 4.8] Running: sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
[ 4.9] Finishing off
4. 在Proxmox VE上创建操作系统模板
将基础映像的大小调整为之前 SIZE 变量中定义的所需操作系统 /
磁盘大小。
# qemu-img resize $IMAGE $SIZE
Image resized.
现在创建带有内存、CPU 和网桥的操作系统模板骨架。
qm create $TID --memory $RAM --cores $CORES --net0 virtio,bridge=$BRIDGE --scsihw virtio-scsi-pci --kvm 1 --numa 1
将我们自定义的基础镜像导入到实际的虚拟机存储磁盘中。
# qm importdisk $TID $IMAGE $STORAGE
importing disk 'Rocky-8-GenericCloud.latest.x86_64.qcow2' to VM 700 ...
transferred 0.0 B of 50.0 GiB (0.00%)
transferred 542.7 MiB of 50.0 GiB (1.06%)
transferred 1.0 GiB of 50.0 GiB (2.07%)
transferred 1.5 GiB of 50.0 GiB (3.09%)
transferred 2.0 GiB of 50.0 GiB (4.09%)
transferred 2.5 GiB of 50.0 GiB (5.10%)
transferred 3.1 GiB of 50.0 GiB (6.12%)
transferred 3.6 GiB of 50.0 GiB (7.12%)
transferred 4.1 GiB of 50.0 GiB (8.16%)
transferred 4.6 GiB of 50.0 GiB (9.19%)
...
transferred 49.4 GiB of 50.0 GiB (98.80%)
transferred 49.9 GiB of 50.0 GiB (99.80%)
transferred 50.0 GiB of 50.0 GiB (100.00%)
transferred 50.0 GiB of 50.0 GiB (100.00%)
Successfully imported disk as 'unused0:local-zfs:vm-700-disk-0'
将磁盘附加到 VM。导入后不附加。
qm set $TID --scsihw virtio-scsi-pci --virtio0 $STORAGE:$TID/vm-$TID-disk-0.raw
如果使用LVM或ZFS池,则使用:
# qm set $TID --scsihw virtio-scsi-pci --virtio0 $STORAGE:vm-$TID-disk-0
update VM 700: -scsihw virtio-scsi-pci -virtio0 local-zfs:vm-700-disk-0
为虚拟机启用串行控制台。
# qm set $TID --serial0 socket --vga serial0
update VM 700: -serial0 socket -vga serial0
启用 QEMU 访客代理。
# qm set $TID --agent 1
update VM 700: -agent 1
更改启动顺序以使用 SCSI 或 VirtIO 块设备启动。
# qm set $TID --boot c --bootdisk virtio0
update VM 700: -boot c -bootdisk virtio0
5.附加云初始化镜像并创建模板
接下来,我们通过运行以下命令来附加云初始化映像。
# qm set $TID --ide2 $STORAGE:cloudinit
update VM 700: -ide2 local-zfs:cloudinit
ide2: successfully created disk 'local-zfs:vm-700-cloudinit,media=cdrom'
generating cloud-init ISO
为指定的默认用户注入 SSH 密钥。 SSH 公钥的路径可以相应更改。
# qm set $TID --sshkey ~/.ssh/id_rsa.pub
update VM 700: -sshkeys ssh-rsaxxxyyyzzz
还将默认网络 IP 分配设置为 DHCP,并设置 Cloud Init 用户密码。
# qm set $TID --ipconfig0 ip=dhcp --cipassword="$CPASS" --ciuser=$CUSER
update VM 700: -cipassword <hidden> -ciuser rocky -ipconfig0 ip=dhcp
为虚拟机指定名称。
# qm set $TID --name $TNAME
update VM 700: -name Rocky-8-Template
最后将虚拟机转换为模板。
qm template $TID
6. 从模板创建虚拟机
列出可用模板
# qm list
VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID
700 Rocky-8-Template stopped 2048 50.00 0
780 Debian-12-Template stopped 2048 50.00 0
定义用于创建 VM 的变量
TID=700 # ID of the template to be used.
VMID=$(pvesh get /cluster/nextid) #ID of the VM to be created. This is auto-assigned by Proxmox VE
VMNAME=DirectAdmin # Name of the VM
RAM=4096 # VM RAM size in MB
CORES=2 # CPU cores for the VM
接下来定义网络配置参数
BRIDGE=vmbr1 # Name of the bridge attached to the VM
IP=192.168.20.11/24 # IP address (If using static IP addressing)
GW=192.168.20.1 # Default gateway IP Address
DNS=8.8.8.8 # Default DNS server
SDOMAINS="example.com" # Search domains, separate with , for multiple.
我们通过克隆模板来创建虚拟机实例。为此有两个标准选项。
- 链接克隆 – 由此创建的虚拟机需要较少的磁盘空间,但如果不访问基础虚拟机模板就无法运行
- 完整克隆 – 从完整克隆创建的虚拟机是完整副本,完全独立于原始虚拟机模板,但需要与原始虚拟机相同的磁盘空间。
完整克隆示例。
# qm clone $TID $VMID --full --name $VMNAME --format qcow2
...
transferred 44.2 GiB of 50.0 GiB (88.34%)
transferred 44.7 GiB of 50.0 GiB (89.35%)
transferred 45.2 GiB of 50.0 GiB (90.35%)
transferred 45.7 GiB of 50.0 GiB (91.36%)
transferred 46.2 GiB of 50.0 GiB (92.36%)
transferred 46.7 GiB of 50.0 GiB (93.36%)
transferred 47.2 GiB of 50.0 GiB (94.37%)
transferred 47.7 GiB of 50.0 GiB (95.37%)
transferred 48.2 GiB of 50.0 GiB (96.37%)
transferred 48.7 GiB of 50.0 GiB (97.38%)
transferred 49.2 GiB of 50.0 GiB (98.38%)
transferred 49.7 GiB of 50.0 GiB (99.39%)
transferred 50.0 GiB of 50.0 GiB (100.00%)
transferred 50.0 GiB of 50.0 GiB (100.00%)
链接克隆示例
qm clone $TID $VMID --name $VMNAME
调整CPU核心和内存
# qm set $VMID --vcpus $CORES --cores $CORES
update VM 100: -vcpus 1
# qm set $VMID --memory $RAM
update VM 100: -memory 4096
更新 IP、DNS 和搜索域
# qm set $VMID --ipconfig0 ip=$IP,gw=$GW
update VM 100: -ipconfig0 ip=192.168.20.11/29,gw=192.168.20.1
# qm set $VMID --searchdomain $SDOMAINS
update VM 100: -searchdomain example.net
# qm set $VMID --nameserver $DNS
update VM 100: -nameserver 8.8.8.8
配置用于身份验证的 SSH 公钥
qm set $VMID --sshkey $SSHKEY
将VM设置为启动时设置
qm set $VMID --onboot 1
启动虚拟机实例
qm start $VMID
结论
在本文中,我们已经能够在 Proxmox 虚拟环境中创建 Rocky/AlmaLinux/CentOS 8|9 的操作系统模板。一旦我们通过克隆模板创建了虚拟机,我们就可以按照 CLI 或使用 Proxmox Web 控制台所示的方式开始。要访问实例,请使用远程控制台(例如 SSH、VNC 或 Web 控制台)并管理您的操作系统。我们希望这篇文章能够提供有用的信息。
更新于:4个月前
相关文章
- CentOS7部署发布.NET Core网站Ngnix安装配置图文教程
- ThinkTemplate 模板引擎
- 微信公众号模板消息接口
- 登录页面模板推荐
- CentOS离线安装unzip
- Linux使用Docker部署.NET6网站图文教程
- Centos 镜像文件下载
- AnolisOS能够超过CentOS吗?
- ThinkPHP6.0自定义异常页面模板文件
- CentOS 7 Linux系统中添加新用户并给其授权
- CentOS项目宣称"向所有人开放"
- 在 Rocky 8 上安装 Zammad 票务系统 | CentOS 8
- 国产版CentOS系统AnolisOS
- 在 Proxmox VE 上安装 Ubuntu 24.04 (Noble Numbat)
- 如何在 Proxmox VE 上安装 OPNSense 防火墙
- 如何在 Rocky Linux/AlmaLinux 8 上安装 WHMCS
- 在 Rocky Linux 8/AlmaLinux 8 上安装 DirectAdmin
- 将 Proxmox VM 迁移到另一个 Proxmox 服务器
- 在 Proxmox VE 上安装和配置 OpenWrt VM
- 如何在 Proxmox VE 上创建 Ubuntu 和 Debian 操作系统模板