Alt-packer
Alt packer содержит определения Packer для создания образов для загрузки ALT Linux в виртуальных средах, таких как KVM, VirtualBox и т. д.
Alt packer позволяет подготовить базовый («золотой») образ ВМ для OpenUDS, который содержит предустановленную операционную систему, OpenUDS actor, зарегистрированный на сервере OpenUDS, необходимые приложения и настройки.
Подготовка машины сборки
Предварительная настройка:
- Обновить ядро:
# update-kernel
- И перезагрузить компьютер, чтобы воспользоваться новыми пакетами ядра.
- Установить следующие пакеты и их зависимости:
# apt-get install make jq curl wget qemu-kvm packer
- Добавить необходимый модуль ядра в список модулей для загрузки:
- для Intel:
# echo kvm_intel >> /etc/modules-load.d/kvm.conf
- для AMD:
# echo kvm_amd >> /etc/modules/kvm.conf
- для Intel:
- Добавить пользователя в группу vmusers для QEMU:
# gpasswd -a <имя пользователя> vmusers
- Перезагрузить машину.
Склонировать ветку cloud из репозитория https://github.com/alt-cloud/alt-packer.git:
$ git clone --branch=cloud https://github.com/alt-cloud/alt-packer.git
Перейти в каталог alt-packer:
$ cd alt-packer
Создать каталог packer_cache (или символическую ссылку на него) и загрузить в него необходимые ISO.
$ mkdir packer_cache
$ wget -P packer_cache/ http://ftp.altlinux.org/pub/distributions/ALTLinux/p10/images/server/x86_64/alt-server-10.2-x86_64.iso
Сборка образа для OpenUDS
Команда создания образа для OpenUDS:
$ make image target=<дистрибутив> BASE_VERSION=<версия> TARGET_VERSION=<версия> VM_TYPE=openuds-actor OPENUDS_HOST=<IP-адрес>
Допустимые параметры:
- target — целевой дистрибутив (возможные значения: alt-server, alt-workstation, alt-kworkstation)
- VM_TYPE — тип образа (по умолчанию qemu);
- BASE_VERSION — версия исходного образа;
- TARGET_VERSION — версия целевого образа;
- OPENUDS_ACTOR_SSL_VALIDATION — уровень безопасности для связи с сервером OpenUDS (по умолчанию no);
- OPENUDS_HOST — IP-адрес сервера OpenUDS;
- OPENUDS_AUTHENTICATOR — аутентификатор, которому принадлежит пользователь-администратор (по умолчанию admin);
- OPENUDS_USERNAME — имя пользователя, имеющего права администратора в среде OpenUDS (по умолчанию root);
- OPENUDS_PASSWORD — пароль пользователя (по умолчанию udsmam0);
- OPENUDS_ACTOR_LOG_LEVEL — уровень журналирования (по умолчанию error).
Пример команды для создания образа:
$ make image target=alt-workstation BASE_VERSION=10.2 TARGET_VERSION=10.2 VM_TYPE=openuds-actor OPENUDS_HOST=192.168.0.53
В данном примере при создании образа будет использоваться ISO-образ alt-workstation-10.2-x86_64.iso и будут выполнены следующие настройки:
- OpenUDS Actor будет установлен и зарегистрирован на сервере OpenUDS (192.168.0.53);
- создан пользователь test с паролем 123;
- настроен сервер XRDP;
- для пользователя root установлен пароль 123;
- отключен SSH-доступ по паролю.
Добавление дополнительных шагов
Для добавления дополнительных шагов при создании образа можно воспользоваться одним из двух вариантов:
- Добавить дополнительные действия в скрипт scripts/steps/setup_openuds_actor.
- Создать дополнительный скрипт в каталоге scripts/steps/, затем добавить его в scripts/vm_setup.
Пример скрипта, который добавляет установку веб-браузера chromium:
- Создать файл scripts/steps/setup_chromium:
#! /bin/sh set -euo pipefail echo "Install Chromium" apt-get -y install chromium
- Добавить права на запуск скрипта:
# chmod +x scripts/steps/setup_chromium
- Добавить созданный скрипт в список шагов для openuds-actor (файл scripts/vm_setup):
if test "${VM_TYPE}" == "openuds-actor"; then ${STEP_DIR}/setup_remove_cdroms_repos ${STEP_DIR}/setup_apt if test "${CLOUDINIT}" == "1"; then ${STEP_DIR}/setup_cloudinit fi ${STEP_DIR}/setup_agent ${STEP_DIR}/setup_network ${STEP_DIR}/setup_root ${STEP_DIR}/setup_test_user ${STEP_DIR}/setup_restore_sshd_config ${STEP_DIR}/setup_ssh ${STEP_DIR}/setup_prepare_new_instance ${STEP_DIR}/setup_ansible ${STEP_DIR}/setup_chromium ${STEP_DIR}/setup_openuds_actor fi
Пример скрипта, который устанавливает и настраивает сервер X2GO:
- Создать файл scripts/steps/setup_x2go:
#! /bin/sh set -euo pipefail echo "Install x2goserver" apt-get -y install x2goserver systemctl enable --now x2goserver # echo "Enabled sshd-password" control sshd-password-auth enabled
- Добавить права на запуск скрипта:
# chmod +x scripts/steps/setup_x2go
- Добавить созданный скрипт в список шагов для openuds-actor (файл scripts/vm_setup):
if test "${VM_TYPE}" == "openuds-actor"; then ${STEP_DIR}/setup_remove_cdroms_repos ${STEP_DIR}/setup_apt if test "${CLOUDINIT}" == "1"; then ${STEP_DIR}/setup_cloudinit fi ${STEP_DIR}/setup_agent ${STEP_DIR}/setup_network ${STEP_DIR}/setup_root ${STEP_DIR}/setup_test_user ${STEP_DIR}/setup_restore_sshd_config ${STEP_DIR}/setup_ssh ${STEP_DIR}/setup_prepare_new_instance ${STEP_DIR}/setup_ansible ${STEP_DIR}/setup_x2go ${STEP_DIR}/setup_openuds_actor fi
Расположение и наименование образов
Все созданные образы находятся в каталоге ./images. По умолчанию к имени образа добавляются текущая дата и тег git. Если тега нет, добавляется хеш текущего коммита, например:
alt-workstation-10.2-openuds-actor-20250203-4f20feb-x86_64.qcow2
При необходимости тег, хеш и дату можно переопределить с помощью переменных среды GIT_TAG, GIT_HASH, GIT_DATE:
$ make image target=alt-server BASE_VERSION=10 TARGET_VERSION=10 VM_TYPE=cloud GIT_TAG=1.0.1 GIT_DATE=20250123
Разворачивание образа в PVE
Процедура разворачивания образа:
- Скопировать образ на машину PVE.
- На машине PVE импортировать образ. Команда импорта:
qm importdisk <vmid> <source> <storage> [OPTIONS]
- Импорт диска в хранилище local, для ВМ с ID 207:
# qm importdisk 207 /home/user/alt-workstation-10.2-openuds-actor-20250203-4f20feb-x86_64.qcow2 local --format qcow2 … Successfully imported disk as 'unused0:local:207/vm-207-disk-0.qcow2'
- Привязать диск к ВМ:
# qm set 207 --scsi0 local:207/vm-207-disk-0.qcow2
Загрузка образа с помощью NBD
Загрузить образ можно также с помощью NBD.
На машине сборки:
- Установить пакет nbd-server:
# apt-get install nbd-server
- Экспортировать образ QCOW2 с помощью NBD (на порту 12345):
$ nbd-server 12345 /home/user/alt-packer/images/alt-server-10.2-openuds-actor-20250203-4f20feb-x86_64.qcow2 На клиенте: # Установить пакет {{pkgL|nbd-client}}: #:<syntaxhighlight lang="bash"># apt-get install nbd-client
- Загрузить драйвер для NBD:
# modprobe nbd
- Выполнить команду для подключения к серверу NBD (предполагается, что IP-адрес сервера 192.168.0.175):
# nbd-client 192.168.0.175 12345
- Проверить, что образ QCOW2 смонтирован, с помощью этих команд:
# file -s /dev/nbd0 /dev/nbd0: QEMU QCOW Image (v3), 5368709120 bytes (v3), 5368709120 bytes
- или:
# qemu-img info /dev/nbd0 image: /dev/nbd0 file format: qcow2 virtual size: 5 GiB (5368709120 bytes) disk size: 0 B cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false
- Перенести образ на блочное устройство:
# qemu-img dd bs=1M if=/dev/nbd0 of=/var/lib/vz/images/208/vm-208-disk-0.qcow2
- Это может занять довольно много времени из-за передачи большого файла.
- Отключить клиент:
# nbd-client -d /dev/nbd0
- Привязать диск к ВМ:
# qm set 208 --scsi0 local:208/vm-208-disk-0.qcow2
Остановить NBD-сервер:
$ pkill nbd-server
Убедиться, что порт освободился:
$ ss -ntlup |grep 12345
Устранение неполадок
В случае проблем с автоустановщиком добавьте параметр instdebug в параметры загрузки ядра.
В случае ошибок типа No space left on device при использовании каталога /tmp — следует установить переменную TMPDIR на другой каталог.