В Proxmox VE шаблон VM - это изображение операционной системы, которая предварительно сконфигурирована для использования при вращении новых виртуальных машин. Он содержит полную установку ОС вместе с другими дополнительными программными пакетами и настройками, необходимыми для запуска операционной системы. Proxmox VE поддерживает и позволяет пользователям создавать пользовательские шаблоны ОС для большинства дистрибутиваний Linux и настольных изданий Windows.

Основной целью использования шаблонов ОС является упрощение создания новых виртуальных машин. Шаблоны обеспечивают стандартизированный и более быстрый способ развертывания ОС без использования изображений ISO, которые могут быть длинными и утомительными. Создание новой виртуальной машины с шаблоном так же просто, как и выбор шаблона ОС, настройка настройки оборудования, выделенные ресурсы и запуск виртуальной машины в течение нескольких секунд.

Создать шаблон Rocky Linux на Proxmox VE

К концу этой статьи вы создадите шаблон ОС Rocky Linux с индивидуальными конфигурациями, которые включают конкретные зависимости вашего приложения.

Мы будем работать над следующими операционными системами:

Предпосылки

  • Сервер с Proxmox VE в качестве ОС.
  • Права пользователя: пользователь root или обычный пользователь с привилегиями sudo.

Конвенции

1
2
# - данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ - данные команды должны выполняться от имени обычного пользователя.

Шан 1. Скачате облачные базовые изображения

Нам понадобится изображение базового облака, предоставленное большинством распределений Linux. Используются следующие переменные:

  • imageURL: Ссылка на изображение облака.
  • IMAGE: Имя изображения облака, загруженное как хранящее локально в системе.
  • TID: Идентификатор шаблона, который будет создан.
  • TNAME: Имя, назначенное создаваемому шаблону.
  • CUSER: Мы будем использовать CloudInit для настройки настроек, таких как пользователь ОС, пароль и сетевые конфигурации. Это имя операционной системы по умолчанию, которое будет использоваться.

Вот примеры.

1
2
3
4
5
6
imageURL=https://dl.rockylinux.org/pub/rocky/9.5/images/x86_64/Rocky-9-GenericCloud-Base.latest.x86_64.qcow2
wget $imageURL
IMAGE=Rocky-9-GenericCloud-Base.latest.x86_64.qcow2
TID=701
TNAME=Rocky-9-Template
CUSER=rocky

Шаг 2. Определить переменные шаблона

Здесь мы определяем следующие переменные, необходимые для создания шаблона.

1
2
3
4
5
6
SIZE=50G #Default root size
BRIDGE=vmbr1 #Default сетевой мост название
RAM=2048 #Default VM Ram size
CORES=1 #Default ядра процессора для виртуальной машины
STORAGE=Local-ZFS #Название пула хранения, проверьте статус pvesm
CPASS="str0nguserpasswr=ord" #CloudInit password пользователя для введения

Чтобы увидеть доступные сетевые мосты, используйте.

1
2
3
4
# brctl show
bridge name	bridge id		STP enabled	interfaces
vmbr0		8000.5ced8cedb886	no		eno1
vmbr1		8000.5ced8cedb889	no		eno4

Список доступных хранения может быть сделан со следующими командами:

1
2
3
4
# 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. Давайте установим его.

1
sudo apt update && sudo apt install libguestfs-tools

После установки мы можем подтвердить, работает ли Virt-Customize.

1
2
# virt-customize --version
virt-customize 1.48.2

Используйте virt-customize, чтобы установить основные пакеты ключей в изображении базового облака.

1
2
3
4
5
6
# 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 для запуска на загрузке системы.

1
2
3
4
5
# 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

Вы также можете установить часовой пояс по умолчанию.

1
2
3
4
5
# virt-customize -a $IMAGE --timezone "Europe/Moscow"
[   0.0] Examining the guest ...
[   7.5] Setting a random seed
[   7.6] Setting the timezone: Africa/Nairobi
[   8.0] Finishing off

Можно включить аутентификацию пароля SSH. Это не рекомендуется. Это необходимо, если вы не используете ключи SSH.

1
2
3
4
5
# 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

Отключите вход SSL для пользователя root.

1
2
3
4
5
# 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

Relabel SELinux.

1
2
3
4
5
# 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, запустите.

1
2
3
4
5
# 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

Измените размер базового изображения до желаемого размера ОС / диска, как это определено в переменной размера ранее.

1
2
# qemu-img resize $IMAGE $SIZE
Image resized.

Теперь создайте скелет шаблона ОС с памятью, процессором и сетевым мостом.

1
# qm create $TID --memory $RAM --cores $CORES  --net0 virtio,bridge=$BRIDGE --scsihw virtio-scsi-pci --kvm 1 --numa 1

Импортируйте базовое изображение, которое мы настроили в фактический диск VM Storage.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# qm importdisk $TID $IMAGE $STORAGE
importing disk 'Rocky-9-GenericCloud-Base.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'

Прикрепите диск в виртуальную машину. После импорта он не прикреплен.

1
# qm set $TID --scsihw virtio-scsi-pci --virtio0 $STORAGE:$TID/vm-$TID-disk-0.raw

При использовании пула LVM или ZFS используйте.

1
2
# 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

Включить серийную консоль для виртуальной машины.

1
2
# qm set $TID --serial0 socket --vga serial0
update VM 700: -serial0 socket -vga serial0

Включить QEMU guest agent.

1
2
# qm set $TID --agent 1
update VM 700: -agent 1

Измените порядок загрузки на начало с устройства SCSI или VirtIO block.

1
2
# qm set $TID --boot c --bootdisk virtio0
update VM 700: -boot c -bootdisk virtio0

Шаг 5. Прикрепите изображение инициировать облако и создать шаблон

Затем мы прикрепляем изображение cloud init, выполнив следующие команды.

1
2
3
4
# 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 Public Key может быть изменен согласно.

1
2
# qm set $TID --sshkey ~/.ssh/id_rsa.pub
update VM 700: -sshkeys ssh-rsaxxxyyyzzz

Также установите назначение IP-адреса по умолчанию в DHCP и установите пароль пользователя CloudInit.

1
2
# qm set $TID --ipconfig0 ip=dhcp --cipassword="$CPASS" --ciuser=$CUSER
update VM 700: -cipassword <hidden> -ciuser rocky -ipconfig0 ip=dhcp

Назначьте имя виртуальной машине, используя следующие команды.

1
2
# qm set $TID --name $TNAME
update VM 700: -name Rocky-9-Template

Наконец-то преобразуйте виртуальную машину в шаблон.

1
# qm template $TID

Шаг 6. Создание виртуальной машины из шаблона

Список доступных шаблонов.

1
2
3
4
# qm list
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID
       700 Rocky-9-Template     stopped    2048              50.00 0
       780 Debian-12-Template   stopped    2048              50.00 0

Определите переменную для создания виртуальной машины.

1
2
3
4
5
TID=700 # ID шаблона, который будет использоваться.
VMID=$(pvesh get /cluster/nextid) #ID из виртуальной машины, которая будет создана. Это автоматически записано ProxMox VE
VMNAME=DirectAdmin # имя виртуальной машины
RAM=4096 # VM RAM Размер в MB
CORES=2 # ядра процессора для виртуальной машины

Далее определить параметры конфигурации сети.

1
2
3
4
5
BRIDGE=vmbr1 # название моста, прикрепленное к виртуальной машине
IP=192.168.20.11/24 # IP-адрес (при использовании статической IP -адресации)
GW=192.168.20.1 # IP-адрес шлюза по умолчанию
DNS=8.8.8.8 # DNS-сервер по умолчанию
SDOMAINS="example.com" # Поиск доменов.

Мы создаем экземпляр VM, клонируя шаблон. Для этого есть два стандартных варианта:

  • Full Clone - виртуальная машина, созданная из Full Clone, является полной копией и полностью не зависит от исходного шаблона VM, но требует того же дискового пространства, что и оригинал.
  • Linked Clone - виртуальная машина, созданная из этого, требует меньшего количества дискового пространства, но не может работать без доступа к базовому шаблону виртуальной машины.

Пример Full clone:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 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%)

Пример Linked clone:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# qm clone $TID $VMID --name $VMNAME
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%)

Отрегулируйте ядра процессора и память.

1
2
3
4
5
# qm set $VMID --vcpus $CORES --cores $CORES
update VM 100: -vcpus 1

# qm set $VMID --memory $RAM
update VM 100: -memory 4096

Обновите IP, DNS и поисковые домены.

1
2
3
4
5
6
7
8
# 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 Public Key, используемый для аутентификации.

1
# qm set $VMID --sshkey $SSHKEY

Установите виртуальную машину для установки на загрузке.

1
# qm set $VMID --onboot 1

Запустите экземпляр VM.

1
# qm start $VMID

Завершение

В этой статье мы смогли создать шаблон Rocky Linux в виртуальной среде Proxmox VE. После того, как мы создали виртуальную машину, клонируя шаблон, мы можем начать, как показано с CLI или с использованием веб-консоли Proxmox. Чтобы получить доступ к экземпляру, используйте удаленную консоль, такую ​​как SSH, VNC или веб-консоль, и администрируйте вашу ОС. Мы надеемся, что эта статья была информативной.

Если вам понравился этот пост о том, как создать шаблон Rocky Linux в виртуальной среде Proxmox VE, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.