---
title: 'Подготовить ISO-образ для работы с облачной платформой'
sidebar_label: 'Подготовить образ для облачной платформы'
sidebar_position: 5
description: 'Как подготовить загруженный ISO-образ для совместимости с облачной платформой Selectel'
---

import Formbricks from '@theme/MDXComponents/Formbricks'

# Подготовить ISO-образ для работы с облачной платформой

Если вы [загрузили в хранилище образов](/cloud-servers/images/create-image.mdx) ISO-образ с дистрибутивом операционной системы, мы рекомендуем сделать его полностью совместимым с облачной платформой Selectel. Из совместимого образа можно создавать облачные серверы, для которых будет доступна такая же функциональность, как у серверов из [готовых образов](/cloud-servers/images/about-images.mdx#default-images).

## Подготовить образ Windows \{#create-windows-image}

1. [Подготовьте ISO-образ локально](#create-windows-image-locally).
2. [Загрузите ISO-образ в хранилище образов](#upload-windows-image).
3. [Модифицируйте свойства образа Windows](#modify-windows-image-properties).

### 1. Подготовить ISO-образ локально \{#create-windows-image-locally}

1. На локальном компьютере распакуйте архив с ISO-образом в отдельную директорию архиватором, например `7-zip`, `WinRAR`, `tar`.

2. Скачайте VirtiO-драйверы в виде ISO-образа из репозитория [Fedora People](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.266-1/).

3. Создайте директорию Drivers.

4. Распакуйте в директорию Drivers ISO-образ с VirtiO-драйверами архиватором, например `7-zip`, `WinRAR`, `UltraISO`.

5. Перенесите директорию Drivers с VirtiO-драйверами в директорию ISO-образа Windows, который вы распаковали на шаге 1.

6. Установите утилиту [DISM++](https://www.chuyu.me/en-US/) для управления образами.

7. Откройте DISM++.

8. Соберите установочный образ, для этого перейдите в раздел **Toolkit** и выберите **ISO Maker**.

### 2. Загрузить ISO-образ в хранилище образов \{#upload-windows-image}

Используйте подраздел [Загрузить и создать образ из файла](/cloud-servers/images/create-image.mdx#upload-image-from-file) инструкции Загрузить и создать образ.

Укажите:

* файл — образ, который [подготовили на этапе 1](#create-windows-image);
* ОС — Windows;
* формат образа — `iso`;
* формат контейнера — `bare`.

### 3. Модифицировать свойства образа \{#modify-windows-image-properties}

1. [Откройте OpenStack CLI](/cloud-servers/tools/openstack-cli/).

2. Выведите ID доступных образов:

   ```bash
   openstack image list
   ```

   В ответе появится список образов.
   Скопируйте ID образа, который вы [загрузили на этапе 2](#upload-windows-image).

3. Опционально: посмотрите свойства образа:

   ```bash
   openstack image show
   ```

4. Добавьте нужные свойства:

   ```bash
   openstack image set \
       --property hw_disk_bus=scsi \
       --property hw_firmware_type=uefi \
       --property hw_qemu_guest_agent=yes \
       --property hw_scsi_model=virtio-scsi \
       --property os_type=windows \
       --property x_sel_image_agent_type=cloudbase-init \
       --property x_sel_image_os_arch=amd64 \
       --property x_sel_image_os_dist=windows \
       --property x_sel_image_os_type=windows \
       --property x_sel_image_type=master \
       --property x_sel_kpti_patch=true \
       <image_id>
   ```

   Укажите `<image_id>` — ID образа, который вы скопировали на шаге 2.

## Подготовить образ Linux \{#create-linux-image}

:::info

Это инструкция для образа Oracle Linux. Для других дистрибутивов могут отличаться утилиты, репозитории и расположение файлов.

:::

1. [Загрузите ISO-образ в хранилище образов](#upload-linux-image).
2. [Создайте облачный сервер из загруженного образа](#create-cloud-server).
3. [Настройте облачный сервер](#configure-server).
4. [Создайте образ из загрузочного диска облачного сервера](#create-linux-image-from-volume).

### 1. Загрузить ISO-образ в хранилище образов \{#upload-linux-image}

Используйте инструкцию [Загрузить и создать образ](/cloud-servers/images/create-image.mdx).

### 2. Создать облачный сервер из загруженного образа \{#create-cloud-server}

Используйте инструкцию [Создать облачный сервер](/cloud-servers/create/create-server.mdx).

Выберите в качестве источника загруженный образ, а в качестве загрузочного диска — сетевой диск.

### 3. Настроить облачный сервер \{#configure-server}

1. [Подключитесь к облачному серверу](/cloud-servers/manage/connect-to-server.mdx).

2. Добавьте в файл `selectel-openstack.repo` репозитории OpenStack Selectel:

   ```bash
   cat <<EOF > /etc/dnf.repos.d/selectel-openstack.repo
   [selectel-openstack]
   name=selectel-openstack
   baseurl=http://mirror.selectel.org/rpm/centos/7/x86_64
   gpgcheck=1
   gpgkey=http://mirror.selectel.org/selectel-openstack.key
   EOF
   ```

3. Обновите список репозиториев для пакетного менеджера:

   ```bash
   dnf update
   ```

4. Установите пакеты:

   ```bash
   dnf install crontab-randomizer \
   fstrim-blocks qemu-guest-agent \
   set-root-pw \
   cloud-init \
   cloud-utils-growpart \
   compat-openssl10
   ```

5. Перейдите в директорию `/etc/cloud/cloud.cfg.d/` для создания конфигурационных файлов cloud-init:

   ```bash
   cd /etc/cloud/cloud.cfg.d/
   ```

6. Запретите создание пользователя `ubuntu`:

   ```bash
   cat <<EOF > 10_no_default_users.cfg
   users: []
   EOF
   ```

7. Добавьте источники данных для cloud-init-datasources:

   ```bash
   cat <<EOF > 91-dib-cloud-init-datasources.cfg
   datasource_list: [  ConfigDrive, Ec2, None ]
   EOF
   ```

8. Отключите предупреждение об использовании cloud-init и EC2:

   ```bash
   cat <<EOF > 92-ec2-datasource.cfg
   #cloud-config
   datasource:
       Ec2:
           strict_id: false
   EOF
   ```

9. Добавьте настройки загрузки:

   ```bash
   cat <<EOF > 99_boot_routines.cfg
   bootcmd:
       - sed -i '/^;/d' /etc/resolv.conf
   EOF
   ```

10. Запретите для cloud-init отключать EC2-метаданные:

    ```bash
    cat <<EOF > 99_enable_ec2.cfg
    disable_ec2_metadata: false
    EOF
    ```

11. Добавьте настройки первой загрузки:

    ```bash
    cat <<EOF > 99_first_boot_routines.cfg
    runcmd:
        - sed -i '/NetworkManager/d' /etc/resolv.conf
        - sed -i '/^search/d' /etc/resolv.conf
        - set-root-pw 2> /dev/null
        - crontab-randomizer
    EOF
    ```

12. Запретите отключение root-доступа через SSH:

    ```bash
    cat <<EOF > 99_keep_root_user.cfg
    disable_root: false
    EOF
    ```

13. Измените таймзону:

    ```bash
    cat <<EOF > 99_location.cfg
    locale: en_US.UTF-8
    timezone: UTC
    EOF
    ```

14. Добавьте разрешение аутентификации по паролю через SSH:

    ```bash
    cat <<EOF > 99_ssh_settings.cfg
    ssh_pwauth: true
    no_ssh_fingerprints: true
    ssh_deletekeys: true
    EOF
    ```

15. Настройте автозапуск сервисов для применения изменений и корректной работы после перезагрузки сервера:

    ```bash
    systemctl enable cloud-init
    systemctl enable cloud-init.service
    systemctl enable cloud-config.service
    systemctl enable cloud-final.service
    systemctl enable qemu-guest-agent.service
    systemctl enable cockpit.socket
    ```

16. [Выполните аппаратную перезагрузку сервера](/cloud-servers/manage/reboot-server.mdx#perform-hard-reboot).

17. Повторно [подключитесь к облачному серверу](/cloud-servers/manage/connect-to-server.mdx).

    Появится сообщение о том, что изменился идентификатор хоста. Это означает, что cloud-init успешно работает при загрузке операционной системы:

    ```bash
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that a host key has just been changed.
    ```

### 4. Создайте образ из загрузочного диска облачного сервера \{#create-linux-image-from-volume}

1. [Создайте образ из загрузочного диска облачного сервера](/cloud-servers/images/create-image.mdx#create-image-from-volume).

2. [Откройте OpenStack CLI](/cloud-servers/tools/openstack-cli/).

3. Добавьте свойства для созданного образа:

   ```bash
   openstack image set --property x_sel_image_owner=Selectel <image>
   openstack image set --property hw_qemu_guest_agent=yes <image>
   ```

   Укажите `<image>` — ID или имя образа. Список можно посмотреть с помощью `openstack image list --private`

4. Опционально: после создания образа из диска [удалите облачный сервер](/cloud-servers/manage/delete-server.mdx).

<Formbricks />
