---
title: Шаблоны ОС и ISO-образы
description: Подготовка образов ОС: сборка и регистрация шаблонов CloudStack, создание cloud-image шаблонов для Proxmox VE.
url: https://nexcmp.com/ru/docs/infrastructure/templates/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

# Шаблоны ОС и ISO-образы {#os-templates-and-isos}

> **В панели управления:** Services › Virtual Machines › Template (`/vm/templates`). Шаблоны Proxmox отображаются для каждого кластера в Infrastructure › Cloud provider › Providers › (cluster) › Clusters.

## Назначение {#what-it-does}

Шаблон — это образ операционной системы, из которого развертывается новая VM. NexCMP не хранит образы самостоятельно: система считывает данные из CloudStack (готовые шаблоны из категории featured) или список из кластера Proxmox и позволяет выбрать, какие из них предлагать клиентам, задав отображаемое имя, иконку и имя пользователя. На этой странице описано, как подготовить образы для корректной работы с NexCMP: вход по паролю, горячее масштабирование CPU и RAM, swap-файл и автоматическое расширение корневого диска до размера тарифа.

## Требования {#requirements}

| Параметр | Требование |
|---|---|
| Сборщик шаблонов CloudStack | Машина под управлением Linux с `libguestfs-tools` (`virt-customize`, `virt-sparsify`, `guestfish`), `qemu-utils`, `curl` и около 5 GB свободного места на диске. KVM и права root не требуются. Необходим доступ в интернет для установки пакетов (или сборка с флагом `--offline`). |
| Где находится сборщик | Поставляется с каждым релизом в `/opt/nexcmp/releases/<version>/share/templates/` на сервере панели. Запускать его именно там необязательно: каталог можно скопировать на любую Linux-машину. |
| Веб-сервер | Любой HTTP(S)-сервер, доступный виртуальной машине вторичного хранилища CloudStack, для публикации готового файла `.qcow2`. Доступ из интернета не требуется. |
| CloudStack | Учетная запись с правами регистрации шаблонов, а также ID вашей зоны и соответствующего типа ОС. См. [CloudStack](https://nexcmp.com/ru/docs/infrastructure/cloudstack/). |
| Proxmox VE | Шаблонные VM cloud-init с QEMU guest agent, по одной на каждую ОС и узел. См. [Proxmox VE](https://nexcmp.com/ru/docs/infrastructure/proxmox/). |
| Зависимости | Предварительно подключенный [CloudStack](https://nexcmp.com/ru/docs/infrastructure/cloudstack/) или [Proxmox VE](https://nexcmp.com/ru/docs/infrastructure/proxmox/). |

## Подготовка инфраструктуры {#prepare-the-infrastructure}

### CloudStack: сборка шаблона {#cloudstack-build-a-template}

Поддерживаемые базовые образы (образ загружается от поставщика с проверкой контрольной суммы до внесения каких-либо изменений):

| Образ | `--distro` | Имя пользователя |
|---|---|---|
| Ubuntu 22.04 | `ubuntu-22.04` | `ubuntu` |
| Ubuntu 24.04 | `ubuntu-24.04` | `ubuntu` |
| Debian 12 | `debian-12` | `debian` |
| Rocky Linux 9 | `rocky-9` | `rocky` |

Другие дистрибутивы: добавьте строку в `distros.conf` (URL образа, файл контрольной суммы, семейство `deb` или `rpm`).

1. Скопируйте сборщик на сборочную машину и запустите его:

   ```bash
   cp -r /opt/nexcmp/releases/<version>/share/templates ~/templates && cd ~/templates
   ./build-template.sh --distro ubuntu-24.04 --version v7 --work ./out
   ```

   Добавьте `--panel-url https://cloud.example.com`, чтобы встроить опциональный агент мониторинга при первой загрузке, регистрирующийся в вашей панели (только HTTPS). Без него агент не добавляется. Другие параметры: `--base <file>` для использования заранее скачанного образа, `--offline` для пропуска установки пакетов.

2. В результате создаются `out/ubuntu-24.04-v7.qcow2` и его `.sha256`. Сборка завершается запуском `verify-image.sh`, который проверяет готовый образ в режиме «только чтение» и отклоняет некорректный (он сохраняется как `.unverified`). Проверку можно перезапустить в любой момент: `./verify-image.sh out/ubuntu-24.04-v7.qcow2 --no-agent`.

Что сборщик добавляет в образ:

| Параметр | Назначение |
|---|---|
| `qemu-guest-agent` | CloudStack может запрашивать у ВМ данные о процессорах и IP-адресах, а также переводить ее в согласованное состояние для Snapshots. |
| cloud-init с источником данных CloudStack, `set_passwords` при каждой загрузке, вход по SSH по паролю | Сгенерированный пароль запрашивается из виртуального маршрутизатора, и функция **Reset password** работает. |
| Правило udev для горячего подключения CPU и RAM | Горячеподключенные vCPU и RAM подключаются автоматически, поэтому динамическое масштабирование и Auto Scaling работают. |
| Служба файла подкачки | Создает `/swapfile` размером в меньшее из двух значений: 50% RAM или 4 GiB после расширения диска. `touch /etc/cmp-swap.disabled` отключает его. |
| cloud-init `growpart` и `resizefs` | Небольшой корневой диск расширяется до размера диска по тарифу при первой загрузке. |
| Пустой machine-id, отсутствие хостовых ключей SSH | Каждая ВМ получает собственный уникальный идентификатор. |

::: warning Назовите шаблон `<OS> <version> <vN>`
NexCMP включает **Auto Scaling** для шаблонов, имя которых оканчивается на `vN` или `vN.M` с **N от 6 и выше** (`Ubuntu 24.04 v7`, `Rocky Linux 9 v7.1`). Сборщик применяет это правило для `--version`. Зарегистрируйте шаблон в точности с выведенным именем.
:::

3. Опубликуйте файл и зарегистрируйте его в CloudStack. Используйте выведенный сборщиком хэш SHA-256 и регистрируйте шаблон только после полной записи файла:

   ```bash
   cmk list ostypes keyword="Ubuntu 24.04" filter=id,description
   cmk register template name="Ubuntu 24.04 v7" displaytext="Ubuntu 24.04 v7" \
     url=https://files.example.com/ubuntu-24.04-v7.qcow2 zoneid=<zone-id> format=QCOW2 hypervisor=KVM \
     ostypeid=<os-type-id> passwordenabled=true sshkeyenabled=true isdynamicallyscalable=true \
     requireshvm=true isextractable=false ispublic=true isfeatured=true \
     checksum="{SHA-256}<sha256 of the file>" \
     details[0].guest.cpu.mode=host-passthrough details[0].rootDiskController=osdefault
   ```

   - `passwordenabled=true` позволяет CloudStack генерировать пароль ВМ.
   - `isdynamicallyscalable=true` разрешает динамическое масштабирование.
   - `host-passthrough` требуется для загрузки актуальных образов Rocky и Alma; `osdefault` обеспечивает переносимость дискового контроллера.

4. Дождитесь, пока статус шаблона не сменится на **Download Complete / Ready**.

Образ поставщика сохраняет небольшой виртуальный размер (около 3.5 GiB для Ubuntu и Debian, 10 GiB для Rocky). Помните, что диск в тарифном плане не может быть меньше диска шаблона.

### Proxmox VE: создание шаблона {#proxmox-ve-make-a-template}

Соберите шаблон ВМ с cloud-init для каждой ОС на каждом целевом узле развертывания, установив гостевой агент и включив вход для root, затем зарегистрируйте его как `os-key=vmid`. Все команды приведены в [Proxmox VE](https://nexcmp.com/ru/docs/infrastructure/proxmox/). Описанный выше сборщик для CloudStack **не предназначен** для Proxmox: он настраивает cloud-init под источник данных CloudStack.

### ISO-образы {#isos}

Клиенты подключают собственные ISO-образы через модуль **Images** (CloudStack) или модуль Dedicated Server. Они не связаны с шаблонами ОС, описанными на этой странице. См. [Модули](https://nexcmp.com/ru/docs/infrastructure/modules/) и [Выделенные серверы](https://nexcmp.com/ru/docs/infrastructure/dedicated/).

## Подключение в NexCMP {#connect-in-nexcmp}

1. Откройте **Services › Virtual Machines › Template**. Нажмите **Sync now** или подождите до 15 минут. Синхронизация добавит готовые (ready) и рекомендованные (featured) в CloudStack шаблоны.

      ![Страница Template со списком синхронизированных шаблонов, их состоянием готовности и столбцом горячего подключения CPU](https://nexcmp.com/ru/docs/images/infrastructure/templates-01-list.webp)

2. Нажмите **Edit** для нового шаблона и настройте параметры, которые увидят клиенты:

   | Поле | Пример значения |
   |---|---|
   | Отображаемое имя для клиентов | `Ubuntu 24.04 LTS` |
   | Семейство ОС | `ubuntu` (значок и пользователь по умолчанию) |
   | Версия | `24.04` |
   | Имя пользователя для входа | `ubuntu` (для Windows: `Administrator`; для остальных: `root`) |
   | Значок | URL изображения, путь или имя |
   | Порядок | `10` |
   | Активность | On |
   | Горячее подключение vCPU/RAM (live scale) | **Auto by name (v6 or later)**, **Yes** или **No (needs a restart)** |

      ![Диалоговое окно Edit template с отображаемым для клиентов именем, семейством ОС, именем пользователя для входа и параметром горячего подключения](https://nexcmp.com/ru/docs/images/infrastructure/templates-02-edit.webp)

3. Включите шаблон. Шаблон, который больше не отображается в CloudStack, скрывается автоматически (при соответствующей настройке вы получите оповещение в Telegram); он никогда не удаляется из NexCMP.

### Замена шаблона на более новую сборку {#replace-a-template-with-a-newer-build}

Используйте **More › Replace with new version** для продаваемого шаблона. Выберите новый, готовый и отключенный в данный момент шаблон. После этого продаваемая запись начнет указывать на новую сборку, сохранив свое имя, порядок и иконку; старая запись отключается для возможности отката (для возврата используйте **Replace** в новой записи). Работающие VM затронуты не будут. Если новая сборка относится к другому семейству ОС, сначала установите флажок подтверждения.

## Проверка {#verify}

1. В строке отображается **ready** и, для сборок с именем `vN`, где N равно 6 или больше, **CPU hot-plug: supported**.
2. Разверните одну тестовую VM из шаблона и проверьте внутри нее:
   - можно войти с паролем, указанным в портале;
   - `df -h /` показывает размер диска по тарифу;
   - после масштабирования на лету (**Change plan** без перезагрузки) значения `nproc` и `free -m` увеличиваются;
   - `swapon --show` выводит `/swapfile` (диски, где свободно меньше swap плюс 2 GiB, пропускают его);
   - `systemctl is-active qemu-guest-agent` выводит `active`.
3. Если вы встроили агент в образ, VM появится в списке мониторинга панели через минуту после первой загрузки. У VM должен быть собственный публичный IP: панель распознает ее по исходящему публичному IP.

## Ограничения и примечания {#limits-and-notes}

- Сборщик работает только в Linux и собирает образы Linux. Другие образы (например, Windows) можно зарегистрировать в CloudStack другими способами; NexCMP отображает то, что передает CloudStack.
- Поставляется только агент для amd64; на других архитектурах установка агента пропускается.
- Образ проверяется с помощью `guestfish`, но сборщик никогда его не загружает. Всегда развертывайте одну тестовую VM перед продажей нового образа.
- Пропустите установку агента на одной VM с помощью `touch /etc/cmp-agent.disabled` перед первой загрузкой. Удалите его позже командой `systemctl disable --now cmp-agent cmp-agent-install; rm -rf /etc/cmp-agent /usr/local/bin/cmp-agent`, затем удалите агент в консоли администратора.

## Устранение неполадок {#troubleshooting}

| Симптом | Причина | Решение |
|---|---|---|
| `virt-customize` не удается загрузить пакеты | У сборочной машины нет исходящего сетевого подключения | Настройте DNS или прокси на этой машине либо выполните сборку с `--offline` на базовом образе, где пакеты уже установлены. |
| `libguestfs: error: /usr/bin/supermin exited with error status 1` | Ядро хоста недоступно для чтения текущему пользователю (Ubuntu) | `sudo chmod +r /boot/vmlinuz*` или запустите сборку от имени root. |
| Контрольная сумма не совпадает или образ вендора больше не существует | Вендоры перемещают файлы «latest» | Скачайте образ самостоятельно, сверьте его с файлом контрольной суммы вендора и передайте через `--base`. |
| Rocky: невозможно смонтировать более новую версию XFS | Слишком старое ядро хоста | Выполните сборку на машине с актуальным ядром. |
| `--version must be v6 or higher` | Имя должно иметь вид `vN`, где N равно 6 или больше | Используйте `--version v7`. |
| `--panel-url must be a plain https:// URL` | Агент скачивается и запускается от root, поэтому обычный HTTP отклоняется | Используйте URL `https://` без пробелов, кавычек или строки параметров. |
| Шаблон остается в статусе **not ready** | CloudStack еще не завершил загрузку | Дождитесь **Download Complete** и проверьте, доступен ли URL с secondary storage VM. |
| В строке отображается **no-pass** | Шаблон был зарегистрирован без `passwordenabled=true` | Зарегистрируйте его заново с этим флагом. |
| Для CPU hot-plug отображается **unsupported** | Имя не заканчивается на `vN` (где N равно 6 или больше) | Переименуйте шаблон или установите **vCPU/RAM hot-plug** в **Yes** в меню Edit, если в образе настроено правило udev. |
| «Empty template list» после первого подключения | Синхронизация еще не выполнялась | Нажмите **Sync now** (требуется работающий worker) или дождитесь 15-минутного цикла. |
