首页 程序笔记 在 Proxmox VE 上创建 Rocky/Alma/CentOS 模板

在 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

如果使用LVMZFS池,则使用:

# 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 控制台)并管理您的操作系统。我们希望这篇文章能够提供有用的信息。


2

站心网

在 Proxmox VE 中,VM 模板是预先配置的操作系统映像,供在旋转新虚拟机时使用。它包含操作系统的完整安装..

为您推荐

最新CentOS7安装搭建shadowsocks服务端+客户端使用图文教程

使用的CentOS版本是7.9,其他版本也可以。超级推荐的是搭建shadowsocks服务端,安装配置都很简单,几分钟就搞定,客户端支持PC移动端,下面是安装shadowsocks的过程,只要复制粘贴命令就行了,文件夹路径都不需要改..

ASP.NET 使用Entity Framework (EF) 创建迁移修改SQLite数据库表结构

在 ASP.NET 中,使用 Entity Framework (EF) 创建并连接 SQLite 数据库是一种轻量级、高效的数据库管理方式。以下是详细步骤:安装必要的 NuGet 包安装EntityFrameworkCore.Sqlite包:Install-Package Microsoft.Ent..

.NET Core 3.0创建一个单独的可执行文件

一个独立的应用程序是一个很好的方式来共享您的应用程序,因为所有的组件、运行时和框架都包含在应用程序中。您只需提供application.exe文件,而不必担心其他计算机上是否存在框架或运行时安装状态。.NET Core 3.0预..

.NET Core MVC应用程序创建教程

本文主要介绍如何创建一个.NET Core MVC应用程序。和大家一起了解一下.NET Core MVC项目中各个文件的作用。首先准备工作,大家需要安装VS2017 15.7.2版本,安装.NET Core2.0,安装VS的时候选择安装.NET Core相关功能..

ASP.NET MVC View视图 .cshtml文件中创建方法

使用场景是在一个 cshtml 文件中想要递归输出html,所以需要定义一个输出html的方法,它的作用域仅限于这个页面。我们知道可以创建 HTMLHelper扩展方法或者在类中实现一个输出html string的方法。但是我们希望在View..

CentOS7部署发布.NET Core网站Ngnix安装配置图文教程

Linux服务器部署.NET Core网站运行速度更快,最近打算把原来windows server上的网站迁到linux的云服务器上。 顺便记录一下CentOS7安装.NET运行环境,安装和配置Ngnix的过程。首先安装.NET运行时sudorpm-Uvhhttps://p..

.NET6创建windows服务图文教程

本文记录了使用Visual studio2022创建windows服务,并且安装windows服务设置为自动启动的步骤。1、创建一个worker service新建一个项目,选择辅助角色服务,如图所示:我创建了一个名为WorkerService的项目,创建完..

CentOS离线安装unzip

要在离线的 CentOS 系统上安装 unzip,你需要在有网络连接的机器上下载所需的软件包,然后将它们传输到离线的 CentOS 机器。以下是详细的步骤:在线机器准备:使用一个有网络连接的机器,并按照以下步骤进行操作:1...

Android Studio创建安卓App通过WebView内嵌网页

做了一个react的纯前端的应用,想要使用Android Studio创建一个安卓app通过WebView内嵌。创建app和启动页之前有讲过Android Studio Dolphin创建app启动页Splash自动跳转https://www.leavescn.com/Articles/Content/1..

CentOS7安装unzip解压工具命令使用方法

CentOS7可以通过yum命令安装支持zip的工具unzip,下面是安装和使用的方法。安装unzip工具yuminstall-yunzipzip使用unzip命令解压zip文件#解压到当前目录下unziptest.zip#使用-d参数解压到指定目录下unzip-d/filestes..

Android Studio Dolphin创建app启动页Splash自动跳转

好久没有使用Android Studio了,想要创建一个app内嵌一个react的前端应用。下载最新版的Android Studio Dolphin下载地址:https://developer.android.google.cn/studio创建一个新的app,选择Empty的模版即可。然后创..

Linux使用Docker部署.NET6网站图文教程

本文主要实践在Linux使用Docker部署.NET Core网站。服务器使用的是CentOS7.9版本。我们使用Visual Studio2022创建.NET Core网站并生成Dockerfile文件,然后上传到Linux服务器并使用Docker部署网站。创建网站并生成Do..

Vue安装和创建Vue项目

1、安装Node.js下载地址:https://nodejs.org/en/download/2、执行npm install --global vue-cli 命令,全局安装vue-cli3、执行vue init webpack vue-project 命令其中vue-project 是自己的项目名称如下图所示,执行..

修改文件创建修改时间的工具NewFileTime

NewFileTime 是一个用于在Windows操作系统上修改文件或文件夹的创建时间、修改时间和访问时间的实用工具。它可以帮助用户管理文件的时间属性,适用于需要对文件的时间戳进行调整的情况。NewFileTime是一个小型的便携..

AnolisOS能够超过CentOS吗?

AnolisOS 是一个开源 Linux 操作系统,由阿里云、腾讯云、红帽等公司联合发起的 OpenAnolis 社区开发。AnolisOS 基于 CentOS 8 开发,兼容 CentOS 的软件包和应用生态,具有稳定、高性能、安全、可靠等特点。AnolisO..

Windows多线程编程之使用Windows API CreateThread创建一个线程

Windows API CreateThread是一个在Windows API中提供了建立新的线程的函数,该函数在主线程的基础上创建一个新线程,线程终止运行后,线程对象仍然在系统中,需要通过CloseHandle函数来关闭该线程对象。函数介绍函数..

CentOS 7 Linux系统中添加新用户并给其授权

前言在Linux系统中,日常使用时root用户权限过大,添加新用户是比较常见的,不同的用户有不同的权限,不同的用户目录等,而不同的Linux系统,添加新用户的命令和授权略微有些差异,这里就以比较常用的CentOS 7系统加..

使用控制台应用程序创建WEBAPI自托管程序

前言创建 .NET ASP的WEBAPI可以选择WEBAPI项目类型,但需要使用IIS托管,有些情况下,只想做简单的WEB API服务,也有办法可以使用Console应用程序创建WEBAPI,在提到控制台应用程序,很多人会怀疑服务的URL是如何通..

CentOS项目宣称"向所有人开放"

最近几周,红帽决定限制对RHEL源代码的访问,从而导致了AlmaLinux宣布运营方向改变,随后Rocky Linux找到了获取源代码的新方法,甲骨文为此发表了有趣的声明,甚至SUSE也分叉了RHEL。现在公开的RHEL源代码基本上是Ce..

创建 Netboot.XYZ 服务器以通过网络安装发行版

一个家庭实验室设置,您可以在其中启动新的 Linux 发行版,而无需一次又一次创建实时 USB。如果您像我一样,您可能拥有一堆计算机。这些计算机可能都运行 Linux(对吗?对吗?)如果是这样,那么您可能厌倦了每次要..

发表回复

返回顶部