Подготовка виртуальной машины на основе Red Hat для Azure

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы ✔️ Универсальные масштабируемые наборы

В этой статье вы узнаете, как подготовить виртуальную машину Red Hat Enterprise Linux (RHEL) для использования в Azure. Версии RHEL, описанные в этой статье, — 6.X, 7.X и 8.X. Низкоуровневые оболочки для подготовки, о которых идет речь в этой статье, — это Hyper-V, Kernel-based Virtual Machine (KVM) и VMware. Подробнее о требованиях к участникам в программе Red Hat Cloud Access см. на веб-сайте Red Hat Cloud Access и странице запуска RHEL в Azure. Способы автоматизации создания образов RHEL см. в разделе Конструктор образов Azure.

Примечание.

Помните о версиях, которые являются окончанием жизни (EOL) и больше не поддерживаются Redhat. Загруженные образы, которые находятся в EOL или за пределами EOL, будут поддерживаться на основе разумных бизнес-усилий. Ссылка на жизненный цикл продукта Redhat

Диспетчер Hyper-V

В этом разделе показано, как подготовить виртуальную машину RHEL 6, RHEL 7 или RHEL 8 с помощью диспетчера Hyper-V.

Необходимые компоненты

В этом разделе предполагается, что вы уже получили ISO-файл с веб-сайта Red Hat и установили образ RHEL на виртуальный жесткий диск (VHD). Дополнительные сведения о том, как использовать диспетчер Hyper-V для установки образа операционной системы, см. в статье Установка Hyper-V и создание виртуальной машины.

Замечания по установке RHEL

  • Azure не поддерживает формат VHDX. В Azure поддерживается только формат фиксированного виртуального жесткого диска. Вы можете преобразовать диск в формат VHD с помощью диспетчера Hyper-V или командлета convert-vhd. Если вы используете VirtualBox, при создании диска выберите фиксированный размер вместо динамически выделяемого (по умолчанию).

  • Azure поддерживает виртуальные машины 1-го поколения (загрузка в BIOS) и 2-го поколения (загрузка в UEFI).

  • Максимально допустимый размер виртуального жесткого диска составляет 1023 ГБ.

  • Модуль ядра vfat должен быть включен в ядро.

  • Диспетчер логических томов (LVM) поддерживается и может использоваться для дисков операционной системы или дисков с данными на виртуальных машинах Azure. Однако в целом рекомендуется использовать стандартные секции на диске ОС, а не LVM. Это позволит избежать конфликта имен LVM при клонировании виртуальных машин, особенно если диск с OC может быть подключен к другой идентичной виртуальной машине в целях устранения неполадок. См. документацию по LVM и RAID .

  • Требуется поддержка ядра для подключения файловых систем UDF. При первой загрузке в Azure UDF-носитель, подключенный к гостевой машине, передает конфигурацию подготовки в виртуальную машину Linux. Агент Azure Linux должен иметь возможность подключать файловую систему UDF для считывания конфигурации и подготовки виртуальной машины — без этого подготовка к работе окажется невозможна.

  • Не настраивайте раздел swap на диске операционной системы. Дополнительные сведения описаны ниже.

  • Размер виртуальной памяти всех VHD в Azure должен быть округлен до 1 МБ. При конвертации диска в формате RAW в виртуальный жесткий диск убедитесь, что размер диска RAW в несколько раз превышает 1 МБ. Дополнительные сведения можно найти в инструкциях ниже. См. также дополнительные сведения в примечаниях по установке Linux.

Примечание.

Cloud-init >= 21.2 удаляет требование udf. Однако без включения модуля udf cdrom не будет подключаться во время подготовки, предотвращая применение пользовательских данных. Решением для этого является применение пользовательских данных с помощью пользовательских данных. Однако, в отличие от пользовательских данных, пользовательские данные не шифруются. https://cloudinit.readthedocs.io/en/latest/topics/format.html

RHEL 6 с использованием диспетчера Hyper-V

Важно!

Начиная с 30 ноября 2020 г. для ОС Red Hat Enterprise Linux 6 прекращается предоставление технического обслуживания. За этапом предоставления технического обслуживания следует этап, который называется расширенным жизненным циклом. Так как Red Hat Enterprise Linux 6 переходит из этапов полного или обслуживания, настоятельно рекомендуется обновить до Red Hat Enterprise Linux 7, 8 или 9. Если клиенты должны оставаться в Red Hat Enterprise Linux 6, рекомендуется добавить надстройку Red Hat Enterprise Linux Extended Life Cycle Support (ELS).

  1. В диспетчере Hyper-V выберите виртуальную машину.

  2. Щелкните Подключение , чтобы открыть окно консоли для виртуальной машины.

  3. В RHEL 6 NetworkManager может мешать работе агента Linux для Azure. Установите пакет, выполнив следующую команду:

    sudo rpm -e --nodeps NetworkManager
    
  4. Создайте или измените файл /etc/sysconfig/network, добавив следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Переместите (или удалите) правила udev, чтобы не создавать статические правила для интерфейса Ethernet. Эти правила приводят к появлению проблем при клонировании виртуальной машины в Microsoft Azure или Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

Примечание.

** При использовании ускоренной сети (AN) созданный искусственный интерфейс должен быть настроен для неуправляемого с помощью правила udev. Это не позволит NetworkManager назначить ему тот же IP-адрес, что и основной интерфейс.

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

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparentlybonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:

    sudo chkconfig network on
    
  2. Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  4. Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте файл /boot/grub/menu.lst в текстовом редакторе и укажите для ядра по умолчанию следующие параметры:

    console=ttyS0 earlyprintk=ttyS0
    

    Это также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки.

    В дополнение к вышесказанному мы рекомендуем удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

    Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр crashkernel. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.

  5. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл /etc/ssh/sshd_config, включив в него следующую строку:

    ClientAliveInterval 180
    
  6. Установите агент Linux для Azure, выполнив следующую команду:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    

    Установка пакета WALinuxAgent удаляет пакеты NetworkManager и NetworkManager-gnome, если они еще не удалены на шаге 3.

  7. Не создавайте пространство подкачки на диске ОС.

    Агент Linux для Azure может автоматически настраивать размер области подкачки с использованием локального диска ресурсов, подключенного к виртуальной машине после ее подготовки в Azure. Следует отметить, что локальный диск ресурсов является временным и должен быть очищен в случае отмены подготовки виртуальной машины. После установки агента Linux для Azure (см. предыдущий шаг) измените соответствующим образом следующие параметры в файле /etc/waagent.conf:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  8. Отмените регистрацию подписки (при необходимости), выполнив следующую команду:

    sudo subscription-manager unregister
    
  9. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

Примечание.

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

    sudo waagent -force -deprovision
    sudo export HISTSIZE=0
  1. В диспетчере Hyper-V выберите Действие>Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.

RHEL 7 с использованием диспетчера Hyper-V

  1. В диспетчере Hyper-V выберите виртуальную машину.

  2. Щелкните Подключение , чтобы открыть окно консоли для виртуальной машины.

  3. Создайте или измените файл /etc/sysconfig/network, добавив следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  5. Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:

    sudo systemctl enable network
    
  6. Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте /etc/default/grub текстовый редактор и измените GRUB_CMDLINE_LINUX параметр. Например:

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

    Это также гарантирует отправку всех сообщений консоли в первый последовательный порт и включить взаимодействие с последовательной консолью, что может помочь технической поддержке Azure в плане отладки. Также будут отключены новые соглашения об именовании RHEL 7 для сетевых карт.

    rhgb quiet crashkernel=auto
    

    Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр crashkernel. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.

  8. После внесения изменений в файл /etc/default/grub выполните следующую команду, чтобы повторно создать конфигурацию grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    Примечание.

    При отправке виртуальной машины с поддержкой UEFI команда для обновления GRUB имеет значение grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg.

  9. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл /etc/ssh/sshd_config , добавив в него следующую строку:

    ClientAliveInterval 180
    
  10. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. Установите агент Linux для Azure, cloud-init и другие необходимые служебные программы, выполнив следующую команду:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  12. Настройте cloud-init для обработки операций подготовки:

    1. Настройте waagent для cloud-init:
    sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=auto/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    

    Примечание.

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, задайте Provisioning.Agent=disabled для конфигурации /etc/waagent.conf .

    1. Настройте подключения:
    sudo echo "Adding mounts and disk_setup to init stage"
    sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    1. Настройте источник данных Azure:
    sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
    sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    EOF
    
    1. Удалите существующие файл подкачки, если он настроен:
    if [[ -f /mnt/resource/swapfile ]]; then
    echo "Removing swapfile" #RHEL uses a swapfile by default
    swapoff /mnt/resource/swapfile
    rm /mnt/resource/swapfile -f
    fi
    
    1. Настройте ведение журнала cloud-init:
    sudo echo "Add console log file"
    sudo cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
    
    # This tells cloud-init to redirect its stdout and stderr to
    # 'tee -a /var/log/cloud-init-output.log' so the user can see output
    # there without needing to look on the console.
    output: {all: '| tee -a /var/log/cloud-init-output.log'}
    EOF
    
    
  13. Переключите конфигурацию. Не создавайте пространство подкачки на диске ОС.

    Ранее агент Linux Azure использовался для автоматической настройки пространства буфера с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки виртуальной машины в Azure. Однако теперь это обрабатывается cloud-init, не следует использовать агент Linux для форматирования диска ресурсов, создающего файл буфера, измените следующие параметры соответствующим /etc/waagent.conf образом:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    

    Если вы хотите подключить, отформатировать и создать переключение, можно:

    • Передать его в конфигурации cloud-init при каждом создании виртуальной машины с помощью customdata. Рекомендуем использовать этот метод.

    • Использовать директиву cloud-init, встроенную в образ, которая будет выполнять эту операцию при каждом создании виртуальной машины.

      sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
      sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
      #cloud-config
      # Generated by Azure cloud image build
      disk_setup:
        ephemeral0:
          table_type: mbr
          layout: [66, [33, 82]]
          overwrite: True
      fs_setup:
        - device: ephemeral0.1
          filesystem: ext4
        - device: ephemeral0.2
          filesystem: swap
      mounts:
        - ["ephemeral0.1", "/mnt/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  14. Чтобы отменить регистрацию подписки, выполните следующую команду:

    sudo subscription-manager unregister
    
  15. Отзыв

    Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

    Внимание

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки. Выполнение команды waagent -force -deprovision+user сделает исходный компьютер непригодным для использования. Этот шаг предназначен только для создания обобщенного образа.

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  16. В диспетчере Hyper-V выберите Действие>Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.

RHEL 8 с использованием диспетчера Hyper-V

  1. В диспетчере Hyper-V выберите виртуальную машину.

  2. Щелкните Подключение , чтобы открыть окно консоли для виртуальной машины.

  3. Убедитесь, что служба диспетчера сети запускается во время загрузки, выполнив следующую команду:

    sudo systemctl enable NetworkManager.service
    
  4. Настройте сетевой интерфейс на автоматический запуск при загрузке и использование DHCP:

    sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
    
  5. Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  6. Измените строку загрузки ядра в конфигурации grub, включив дополнительные параметры ядра для Azure и активировав последовательную консоль.

    1. Удалите текущие параметры GRUB:
    sudo grub2-editenv - unset kernelopts
    
    1. Измените /etc/default/grub текст в текстовом редакторе и добавьте следующие параметры:
    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

    Это также гарантирует отправку всех сообщений консоли в первый последовательный порт и включить взаимодействие с последовательной консолью, что может помочь технической поддержке Azure в плане отладки. Также будут отключены новые соглашения об именовании для сетевых карт.

    1. Кроме того, мы рекомендуем удалить следующие параметры:
    rhgb quiet crashkernel=auto
    

    Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр crashkernel. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.

  7. После внесения изменений в файл /etc/default/grubвыполните следующую команду, чтобы повторно создать конфигурацию grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    Для виртуальной машины с включенной UEFI выполните следующую команду:

    sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    
  8. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл /etc/ssh/sshd_config , добавив в него следующую строку:

    ClientAliveInterval 180
    
  9. Установите агент Linux для Azure, cloud-init и другие необходимые служебные программы, выполнив следующую команду:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  10. Настройте cloud-init для обработки операций подготовки:

    1. Настройте waagent для cloud-init:
    sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    

    Примечание.

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, задайте Provisioning.Agent=disabled для конфигурации /etc/waagent.conf .

    1. Настройте подключения:
    sudo echo "Adding mounts and disk_setup to init stage"
    sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    1. Настройте источник данных Azure:
    sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
    sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    EOF
    
    1. Удалите существующие файл подкачки, если он настроен:
    if [[ -f /mnt/resource/swapfile ]]; then
    echo "Removing swapfile" #RHEL uses a swapfile by defaul
    swapoff /mnt/resource/swapfile
    rm /mnt/resource/swapfile -f
    fi
    
    1. Настройте ведение журнала cloud-init:
    sudo echo "Add console log file"
    sudo cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
    
    # This tells cloud-init to redirect its stdout and stderr to
    # 'tee -a /var/log/cloud-init-output.log' so the user can see output
    # there without needing to look on the console.
    output: {all: '| tee -a /var/log/cloud-init-output.log'}
    EOF
    
  11. Конфигурация переключения не создает место на диске операционной системы.

    Ранее агент Linux Azure использовался для автоматической настройки пространства буфера с помощью локального диска ресурсов, подключенного к виртуальной машине после подготовки виртуальной машины в Azure. Однако теперь это обрабатывается cloud-init, не следует использовать агент Linux для форматирования диска ресурсов, создающего файл буфера, измените следующие параметры соответствующим /etc/waagent.conf образом:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    
    • Передать его в конфигурации cloud-init при каждом создании виртуальной машины с помощью customdata. Рекомендуем использовать этот метод.

    • Использовать директиву cloud-init, встроенную в образ, которая будет выполнять эту операцию при каждом создании виртуальной машины.

      sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
      sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
      #cloud-config
      # Generated by Azure cloud image build
      disk_setup:
        ephemeral0:
          table_type: mbr
          layout: [66, [33, 82]]
          overwrite: True
      fs_setup:
        - device: ephemeral0.1
          filesystem: ext4
        - device: ephemeral0.2
          filesystem: swap
      mounts:
        - ["ephemeral0.1", "/mnt/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
      EOF
      
  12. Чтобы отменить регистрацию подписки, выполните следующую команду:

    sudo subscription-manager unregister
    
  13. Отзыв

    Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo sudo rm -f /var/log/waagent.log
    sudo export HISTSIZE=0
    

    Внимание

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки. Выполнение команды waagent -force -deprovision+user сделает исходный компьютер непригодным для использования. Этот шаг предназначен только для создания обобщенного образа.

  14. В диспетчере Hyper-V выберите Действие>Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.

KVM

В этом разделе показано, как использовать KVM для подготовки дистрибутива RHEL 6 или RHEL 7 к передаче в Azure.

RHEL 6 с использованием KVM

Важно!

Начиная с 30 ноября 2020 г. для ОС Red Hat Enterprise Linux 6 прекращается предоставление технического обслуживания. За этапом предоставления технического обслуживания следует этап, который называется расширенным жизненным циклом. Так как Red Hat Enterprise Linux 6 переходит из этапов полного или обслуживания, настоятельно рекомендуется обновить до Red Hat Enterprise Linux 7, 8 или 9. Если клиенты должны оставаться в Red Hat Enterprise Linux 6, рекомендуется добавить надстройку Red Hat Enterprise Linux Extended Life Cycle Support (ELS).

  1. Скачайте образ KVM RHEL 6 с веб-сайта Red Hat.

  2. Задайте пароль пользователя root.

    Создайте зашифрованный пароль и скопируйте результат выполнения команды:

    sudo openssl passwd -1 changeme
    

    Установите корневой пароль с помощью Guestfish:

    sudo guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    Во втором поле привилегированного пользователя замените "!!" на зашифрованный пароль.

  3. Создайте виртуальную машину в KVM из образа qcow2. Укажите тип диска qcow2 и задайте для модели устройства интерфейса виртуальной сети значение virtio. Затем запустите виртуальную машину и войдите в систему как привилегированный пользователь.

  4. Создайте или измените файл /etc/sysconfig/network, добавив следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Переместите (или удалите) правила udev, чтобы не создавать статические правила для интерфейса Ethernet. Эти правила приводят к появлению проблем при клонировании виртуальной машины в Azure или Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

Примечание.

** При использовании ускоренной сети (AN) созданный искусственный интерфейс должен быть настроен для неуправляемого с помощью правила udev. Это не позволит NetworkManager назначить ему тот же IP-адрес, что и основной интерфейс.

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

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparently bonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:

    sudo chkconfig network on
    
  2. Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте файл /boot/grub/menu.lst в текстовом редакторе и укажите для ядра по умолчанию следующие параметры:

    console=ttyS0 earlyprintk=ttyS0
    

    Это также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки.

    В дополнение к вышесказанному мы рекомендуем удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

    Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр crashkernel. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.

  4. Добавьте модули Hyper-V в initramfs.

    Измените файл /etc/dracut.conf, добавив следующее содержимое:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Повторно создайте initramfs:

    sudo dracut -f -v
    
  5. Удаление cloud-init:

    sudo yum remove cloud-init
    
  6. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки:

    sudo chkconfig sshd on
    

    Измените файл /etc/ssh/sshd_config, включив в него следующие строки:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  7. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  8. Установите агент Linux для Azure, выполнив следующую команду:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  9. Агент Linux для Azure может автоматически настраивать размер области подкачки с использованием локального диска ресурсов, подключенного к виртуальной машине после ее подготовки в Azure. Следует отметить, что локальный диск ресурсов является временным и должен быть очищен в случае отмене подготовки виртуальной машины. После установки агента Linux для Azure (см. предыдущий шаг) измените соответствующим образом следующие параметры в файле /etc/waagent.conf:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  10. Отмените регистрацию подписки (при необходимости), выполнив следующую команду:

    sudo subscription-manager unregister
    
  11. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

    Примечание.

    Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите шаг отмены подготовки

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  12. Остановите работу виртуальной машины в KVM.

  13. Конвертируйте образ qcow2 в формат VHD.

    Примечание.

    Существует известная ошибка в версиях >qemu-img =2.2.1, что приводит к неправильно отформатированным VHD. Эта проблема устранена в QEMU версии 2.6. Рекомендуется использовать qemu-img версии 2.2.0 или более ранних версий. Либо выполните обновление до версии 2.6 или выше. Справочные материалы: https://bugs.launchpad.net/qemu/+bug/1490611.

    Для начала конвертируйте образ в формат RAW:

    sudo qemu-img convert -f qcow2 -O raw rhel-6.9.qcow2 rhel-6.9.raw
    

    Убедитесь, что размер образа в формате RAW соответствует 1 МБ. Если это не так, округлите размер до 1 МБ:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    Конвертируйте диск в формате RAW в виртуальный жесткий диск фиксированного размера:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    Или с помощью qemu версии 2.6 или выше добавьте параметр force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
    

RHEL 7 с использованием KVM

  1. Скачайте образ KVM RHEL 7 с веб-сайта Red Hat. В этой процедуре в качестве примера используется RHEL 7.

  2. Задайте пароль пользователя root.

    Создайте зашифрованный пароль и скопируйте результат выполнения команды:

    sudo openssl passwd -1 changeme
    

    Установите корневой пароль с помощью Guestfish:

    sudo  guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    Во втором поле привилегированного пользователя замените "!!" на зашифрованный пароль.

  3. Создайте виртуальную машину в KVM из образа qcow2. Укажите тип диска qcow2 и задайте для модели устройства интерфейса виртуальной сети значение virtio. Затем запустите виртуальную машину и войдите в систему как привилегированный пользователь.

  4. Создайте или измените файл /etc/sysconfig/network, добавив следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  6. Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:

    sudo systemctl enable network
    
  7. Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  8. Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте /etc/default/grub текстовый редактор и измените GRUB_CMDLINE_LINUX параметр. Например:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Эта команда также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки. Также будут отключены новые соглашения об именовании RHEL 7 для сетевых карт. В дополнение к вышесказанному мы рекомендуем удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

    Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр crashkernel. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.

  9. После внесения изменений в файл /etc/default/grubвыполните следующую команду, чтобы повторно создать конфигурацию grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  10. Добавьте модули Hyper-V в initramfs.

    Измените файл /etc/dracut.conf , добавив в него следующее содержимое:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Повторно создайте initramfs:

    sudo dracut -f -v
    
  11. Удаление cloud-init:

    sudo yum remove cloud-init
    
  12. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки:

    sudo systemctl enable sshd
    

    Измените файл /etc/ssh/sshd_config, включив в него следующие строки:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  14. Установите агент Linux для Azure, выполнив следующую команду:

    sudo yum install WALinuxAgent
    

    Включите службу waagent:

    sudo systemctl enable waagent.service
    
  15. Установите cloud-init. Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 12, "Установка cloud-init для выполнения подготовки".

  16. Настройка подкачки

    Не создавайте пространство подкачки на диске ОС. Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 13, "Настройка подкачки".

  17. Отмените регистрацию подписки (при необходимости), выполнив следующую команду:

    sudo subscription-manager unregister
    
  18. Отзыв

    Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 15, "Отмена подготовки".

  19. Остановите работу виртуальной машины в KVM.

  20. Конвертируйте образ qcow2 в формат VHD.

    Примечание.

    Существует известная ошибка в версиях >qemu-img =2.2.1, что приводит к неправильно отформатированным VHD. Эта проблема устранена в QEMU версии 2.6. Рекомендуется использовать qemu-img версии 2.2.0 или более ранних версий. Либо выполните обновление до версии 2.6 или выше. Справочные материалы: https://bugs.launchpad.net/qemu/+bug/1490611.

    Для начала конвертируйте образ в формат RAW:

    sudo qemu-img convert -f qcow2 -O raw rhel-7.4.qcow2 rhel-7.4.raw
    

    Убедитесь, что размер образа в формате RAW соответствует 1 МБ. Если это не так, округлите размер до 1 МБ:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    Конвертируйте диск в формате RAW в виртуальный жесткий диск фиксированного размера:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    Или с помощью qemu версии 2.6 или выше добавьте параметр force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
    

VMware

В этом разделе показано, как подготовить дистрибутив RHEL 6 или RHEL 7 из VMware.

Необходимые компоненты

В этом разделе предполагается, что вы уже установили виртуальную машину RHEL в VMWare. Дополнительные сведения об установке операционной системы на виртуальной машине VMware см. здесь.

  • При установке операционной системы Linux мы рекомендуем использовать стандартные разделы, а не LVM (который зачастую используется по умолчанию при установке). Это позволит избежать конфликта имен LVM при клонировании виртуальных машин, особенно если диск с OC может быть подключен к другой идентичной виртуальной машине в целях устранения неполадок. При желании на дисках с данными можно использовать LVM или RAID.
  • Не настраивайте раздел swap на диске операционной системы. Вы можете настроить агент Linux для создания файла подкачки на временном диске с ресурсами. Дополнительные сведения приведены ниже.
  • При создании виртуального жесткого диска выберите параметр Store virtual disk as a single file(Сохранять виртуальный диск как один файл).

RHEL 6 с использованием VMware

Важно!

Начиная с 30 ноября 2020 г. для ОС Red Hat Enterprise Linux 6 прекращается предоставление технического обслуживания. За этапом предоставления технического обслуживания следует этап, который называется расширенным жизненным циклом. Так как Red Hat Enterprise Linux 6 переходит из этапов полного или обслуживания, настоятельно рекомендуется обновить до Red Hat Enterprise Linux 7 или 8 или 9. Если клиенты вынуждены продолжить работу на ОС Red Hat Enterprise Linux 6, рекомендуется добавить надстройку по поддержке расширенного жизненного цикла (ELS) Red Hat Enterprise Linux.

  1. В RHEL 6 NetworkManager может мешать работе агента Linux для Azure. Установите пакет, выполнив следующую команду:

    sudo rpm -e --nodeps NetworkManager
    
  2. Создайте файл с именем network в каталоге /etc/sysconfig/. Файл должен содержать следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  3. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  4. Переместите (или удалите) правила udev, чтобы не создавать статические правила для интерфейса Ethernet. Эти правила приводят к появлению проблем при клонировании виртуальной машины в Azure или Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

Примечание.

** При использовании ускоренной сети (AN) созданный искусственный интерфейс должен быть настроен для неуправляемого с помощью правила udev. Это не позволит NetworkManager назначить ему тот же IP-адрес, что и основной интерфейс.

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

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparently bonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:

    sudo chkconfig network on
    
  2. Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  4. Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте /etc/default/grub текстовый редактор и измените GRUB_CMDLINE_LINUX параметр. Например:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
    

    Это также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки. В дополнение к вышесказанному мы рекомендуем удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

    Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр crashkernel. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.

  5. Добавьте модули Hyper-V в initramfs.

    Измените файл /etc/dracut.conf, добавив следующее содержимое:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Повторно создайте initramfs:

    sudo dracut -f -v
    
  6. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл /etc/ssh/sshd_config , добавив в него следующую строку:

    ClientAliveInterval 180
    
  7. Установите агент Linux для Azure, выполнив следующую команду:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  8. Не создавайте пространство подкачки на диске ОС.

    Агент Linux для Azure может автоматически настраивать размер области подкачки с использованием локального диска ресурсов, подключенного к виртуальной машине после ее подготовки в Azure. Следует отметить, что локальный диск ресурсов является временным и должен быть очищен в случае отмене подготовки виртуальной машины. После установки агента Linux для Azure (см. предыдущий шаг) измените соответствующим образом следующие параметры в файле /etc/waagent.conf:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  9. Отмените регистрацию подписки (при необходимости), выполнив следующую команду:

    sudo subscription-manager unregister
    
  10. Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:

    Примечание.

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

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  11. Завершите работу виртуальной машины и конвертируйте файл VMDK в формат VHD.

    Примечание.

    Существует известная ошибка в версиях >qemu-img =2.2.1, что приводит к неправильно отформатированным VHD. Эта проблема устранена в QEMU версии 2.6. Рекомендуется использовать qemu-img версии 2.2.0 или более ранних версий. Либо выполните обновление до версии 2.6 или выше. Справочные материалы: https://bugs.launchpad.net/qemu/+bug/1490611.

    Для начала конвертируйте образ в формат RAW:

    sudo qemu-img convert -f vmdk -O raw rhel-6.9.vmdk rhel-6.9.raw
    

    Убедитесь, что размер образа в формате RAW соответствует 1 МБ. Если это не так, округлите размер до 1 МБ:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    Конвертируйте диск в формате RAW в виртуальный жесткий диск фиксированного размера:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    Или с помощью qemu версии 2.6 или выше добавьте параметр force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
    

RHEL 7 с использованием VMware

  1. Создайте или измените файл /etc/sysconfig/network, добавив следующий текст:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  2. Создайте или измените файл /etc/sysconfig/network-scripts/ifcfg-eth0, добавив следующий текст:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  3. Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:

    sudo systemctl enable network
    
  4. Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  5. Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте /etc/default/grub текстовый редактор и измените GRUB_CMDLINE_LINUX параметр. Например:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Это также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки. Также будут отключены новые соглашения об именовании RHEL 7 для сетевых карт. В дополнение к вышесказанному мы рекомендуем удалить следующие параметры:

    rhgb quiet crashkernel=auto
    

    Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр crashkernel. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.

  6. После внесения изменений в файл /etc/default/grubвыполните следующую команду, чтобы повторно создать конфигурацию grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  7. Добавьте модули Hyper-V в initramfs.

    Измените файл /etc/dracut.conf, добавив в него следующее содержимое:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Повторно создайте initramfs:

    sudo dracut -f -v
    
  8. Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Обычно этот параметр задан по умолчанию. Измените файл /etc/ssh/sshd_config , добавив в него следующую строку:

    ClientAliveInterval 180
    
  9. Пакет WALinuxAgent WALinuxAgent-<version> был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  10. Установите агент Linux для Azure, выполнив следующую команду:

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent.service
    
  11. Установите cloud-init.

    Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 12, "Установка cloud-init для выполнения подготовки".

  12. Настройка подкачки

    Не создавайте пространство подкачки на диске ОС. Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 13, "Настройка подкачки".

  13. Чтобы отменить регистрацию подписки, выполните следующую команду:

    sudo subscription-manager unregister
    
  14. Отзыв

    Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 15, "Отмена подготовки".

  15. Завершите работу виртуальной машины и преобразуйте файл VMDK в формат VHD.

    Примечание.

    Существует известная ошибка в версиях >qemu-img =2.2.1, что приводит к неправильно отформатированным VHD. Эта проблема устранена в QEMU версии 2.6. Рекомендуется использовать qemu-img версии 2.2.0 или более ранних версий. Либо выполните обновление до версии 2.6 или выше. Справочные материалы: https://bugs.launchpad.net/qemu/+bug/1490611.

    Для начала конвертируйте образ в формат RAW:

    sudo qemu-img convert -f vmdk -O raw rhel-7.4.vmdk rhel-7.4.raw
    

    Убедитесь, что размер образа в формате RAW соответствует 1 МБ. Если это не так, округлите размер до 1 МБ:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    Конвертируйте диск в формате RAW в виртуальный жесткий диск фиксированного размера:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    Или с помощью qemu версии 2.6 или выше добавьте параметр force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
    

Файл kickstart

В этом разделе показано, как подготовить дистрибутив RHEL 7 из ISO с помощью файла kickstart.

RHEL 7 из файла kickstart

  1. Создайте файл kickstart, содержащий следующее содержимое и сохраните файл. Дополнительные сведения об установке kickstart см. здесь.

    # Kickstart for provisioning a RHEL 7 Azure VM
    
    # System authorization information
      auth --enableshadow --passalgo=sha512
    
    # Use graphical install
    text
    
    # Don't run the Setup Agent on first boot
    firstboot --disable
    
    # Keyboard layouts
    keyboard --vckeymap=us --xlayouts='us'
    
    # System language
    lang en_US.UTF-8
    
    # Network information
    network  --bootproto=dhcp
    
    # Root password
    rootpw --plaintext "to_be_disabled"
    
    # System services
    services --enabled="sshd,waagent,NetworkManager"
    
    # System timezone
    timezone Etc/UTC --isUtc --ntpservers 0.rhel.pool.ntp.org,1.rhel.pool.ntp.org,2.rhel.pool.ntp.org,3.rhel.pool.ntp.org
    
    # Partition clearing information
    clearpart --all --initlabel
    
    # Clear the MBR
    zerombr
    
    # Disk partitioning information
    part /boot --fstype="xfs" --size=500
    part / --fstyp="xfs" --size=1 --grow --asprimary
    
    # System bootloader configuration
    bootloader --location=mbr
    
    # Firewall configuration
    firewall --disabled
    
    # Enable SELinux
    selinux --enforcing
    
    # Don't configure X
    skipx
    
    # Power down the machine after install
    poweroff
    
    %packages
    @base
    @console-internet
    chrony
    sudo
    parted
    -dracut-config-rescue
    
    %end
    
    %post --log=/var/log/anaconda/post-install.log
    
    #!/bin/bash
    
    # Register Red Hat Subscription
    subscription-manager register --username=XXX --password=XXX --auto-attach --force
    
    # Install latest repo update
    yum update -y
    
    # Enable extras repo
    subscription-manager repos --enable=rhel-7-server-extras-rpms
    
    # Install WALinuxAgent
    yum install -y WALinuxAgent
    
    # Unregister Red Hat subscription
    subscription-manager unregister
    
    # Enable waaagent at boot-up
    systemctl enable waagent
    
    # Install cloud-init
    yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    # Configure waagent for cloud-init
    sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    
    echo "Adding mounts and disk_setup to init stage"
    sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    # Disable the root account
    usermod root -p '!!'
    
    # Configure swap using cloud-init
    echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
    #cloud-config
    # Generated by Azure cloud image build
    disk_setup:
    ephemeral0:
        table_type: mbr
        layout: [66, [33, 82]]
        overwrite: True
    fs_setup:
    - device: ephemeral0.1
        filesystem: ext4
    - device: ephemeral0.2
        filesystem: swap
    mounts:
    - ["ephemeral0.1", "/mnt"]
    - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
    EOF
    
    # Set the cmdline
    sed -i 's/^\(GRUB_CMDLINE_LINUX\)=".*"$/\1="console=tty1 console=ttyS0 earlyprintk=ttyS0"/g' /etc/default/grub
    
    # Enable SSH keepalive
    sed -i 's/^#\(ClientAliveInterval\).*$/\1 180/g' /etc/ssh/sshd_config
    
    # Build the grub cfg
    grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # Configure network
    cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    EOF
    
    # Deprovision and prepare for Azure if you are creating a generalized image
    sudo cloud-init clean --logs --seed
    sudo rm -rf /var/lib/cloud/
    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    
    sudo waagent -force -deprovision+user
    rm -f ~/.bash_history
    export HISTSIZE=0
    
    %end
    
  2. Поместите файл kickstart в место, доступное для системы установки.

  3. Создайте новую виртуальную машину в диспетчере Hyper-V. На странице Подключить виртуальный жесткий диск выберите параметр Подключить виртуальный жесткий диск позднее и выполните инструкции в мастере создания виртуальной машины.

  4. Откройте параметры виртуальной машины:

    1. Подключите новый виртуальный жесткий диск к виртуальной машине. Выберите параметры VHD Format (Формат VHD) и Фиксированный размер.

    2. Подключите установочный ISO-образ к DVD-дисководу.

    3. В BIOS выберите загрузку с компакт-диска.

  5. Запустите виртуальную машину. Когда отобразится руководство по установке, нажмите клавишу TAB , чтобы настроить параметры загрузки.

  6. Введите inst.ks=<the location of the kickstart file> в конце параметров загрузки и нажмите клавишу ВВОД.

  7. Дождитесь завершения процесса установки. По окончании процесса виртуальная машина завершит работу автоматически. Виртуальный жесткий диск Linux готов к передаче в Azure.

Известные проблемы

Не удалось включить драйвер Hyper-V в начальный электронный диск при использовании низкоуровневой оболочки Hyper V

В некоторых случаях установщики Linux могут не включать драйверы для Hyper-V в начальный электронный диск (initrd или initramfs), если только не обнаружат, что он работает в среде Hyper-V.

Если для подготовки образа Linux используется другая система виртуализации (например, VirtualBox, Xen и т. д.), вам может потребоваться выполнить повторную сборку initrd, чтобы убедиться, что на начальном электронном диске доступны по крайней мере модули ядра hv_vmbus и hv_storvsc. Это известная проблема по крайней мере в системах на основе предшествующего дистрибутива Red Hat.

Чтобы устранить эту проблему, необходимо добавить модули Hyper-V в initramfs и выполнить повторную сборку:

Измените файл /etc/dracut.conf, добавив следующее содержимое:

add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "

Повторно создайте initramfs:

sudo dracut -f -v

Дополнительные сведения см. в описании повторного создания initramfs.

Следующие шаги

  • Теперь виртуальный жесткий диск Red Hat Enterprise Linux можно использовать для создания новых виртуальных машин Azure. Если вы отправляете VHD-файл в Azure впервые, см. раздел Вариант 1. Передача VHD.
  • Чтобы получить дополнительные сведения о низкоуровневых оболочках, сертифицированных для запуска Red Hat Enterprise Linux, посетите веб-сайт Red Hat.
  • Чтобы узнать больше об использовании готовых образов RHEL BYOS, перейдите на страницу документации по BYOS.