Подготовка виртуальной машины на основе 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).
В диспетчере Hyper-V выберите виртуальную машину.
Щелкните Подключение , чтобы открыть окно консоли для виртуальной машины.
В RHEL 6 NetworkManager может мешать работе агента Linux для Azure. Установите пакет, выполнив следующую команду:
sudo rpm -e --nodeps NetworkManager
Создайте или измените файл
/etc/sysconfig/network
, добавив следующий текст:NETWORKING=yes HOSTNAME=localhost.localdomain
Создайте или измените файл
/etc/sysconfig/network-scripts/ifcfg-eth0
, добавив следующий текст:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
Переместите (или удалите) правила 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
Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:
sudo chkconfig network on
Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Пакет WALinuxAgent
WALinuxAgent-<version>
был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте файл
/boot/grub/menu.lst
в текстовом редакторе и укажите для ядра по умолчанию следующие параметры:console=ttyS0 earlyprintk=ttyS0
Это также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки.
В дополнение к вышесказанному мы рекомендуем удалить следующие параметры:
rhgb quiet crashkernel=auto
Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр
crashkernel
. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл /etc/ssh/sshd_config, включив в него следующую строку:
ClientAliveInterval 180
Установите агент Linux для Azure, выполнив следующую команду:
sudo yum install WALinuxAgent sudo chkconfig waagent on
Установка пакета WALinuxAgent удаляет пакеты NetworkManager и NetworkManager-gnome, если они еще не удалены на шаге 3.
Не создавайте пространство подкачки на диске ОС.
Агент 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.
Отмените регистрацию подписки (при необходимости), выполнив следующую команду:
sudo subscription-manager unregister
Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в Azure:
Примечание.
Если вы переносите определенную виртуальную машину и не хотите создавать обобщенный образ, пропустите этап отмены подготовки.
sudo waagent -force -deprovision
sudo export HISTSIZE=0
- В диспетчере Hyper-V выберите Действие>Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.
RHEL 7 с использованием диспетчера Hyper-V
В диспетчере Hyper-V выберите виртуальную машину.
Щелкните Подключение , чтобы открыть окно консоли для виртуальной машины.
Создайте или измените файл
/etc/sysconfig/network
, добавив следующий текст:NETWORKING=yes HOSTNAME=localhost.localdomain
Создайте или измените файл
/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
Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:
sudo systemctl enable network
Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Измените строку загрузки ядра в конфигурации 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Б и более. Это может оказаться проблемой для виртуальных машин небольшого размера.После внесения изменений в файл
/etc/default/grub
выполните следующую команду, чтобы повторно создать конфигурацию grub:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Примечание.
При отправке виртуальной машины с поддержкой UEFI команда для обновления GRUB имеет значение
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
.Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл
/etc/ssh/sshd_config
, добавив в него следующую строку:ClientAliveInterval 180
Пакет WALinuxAgent
WALinuxAgent-<version>
был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
Установите агент 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
Настройте cloud-init для обработки операций подготовки:
- Настройте 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
.- Настройте подключения:
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
- Настройте источник данных 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
- Удалите существующие файл подкачки, если он настроен:
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
- Настройте ведение журнала 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
Переключите конфигурацию. Не создавайте пространство подкачки на диске ОС.
Ранее агент 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
Чтобы отменить регистрацию подписки, выполните следующую команду:
sudo subscription-manager unregister
Отзыв
Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в 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
В диспетчере Hyper-V выберите Действие>Завершение работы. Виртуальный жесткий диск Linux готов к передаче в Azure.
RHEL 8 с использованием диспетчера Hyper-V
В диспетчере Hyper-V выберите виртуальную машину.
Щелкните Подключение , чтобы открыть окно консоли для виртуальной машины.
Убедитесь, что служба диспетчера сети запускается во время загрузки, выполнив следующую команду:
sudo systemctl enable NetworkManager.service
Настройте сетевой интерфейс на автоматический запуск при загрузке и использование DHCP:
sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Измените строку загрузки ядра в конфигурации grub, включив дополнительные параметры ядра для Azure и активировав последовательную консоль.
- Удалите текущие параметры GRUB:
sudo grub2-editenv - unset kernelopts
- Измените
/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 в плане отладки. Также будут отключены новые соглашения об именовании для сетевых карт.
- Кроме того, мы рекомендуем удалить следующие параметры:
rhgb quiet crashkernel=auto
Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр
crashkernel
. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.После внесения изменений в файл
/etc/default/grub
выполните следующую команду, чтобы повторно создать конфигурацию grub:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Для виртуальной машины с включенной UEFI выполните следующую команду:
sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл
/etc/ssh/sshd_config
, добавив в него следующую строку:ClientAliveInterval 180
Установите агент 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
Настройте cloud-init для обработки операций подготовки:
- Настройте 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
.- Настройте подключения:
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
- Настройте источник данных 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
- Удалите существующие файл подкачки, если он настроен:
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
- Настройте ведение журнала 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
Конфигурация переключения не создает место на диске операционной системы.
Ранее агент 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
Чтобы отменить регистрацию подписки, выполните следующую команду:
sudo subscription-manager unregister
Отзыв
Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в 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
сделает исходный компьютер непригодным для использования. Этот шаг предназначен только для создания обобщенного образа.В диспетчере 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).
Скачайте образ KVM RHEL 6 с веб-сайта Red Hat.
Задайте пароль пользователя 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
Во втором поле привилегированного пользователя замените "!!" на зашифрованный пароль.
Создайте виртуальную машину в KVM из образа qcow2. Укажите тип диска qcow2 и задайте для модели устройства интерфейса виртуальной сети значение virtio. Затем запустите виртуальную машину и войдите в систему как привилегированный пользователь.
Создайте или измените файл
/etc/sysconfig/network
, добавив следующий текст:NETWORKING=yes HOSTNAME=localhost.localdomain
Создайте или измените файл
/etc/sysconfig/network-scripts/ifcfg-eth0
, добавив следующий текст:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
Переместите (или удалите) правила 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
Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:
sudo chkconfig network on
Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте файл
/boot/grub/menu.lst
в текстовом редакторе и укажите для ядра по умолчанию следующие параметры:console=ttyS0 earlyprintk=ttyS0
Это также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки.
В дополнение к вышесказанному мы рекомендуем удалить следующие параметры:
rhgb quiet crashkernel=auto
Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр
crashkernel
. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.Добавьте модули Hyper-V в initramfs.
Измените файл
/etc/dracut.conf
, добавив следующее содержимое:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Повторно создайте initramfs:
sudo dracut -f -v
Удаление cloud-init:
sudo yum remove cloud-init
Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки:
sudo chkconfig sshd on
Измените файл /etc/ssh/sshd_config, включив в него следующие строки:
PasswordAuthentication yes ClientAliveInterval 180
Пакет WALinuxAgent
WALinuxAgent-<version>
был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
Установите агент Linux для Azure, выполнив следующую команду:
sudo yum install WALinuxAgent sudo chkconfig waagent on
Агент 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.
Отмените регистрацию подписки (при необходимости), выполнив следующую команду:
sudo subscription-manager unregister
Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в 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
Остановите работу виртуальной машины в KVM.
Конвертируйте образ 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
Скачайте образ KVM RHEL 7 с веб-сайта Red Hat. В этой процедуре в качестве примера используется RHEL 7.
Задайте пароль пользователя 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
Во втором поле привилегированного пользователя замените "!!" на зашифрованный пароль.
Создайте виртуальную машину в KVM из образа qcow2. Укажите тип диска qcow2 и задайте для модели устройства интерфейса виртуальной сети значение virtio. Затем запустите виртуальную машину и войдите в систему как привилегированный пользователь.
Создайте или измените файл
/etc/sysconfig/network
, добавив следующий текст:NETWORKING=yes HOSTNAME=localhost.localdomain
Создайте или измените файл
/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
Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:
sudo systemctl enable network
Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Измените строку загрузки ядра в конфигурации 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Б и более. Это может оказаться проблемой для виртуальных машин небольшого размера.После внесения изменений в файл
/etc/default/grub
выполните следующую команду, чтобы повторно создать конфигурацию grub:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Добавьте модули Hyper-V в initramfs.
Измените файл
/etc/dracut.conf
, добавив в него следующее содержимое:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Повторно создайте initramfs:
sudo dracut -f -v
Удаление cloud-init:
sudo yum remove cloud-init
Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки:
sudo systemctl enable sshd
Измените файл /etc/ssh/sshd_config, включив в него следующие строки:
PasswordAuthentication yes ClientAliveInterval 180
Пакет WALinuxAgent
WALinuxAgent-<version>
был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
Установите агент Linux для Azure, выполнив следующую команду:
sudo yum install WALinuxAgent
Включите службу waagent:
sudo systemctl enable waagent.service
Установите cloud-init. Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 12, "Установка cloud-init для выполнения подготовки".
Настройка подкачки
Не создавайте пространство подкачки на диске ОС. Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 13, "Настройка подкачки".
Отмените регистрацию подписки (при необходимости), выполнив следующую команду:
sudo subscription-manager unregister
Отзыв
Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 15, "Отмена подготовки".
Остановите работу виртуальной машины в KVM.
Конвертируйте образ 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.
В RHEL 6 NetworkManager может мешать работе агента Linux для Azure. Установите пакет, выполнив следующую команду:
sudo rpm -e --nodeps NetworkManager
Создайте файл с именем network в каталоге /etc/sysconfig/. Файл должен содержать следующий текст:
NETWORKING=yes HOSTNAME=localhost.localdomain
Создайте или измените файл
/etc/sysconfig/network-scripts/ifcfg-eth0
, добавив следующий текст:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
Переместите (или удалите) правила 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
Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:
sudo chkconfig network on
Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Пакет WALinuxAgent
WALinuxAgent-<version>
был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
Измените строку загрузки ядра в конфигурации grub, чтобы включить дополнительные параметры ядра для Azure. Для этого откройте
/etc/default/grub
текстовый редактор и изменитеGRUB_CMDLINE_LINUX
параметр. Например:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
Это также гарантирует отправку всех сообщений консоли на первый последовательный порт, что может помочь технической поддержке Azure в плане отладки. В дополнение к вышесказанному мы рекомендуем удалить следующие параметры:
rhgb quiet crashkernel=auto
Графические и тихие загрузки не полезны в облачной среде, где мы хотим, чтобы все журналы были отправлены на последовательный порт. При желании можно оставить параметр
crashkernel
. Обратите внимание, что этот параметр сокращает объем доступной памяти на виртуальной машине на 128 MБ и более. Это может оказаться проблемой для виртуальных машин небольшого размера.Добавьте модули Hyper-V в initramfs.
Измените файл
/etc/dracut.conf
, добавив следующее содержимое:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Повторно создайте initramfs:
sudo dracut -f -v
Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки (что обычно задано по умолчанию). Измените файл
/etc/ssh/sshd_config
, добавив в него следующую строку:ClientAliveInterval 180
Установите агент Linux для Azure, выполнив следующую команду:
sudo yum install WALinuxAgent sudo chkconfig waagent on
Не создавайте пространство подкачки на диске ОС.
Агент 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.
Отмените регистрацию подписки (при необходимости), выполнив следующую команду:
sudo subscription-manager unregister
Выполните следующие команды, чтобы отменить подготовку виртуальной машины и подготовить ее в 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
Завершите работу виртуальной машины и конвертируйте файл 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
Создайте или измените файл
/etc/sysconfig/network
, добавив следующий текст:NETWORKING=yes HOSTNAME=localhost.localdomain
Создайте или измените файл
/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
Убедитесь, что сетевая служба запускается во время загрузки, выполнив следующую команду:
sudo systemctl enable network
Зарегистрируйте подписку Red Hat, чтобы активировать установку пакетов из репозитория RHEL, запустив следующую команду:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Измените строку загрузки ядра в конфигурации 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Б и более. Это может оказаться проблемой для виртуальных машин небольшого размера.После внесения изменений в файл
/etc/default/grub
выполните следующую команду, чтобы повторно создать конфигурацию grub:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Добавьте модули Hyper-V в initramfs.
Измените файл
/etc/dracut.conf
, добавив в него следующее содержимое:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
Повторно создайте initramfs:
sudo dracut -f -v
Убедитесь, что SSH-сервер установлен и настроен для включения во время загрузки. Обычно этот параметр задан по умолчанию. Измените файл
/etc/ssh/sshd_config
, добавив в него следующую строку:ClientAliveInterval 180
Пакет WALinuxAgent
WALinuxAgent-<version>
был отправлен в репозиторий дополнений Red Hat. Включите репозиторий дополнительных компонентов, выполнив следующую команду:sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
Установите агент Linux для Azure, выполнив следующую команду:
sudo yum install WALinuxAgent sudo systemctl enable waagent.service
Установите cloud-init.
Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 12, "Установка cloud-init для выполнения подготовки".
Настройка подкачки
Не создавайте пространство подкачки на диске ОС. Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 13, "Настройка подкачки".
Чтобы отменить регистрацию подписки, выполните следующую команду:
sudo subscription-manager unregister
Отзыв
Выполните действия, описанные в разделе "Подготовка виртуальной машины RHEL 7 из диспетчера Hyper-V", шаг 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
Создайте файл 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
Поместите файл kickstart в место, доступное для системы установки.
Создайте новую виртуальную машину в диспетчере Hyper-V. На странице Подключить виртуальный жесткий диск выберите параметр Подключить виртуальный жесткий диск позднее и выполните инструкции в мастере создания виртуальной машины.
Откройте параметры виртуальной машины:
Подключите новый виртуальный жесткий диск к виртуальной машине. Выберите параметры VHD Format (Формат VHD) и Фиксированный размер.
Подключите установочный ISO-образ к DVD-дисководу.
В BIOS выберите загрузку с компакт-диска.
Запустите виртуальную машину. Когда отобразится руководство по установке, нажмите клавишу TAB , чтобы настроить параметры загрузки.
Введите
inst.ks=<the location of the kickstart file>
в конце параметров загрузки и нажмите клавишу ВВОД.Дождитесь завершения процесса установки. По окончании процесса виртуальная машина завершит работу автоматически. Виртуальный жесткий диск 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.