В 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
|
Наконец-то преобразуйте виртуальную машину в шаблон.
Шаг 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.
Завершение#
В этой статье мы смогли создать шаблон Rocky Linux в виртуальной среде Proxmox VE. После того, как мы создали виртуальную машину, клонируя шаблон, мы можем начать, как показано с CLI или с использованием веб-консоли Proxmox. Чтобы получить доступ к экземпляру, используйте удаленную консоль, такую как SSH, VNC или веб-консоль, и администрируйте вашу ОС. Мы надеемся, что эта статья была информативной.
Если вам понравился этот пост о том, как создать шаблон Rocky Linux в виртуальной среде Proxmox VE, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.