Облачная платформаEvolution

Подготовка и создание пользовательского образа с ОС Linux


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

Примечание

В руководстве для подготовки образа используется локальный компьютер с установленной ОС Ubuntu.

Вы будете использовать следующие сервисы:

  • «Образы» — сервис для управления образами, из которых развертываются виртуальные машины.

  • «Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина, которая будет развернута из созданного образа.

Шаги:

  1. Конвертируйте образ.

  2. Подготовьте образ к загрузке.

  3. Загрузите образ в облако.

  4. Разверните виртуальную машину из созданного образа.

Перед началом работы

  1. Зарегистрируйтесь в личном кабинете Cloud.ru.

    Если вы уже зарегистрированы, войдите под своей учетной записью.

  2. Скачайте образ с операционной системой Linux.

    В руководстве используется образ noble-server-cloudimg-amd64.img с ОС Ubuntu 24.04 LTS.

1. Конвертируйте образ

На этом шаге вы конвертируете файл образа в нужный формат.

  1. Установите qemu-utils — запустите терминал в директории с файлом образа и выполните команду:

    sudo apt install qemu-utils
  2. Конвертируйте образ в формат RAW:

    qemu-img convert -O raw noble-server-cloudimg-amd64.img noble-server-cloudimg-amd64.raw
  3. Посмотрите информацию об образе:

    qemu-img info noble-server-cloudimg-amd64.raw

    Результат:

    image: noble-server-cloudimg-amd64.raw
    file format: raw
    virtual size: 3.5 GiB (3758096384 bytes)
    disk size: 1.73 GiB

2. Подготовьте образ к загрузке

На этом шаге вы проверите, что образ соответствует требованиям платформы Evolution и подготовите его к загрузке в облако.

  1. Проверьте наличие загрузочного раздела:

    fdisk -l noble-server-cloudimg-amd64.raw | grep -E "Boot|EFI|BIOS boot"

    Результат:

    noble-server-cloudimg-amd64.raw14 2048 10239 8192 4M BIOS boot
    noble-server-cloudimg-amd64.raw15 10240 227327 217088 106M EFI System
  2. Проверьте наличие необходимых пакетов.

    1. Подключите образ как блочное устройство через qemu-nbd:

      sudo modprobe nbd max_part=8
      sudo qemu-nbd -c /dev/nbd0 noble-server-cloudimg-amd64.raw
      sudo fdisk -l /dev/nbd0

      Результат:

      Disk /dev/nbd0: 3.5 GiB, 3758096384 bytes, 7340032 sectors
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 131072 bytes
      Disklabel type: gpt
      Disk identifier: B3A7DDD4-9111-4D47-AF25-7BDBE1C23AF8
      Device Start End Sectors Size Type
      /dev/nbd0p1 2099200 7339998 5240799 2.5G Linux filesystem
      /dev/nbd0p14 2048 10239 8192 4M BIOS boot
      /dev/nbd0p15 10240 227327 217088 106M EFI System
      /dev/nbd0p16 227328 2097152 1869825 913M Linux extended boot
    2. Смонтируйте корневой раздел:

      sudo mkdir -p /mnt/img
      sudo mount -o rw /dev/nbd0p1 /mnt/img
    3. Проверьте наличие cloud-init и qemu-guest-agent:

      ls /mnt/img/usr/bin/cloud-init /mnt/img/usr/sbin/qemu-ga 2>/dev/null

      Результат:

      /mnt/img/usr/bin/cloud-init /mnt/img/usr/sbin/qemu-ga
    4. Чтобы выполнять команды внутри образа, подготовьте chroot-окружение:

      sudo mount --bind /dev /mnt/img/dev
      sudo mount --bind /dev/pts /mnt/img/dev/pts
      sudo mount --bind /proc /mnt/img/proc
      sudo mount --bind /sys /mnt/img/sys
      sudo mount --bind /run /mnt/img/run
      sudo cp /etc/resolv.conf /mnt/img/etc/resolv.conf
      sudo chroot /mnt/img /bin/bash
    5. Если в образе нет нужных пакетов, установите их:

      apt update
      apt install -y cloud-init qemu-guest-agent
    6. Добавьте конфигурацию для cloud-init:

      cat > /etc/cloud/cloud.cfg.d/90_evolution.cfg <<'EOF'
      datasource:
      OpenStack:
      metadata_urls: ["http://169.254.169.254"]
      max_wait: 60
      timeout: 5
      retries: 5
      EOF

      Где http://169.254.169.254 — адрес внутреннего сервера метаданных.

    7. Включите запуск cloud-init при каждой загрузке:

      dpkg-reconfigure -f noninteractive cloud-init
      systemctl enable cloud-init-local.service
      systemctl enable cloud-init.service
      systemctl enable cloud-config.service
      systemctl enable cloud-final.service
  3. Чтобы при каждом создании ВМ из образа она заново получала метаданные, удалите из образа все признаки уже работавшей системы.

    1. Удалите уникальные данные:

      # Reset machine-id
      truncate -s 0 /etc/machine-id
      rm -f /var/lib/dbus/machine-id
      # Clean ssh host-keys
      rm -f /etc/ssh/ssh_host_*
      # Clean logs
      rm -rf /var/log/*.gz /var/log/*.[0-9] /var/log/**/*.gz
      > /var/log/syslog
      > /var/log/wtmp
      > /var/log/lastlog
      > /var/log/auth.log
      > /var/log/kern.log
      > /var/log/messages
      > /var/log/debug
      rm -rf /tmp/* /var/tmp/*
      rm -rf /var/cache/apt/archives/*.deb
      rm -rf /var/lib/cloud/*
      rm -rf /var/lib/systemd/random-seed
      # Delete history bash
      rm -f /root/.bash_history
      find /home -name ".bash_history" -delete 2>/dev/null
      history -c
      # Reset hostname
      truncate -s 0 /etc/hostname
      exit
    2. Размонтируйте корневой раздел образа:

      sudo umount /mnt/img/sys
      sudo umount /mnt/img/proc
      sudo umount /mnt/img/dev/pts
      sudo umount /mnt/img/dev
      sudo umount /mnt/img/run
      sudo rm -f /mnt/img/etc/resolv.conf
      sudo umount /mnt/img
      sudo qemu-nbd -d /dev/nbd0

3. Загрузите образ в облако

На этом шаге вы создадите пользовательский образ в облаке Evolution, используя подготовленный файл образа.

  1. На верхней панели слева нажмите Кнопка с изображением девяти точек и выберите Инфраструктура → Образы.

  2. Справа вверху нажмите Создать образ.

  3. Укажите минимальную конфигурацию виртуальной машины, которую можно развернуть из образа:

    • vCPU, шт1.

    • RAM, ГБ1.

    • Диск, ГБ10.

  4. Нажмите Создать шаблон cloud_init и вставьте конфигурацию:

    #cloud-config
    groups:
    - admingroup:
    - root
    - sys
    - cloud-users
    hostname: {{ hostname }}
    users:
    - name: {{ name }}
    groups: users
    lock_passwd: false
    primary_group: {{ name }}
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    {% if linux_password %}
    passwd: {{ linux_password }}
    {% endif %}
    {% if public_key %}
    ssh_authorized_keys:
    - {{ public_key }}
    {% endif %}
    runcmd:
    - sudo systemctl enable qemu-guest-agent
    - sudo systemctl start qemu-guest-agent
  5. Нажмите Сохранить.

  6. Укажите название образа — ubuntu-custom.

  7. Нажмите Создать.

    Откроется страница с информацией о созданном образе в статусе «Ожидает загрузки».

  8. В поле Источник нажмите Загрузить образ и выберите файл noble-server-cloudimg-amd64.raw.

    После выбора файла начнется загрузка, которая может занять несколько минут. Не закрывайте страницу браузера до ее завершения.

4. Разверните в облаке ВМ из созданного образа

На этом шаге вы развернете в облаке Cloud.ru виртуальную машину с ОС Linux из пользовательского образа и подключитесь к ней.

  1. Создайте виртуальную машину со следующими параметрами:

    • Названиеubuntu-server.

    • Зона доступностиru.AZ-1.

    • Образ — на вкладке Пользовательские выберите образ ubuntu-custom.

    • Гарантированная доля vCPU10%.

    • vCPU, шт1.

    • RAM, ГБ1.

    • Загрузочный диск — укажите размер 10 ГБ.

    • Сетевой интерфейс — выберите тип Подсеть с публичным IP.

    • Логинcloud-user.

    • Пароль — задайте пароль пользователя.

  2. Подключитесь к созданной ВМ.

    1. Выберите ВМ ubuntu-server в списке.

    2. Перейдите на вкладку Серийная консоль.

      Дождитесь загрузки системы.

    3. Введите логин и пароль пользователя, указанные при создании ВМ.

Результат

Вы научились подготавливать образы с ОС Linux, загружать их в облако Cloud.ru и разворачивать из них виртуальные машины.