Azure 用の Red Hat ベースの仮想マシンの準備
適用対象: ✔️ Linux VM ✔️ フレキシブル スケール セット ✔️ 均一スケール セット
この記事では、Azure で使用できるようにするために Red Hat Enterprise Linux (RHEL) 仮想マシン (VM) を準備する方法について説明します。 この記事で説明する RHEL のバージョンは、6.X、7.X、8.X です。 この記事では、Hyper-V、カーネルベースの VM (KVM)、VMware の各ハイパーバイザーの準備について説明します。
Red Hat の Cloud Access プログラムに参加するための資格要件の詳細については、Red Hat Cloud Access Web サイトと Azure での RHEL の実行に関するページを参照してください。 RHEL イメージの作成を自動化する方法については、Azure Image Builder に関するページを参照してください。
Note
サポートが終了し (EOL)、Red Hat でサポートされなくなったバージョンに注意してください。 EOL 以降にアップロードされたイメージは、合理的な企業努力の範囲でサポートされます。 詳細については、Red Hat の製品のライフサイクルに関するページを参照してください。
Hyper-V マネージャーは
このセクションでは、Hyper-V マネージャーを使用して、RHEL 6、RHEL 7、または RHEL 8 VM を準備する方法について説明します。
前提条件
このセクションは、Red Hat の Web サイトから取得した ISO ファイルの RHEL イメージが仮想ハード ディスク (VHD) にインストール済みであることを前提としています。 Hyper-V マネージャーを使用してオペレーティング システム イメージをインストールする方法の詳細については、Hyper-V の役割のインストールと仮想マシンの構成に関するページを参照してください。
RHEL のインストールに関する注記
- Azure では、VHDX 形式はサポートされていません。 Azure でサポートされるのは、容量固定の VHD のみです。 Hyper-V マネージャーを使用してディスクを VHD 形式に変換するか、または
convert-vhd
コマンドレットを使用することができます。 VirtualBox を使用する場合は、ディスクの作成時に、既定の動的割り当てオプションではなく、 [容量固定] を選択します。 - Azure では、Gen1 (BIOS ブート) および Gen2 (UEFI ブート) VM がサポートされています。
- VHD のサイズの上限は、1,023 GB です。
- vfat カーネル モジュールをカーネル内で有効にする必要があります。
- 論理ボリューム マネージャー (LVM) がサポートされており、Azure VM 内の OS ディスクまたはデータ ディスクで使用できます。 一般的には、LVM ではなく OS ディスクの標準パーティションを使用することをお勧めします。 これにより、特にオペレーティング システム ディスクをトラブルシューティングのために別の同じ VM に接続する必要がある場合に、複製された VM との LVM 名の競合を回避することができます。 詳細については、LVM と RAID のドキュメントを参照してください。
- ユニバーサル ディスク フォーマット (UDF) ファイル システムをマウントするためのカーネル サポートが必要です。 Azure での初回起動時に、ゲストにアタッチされている UDF 形式のメディアにより、プロビジョニング構成が Linux VM に渡されます。 Azure Linux エージェントは、その構成を読み取り、VM をプロビジョニングする UDF ファイル システムをマウントできる必要があります。 この手順を実行しないと、プロビジョニングは失敗します。
- オペレーティング システム ディスクにスワップ パーティションを構成しないでください。 詳細については、以下の手順を参照してください。
- Azure の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 未フォーマット ディスクから VHD に変換するときに、変換する前の未フォーマット ディスクのサイズが 1 MB の倍数であることを確かめる必要があります。 詳細については、以下の手順を参照してください。 Linux のインストールに関する注記も参照してください。
Note
"Cloud-init 21.2 以降では、UDF の要件はなくなりました"。 ただし、UDF モジュールが有効になっていないと、プロビジョニング中に CD-ROM がマウントされず、カスタム データが適用されません。 回避するには、ユーザー データを使用してカスタム データを適用します。 カスタム データとは異なり、ユーザー データは暗号化されません。 詳細については、「ユーザー データの形式」を参照してください。
Hyper-V マネージャーを使用した RHEL 6
重要
RHEL 6 のメンテナンス フェーズは、2020 年 11 月 30 日に終了しました。 メンテナンス フェーズが終了すると、延長ライフ フェーズに移行します。 RHEL 6 はフル サポート/メンテナンス フェーズから移行するため、RHEL 7、8、または 9 にアップグレードすることを強くお勧めします。 RHEL 6 を引き続き使用する必要がある場合は、RHEL 延長ライフサイクル サポートのアドオンを追加することをお勧めします。
Hyper-V マネージャーで VM を選択します。
[接続] を選択すると、VM のコンソール ウィンドウが開きます。
RHEL 6 では、
NetworkManager
が Azure Linux エージェントに干渉する可能性があります。 このパッケージをアンインストールします。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 ルールを移動 (または削除) して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらの規則により、Azure または Hyper-V で VM を複製する際に問題が発生します。
警告
多くの "v5" 以降の VM サイズには高速ネットワークが必要です。 有効になっていない場合、NetworkManager はすべての仮想関数インターフェイスに同じ IP アドレスを割り当てます。 IP アドレスの重複を防ぐには、新しいサイズに移行するときに、この udev ルールを必ず含めてください。
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
Note
高速ネットワークを使用する場合、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!="remove", ENV{NM_UNMANAGED}="1" EOF
ネットワーク サービスが起動時に確実に開始されるようにします。
sudo chkconfig network on
RHEL リポジトリからパッケージをインストールできるように、Red Hat のサブスクリプションを登録します。
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
WALinuxAgent パッケージ
WALinuxAgent-<version>
が Red Hat extras リポジトリにプッシュされました。 extras リポジトリを有効にします。sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
Azure 用にさらにカーネル パラメーターを含めるために、GRUB 構成でカーネルのブート行を変更します。 この変更を行うには、テキスト エディターで
/boot/grub/menu.lst
を開きます。 既定のカーネルに次のパラメーターが含まれていることを確認します。console=ttyS0 earlyprintk=ttyS0
このアクションにより、すべてのコンソール メッセージが最初のシリアル ポートに送信され、Azure サポートでの問題のデバッグに役立ちます。
また、次のパラメーターを削除することをお勧めします。
rhgb quiet crashkernel=auto
クラウド環境では、すべてのログをシリアル ポートに送信する必要がある場合、グラフィカル ブートおよびクワイエット ブートは役に立ちません。 必要に応じて、
crashkernel
オプションの構成をそのままにしておくことができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少します。 この構成は、VM のサイズが小さい場合に問題になる可能性があります。SSH (Secure Shell) サーバーがインストールされており、起動時に開始するように構成されていることを確認します。通常は、既定でそのように構成されています。
/etc/ssh/sshd_config
を変更して、次の行を含めます。ClientAliveInterval 180
Azure Linux エージェントをインストールします。
sudo yum install WALinuxAgent sudo chkconfig waagent on
手順 3 で
NetworkManager
およびNetworkManager-gnome
パッケージをまだ削除していない場合、WALinuxAgent パッケージをインストールすると、これらのパッケージが削除されます。オペレーティング システム ディスクにスワップ領域を作成しないでください。
Azure Linux エージェントは、VM が Azure にプロビジョニングされた後に VM にアタッチされたローカルのリソース ディスクを使用してスワップ領域を自動的に構成できます。 ローカル リソース ディスクは一時ディスクであるため、VM のプロビジョニングが解除されると空になる可能性があります。 前の手順で Azure Linux エージェントのインストールした後、
/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
VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
Note
特定の VM を移行する際に、一般化されたイメージを作成しない場合、プロビジョニング解除手順をスキップしてください。
sudo waagent -force -deprovision sudo export HISTSIZE=0
Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。 これで、Linux VHD を Azure にアップロードする準備が整いました。
Hyper-V マネージャーを使用した RHEL 7
Hyper-V マネージャーで VM を選択します。
[接続] を選択すると、VM のコンソール ウィンドウが開きます。
/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
Note
高速ネットワークを使用する場合、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!="remove", ENV{NM_UNMANAGED}="1" EOF
ネットワーク サービスが起動時に確実に開始されるようにします。
sudo systemctl enable network
RHEL リポジトリからパッケージをインストールできるように、Red Hat のサブスクリプションを登録します。
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Azure 用にさらにカーネル パラメーターを含めるために、GRUB 構成でカーネルのブート行を変更します。 この変更を行うには、テキスト エディターで
/etc/default/grub
を開き、GRUB_CMDLINE_LINUX
パラメーターを編集します。 次に例を示します。GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0" GRUB_TERMINAL_OUTPUT="serial console" GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" ENABLE_BLSCFG=true
Note
/etc/default/grub
にENABLE_BLSCFG=true
ではなく ENABLE_BLSCFG=false が存在する場合、ブート エントリと構成を管理するためにブート ローダー仕様 (BLS) に依存する grubedit や gubby などのツールが RHEL 8 および 9 で正しく機能しない可能性があります。ENABLE_BLSCFG
が存在しない場合、既定の動作はfalse
になります。この変更により、すべてのコンソール メッセージが最初のシリアル ポートに確実に送信されるため、シリアル コンソールとの対話が可能になり、Azure サポートでの問題のデバッグに役立ちます。 また、この構成により、ネットワーク インターフェイス カード (NIC) の新しい RHEL 7 名前付け規則がオフになります。
rhgb quiet crashkernel=auto
クラウド環境では、すべてのログをシリアル ポートに送信する必要がある場合、グラフィカル ブートおよびクワイエット ブートは役に立ちません。 必要に応じて、
crashkernel
オプションの構成をそのままにしておくことができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少するため、VM のサイズが小さい場合、問題になる可能性があります。/etc/default/grub
の編集を終了したら、次のコマンドを実行して grub 構成を再構築します。sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Note
UEFI 対応 VM をアップロードする場合、grub を更新するコマンドは
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
です。SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。通常は、既定でそのように構成されています。
/etc/ssh/sshd_config
を変更して、次の行を含めます。ClientAliveInterval 180
WALinuxAgent パッケージ
WALinuxAgent-<version>
が Red Hat extras リポジトリにプッシュされました。 extras リポジトリを有効にします。sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
Azure Linux エージェント、
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
を構成します。cloud-init
のwaagent
を構成します。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
Note
特定の VM を移行する際に、汎用化イメージを作成しない場合、
/etc/waagent.conf
構成でProvisioning.Agent=disabled
を設定します。マウントを構成します。
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
データ ソースを構成します。
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
スワップの構成:
オペレーティング システム ディスクにスワップ領域を作成しないでください。
以前は、VM が Azure にプロビジョニングされた後に VM にアタッチされたローカルのリソース ディスクを使用してスワップ領域を構成するには、Azure Linux エージェントを使用して自動的に行われていました。 このアクションは、
cloud-init
によって処理されるようになりました。 リソース ディスクをフォーマットして、スワップ ファイルを作成するために、Linux エージェントを使用 "しないでください"。/etc/waagent.conf
内の次のパラメーターを適宜変更します。ResourceDisk.Format=n ResourceDisk.EnableSwap=n
スワップのマウント、フォーマット、作成を行う場合は、次のいずれかの方法を使用できます。
カスタム データを使用して VM を作成するたびに、このコードを
cloud-init
構成として渡します。 これがお勧めしているメソッドです。イメージに組み込まれている
cloud-init
ディレクティブを使用します。これは、VM が作成されるたびにこの手順を実行します。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
VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
注意事項
特定の VM を移行する際に、汎用化イメージを作成しない場合は、プロビジョニング解除手順をスキップします。
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 VHD を Azure にアップロードする準備が整いました。
Hyper-V マネージャーを使用した RHEL 8+
Hyper-V マネージャーで VM を選択します。
[接続] を選択すると、VM のコンソール ウィンドウが開きます。
起動時にネットワーク サービスが確実に開始されるようにします。
sudo systemctl enable NetworkManager.service
起動時に自動的に開始し、動的ホスト構成プロトコルを使用するようにネットワーク インターフェイスを構成します。
sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
Note
高速ネットワークを使用する場合、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!="remove", ENV{NM_UNMANAGED}="1" EOF
RHEL リポジトリからパッケージをインストールできるように、Red Hat のサブスクリプションを登録します。
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 サポートでの問題のデバッグに役立ちます。 NIC の新しい名前付け規則もオフになります。
さらに、次のパラメーターを削除することをお勧めします。
rhgb quiet crashkernel=auto
クラウド環境では、すべてのログをシリアル ポートに送信する必要がある場合、グラフィカル ブートおよびクワイエット ブートは役に立ちません。 必要に応じて、
crashkernel
オプションの構成をそのままにしておくことができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少するため、VM のサイズが小さい場合、問題になる可能性があります。/etc/default/grub
の編集を終了したら、次のコマンドを実行して grub 構成を再構築します。sudo grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI 対応 VM の場合は、次のコマンドを実行します。
sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。通常は、既定でそのように構成されています。
/etc/ssh/sshd_config
を変更して、次の行を含めます。ClientAliveInterval 180
Azure Linux エージェント、
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
を構成します。cloud-init
のwaagent
を構成します。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
Note
特定の VM を移行する際に、汎用化イメージを作成しない場合、
/etc/waagent.conf
構成でProvisioning.Agent=disabled
を設定します。マウントを構成します。
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
データ ソースを構成します。
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
スワップの構成:
オペレーティング システム ディスクにスワップ領域を作成しないでください。
以前は、VM が Azure にプロビジョニングされた後に VM にアタッチされたローカルのリソース ディスクを使用してスワップ領域を構成するには、Azure Linux エージェントを使用して自動的に行われていました。 このアクションは、
cloud-init
によって処理されるようになりました。 リソース ディスクをフォーマットして、スワップ ファイルを作成するために、Linux エージェントを使用 "しないでください"。/etc/waagent.conf
内の次のパラメーターを適切に変更します。ResourceDisk.Format=n ResourceDisk.EnableSwap=n
カスタム データを使用して VM を作成するたびに、このコードを
cloud-init
構成として渡します。 これがお勧めしているメソッドです。イメージに組み込まれている
cloud-init
ディレクティブを使用します。これは、VM が作成されるたびにこの手順を実行します。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
次のコマンドを実行して VM をプロビジョニング解除し、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
注意事項
特定の VM を移行する際に、汎用化イメージを作成しない場合は、プロビジョニング解除手順をスキップします。
waagent -force -deprovision+user
コマンドを実行すると、ソース マシンは使用できなくなります。 この手順は一般化されたイメージを作成することのみを目的としています。Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。 これで、Linux VHD を Azure にアップロードする準備が整いました。
KVM
このセクションでは、Azure にアップロードするために、KVM を使用して RHEL 6 または RHEL 7 ディストリビューションを準備する方法について説明します。
KVM を使用した RHEL 6
重要
RHEL 6 のメンテナンス フェーズは、2020 年 11 月 30 日に終了しました。 メンテナンス フェーズが終了すると、延長ライフ フェーズに移行します。 RHEL 6 はフル サポート/メンテナンス フェーズから移行するため、RHEL 7、8、または 9 にアップグレードすることを強くお勧めします。 RHEL 6 を引き続き使用する必要がある場合は、RHEL 延長ライフサイクル サポートのアドオンを追加することをお勧めします。
Red Hat の Web サイトから、RHEL 6 の KVM イメージをダウンロードします。
ルート パスワードを設定します。
暗号化されたパスワードを生成し、コマンドの出力をコピーします。
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
ルート ユーザーの 2 番目のフィールドを
!!
から暗号化されたパスワードに変更します。qcow2 イメージから KVM に VM を作成します。 ディスクの種類を qcow2 に設定して、仮想ネットワーク インターフェイスのデバイス モデルを virtio に設定します。 その後、VM を起動し、ルートとしてサインインします。
/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 ルールを移動 (または削除) して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらの規則により、Azure または Hyper-V で VM を複製する際に問題が発生します。
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
Note
高速ネットワークを使用する場合、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!="remove", ENV{NM_UNMANAGED}="1" EOF
ネットワーク サービスが起動時に確実に開始されるようにします。
sudo chkconfig network on
RHEL リポジトリからパッケージをインストールできるように、Red Hat のサブスクリプションを登録します。
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Azure 用にさらにカーネル パラメーターを含めるために、GRUB 構成でカーネルのブート行を変更します。 この構成を行うには、テキスト エディターで
/boot/grub/menu.lst
を開きます。 既定のカーネルに次のパラメーターが含まれていることを確認します。console=ttyS0 earlyprintk=ttyS0
この手順により、すべてのコンソール メッセージが最初のシリアル ポートに送信され、Azure サポートでの問題のデバッグに役立ちます。
また、次のパラメーターを削除することをお勧めします。
rhgb quiet crashkernel=auto
クラウド環境では、すべてのログをシリアル ポートに送信する必要がある場合、グラフィカル ブートおよびクワイエット ブートは役に立ちません。 必要に応じて、
crashkernel
オプションの構成をそのままにしておくことができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少するため、VM のサイズが小さい場合、問題になる可能性があります。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 extras リポジトリにプッシュされました。 extras リポジトリを有効にします。sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
Azure Linux エージェントをインストールします。
sudo yum install WALinuxAgent sudo chkconfig waagent on
Azure Linux エージェントは、VM が Azure にプロビジョニングされた後に VM にアタッチされたローカルのリソース ディスクを使用してスワップ領域を自動的に構成できます。 ローカル リソース ディスクは一時ディスクであるため、VM のプロビジョニングが解除されると空になる可能性があります。 前の手順で Azure Linux エージェントのインストールした後、
/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
次のコマンドを実行して VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
Note
特定の VM を移行する際に、汎用化イメージを作成しない場合は、プロビジョニング解除手順をスキップします。
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 で VM をシャット ダウンします。
qcow2 イメージを VHD 形式に変換します。
Note
qemu-img のバージョン 2.2.1 以降には、VHD の不適切なフォーマットを引き起こす既知のバグがあります。 この問題は QEMU 2.6 で修正されています。 qemu-img 2.2.0 以前を使用するか、2.6 以降に更新することをお勧めします。 詳細については、こちらの Web サイトを参照してください。
まず、イメージを未加工の形式に変換します。
sudo qemu-img convert -f qcow2 -O raw rhel-6.9.qcow2 rhel-6.9.raw
未加工のイメージのサイズが 1 MB になっていることを確認します。 そうでない場合は、1 MB になるようにサイズの端数を切り上げます。
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 ディスクを固定サイズの VHD に変換します。
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
KVM を使用した RHEL 7
Red Hat の Web サイトから、RHEL 7 の KVM イメージをダウンロードします。 この手順では、例として RHEL 7 を使います。
ルート パスワードを設定します。
暗号化されたパスワードを生成し、コマンドの出力をコピーします。
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
ルート ユーザーの 2 番目のフィールドを
!!
から暗号化されたパスワードに変更します。qcow2 イメージから KVM に VM を作成します。 ディスクの種類を qcow2 に設定して、仮想ネットワーク インターフェイスのデバイス モデルを virtio に設定します。 その後、VM を起動し、ルートとしてサインインします。
/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
Note
高速ネットワークを使用する場合、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!="remove", ENV{NM_UNMANAGED}="1" EOF
ネットワーク サービスが起動時に確実に開始されるようにします。
sudo systemctl enable network
RHEL リポジトリからパッケージをインストールできるように、Red Hat のサブスクリプションを登録します。
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Azure 用にさらにカーネル パラメーターを含めるために、GRUB 構成でカーネルのブート行を変更します。 この構成を行うには、テキスト エディターで
/etc/default/grub
を開き、GRUB_CMDLINE_LINUX
パラメーターを編集します。 次に例を示します。GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
このコマンドにより、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure での問題のデバッグに利用できるようになります。 NIC の新しい RHEL 7 名前付け規則も、このコマンドでオフになります。 また、次のパラメーターを削除することをお勧めします。
rhgb quiet crashkernel=auto
クラウド環境では、すべてのログをシリアル ポートに送信する必要がある場合、グラフィカル ブートおよびクワイエット ブートは役に立ちません。 必要に応じて、
crashkernel
オプションの構成をそのままにしておくことができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少するため、VM のサイズが小さい場合、問題になる可能性があります。/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 extras リポジトリにプッシュされました。 extras リポジトリを有効にします。sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
Azure Linux エージェントをインストールします。
sudo yum install WALinuxAgent
waagent
サービスを有効にします。sudo systemctl enable waagent.service
cloud-init
をインストールする。Hyper-V Manager マネージャーからの RHEL 7 VM の準備に関するセクションの手順 12 「プロビジョニングを処理する
cloud-init
をインストールします」の手順に従います。スワップの構成:
- オペレーティング システム ディスクにスワップ領域を作成しないでください。
- Hyper-V Manager マネージャーからの RHEL 7 VM の準備に関するセクションの手順 13 「スワップの構成」の手順に従います。
サブスクリプションの登録を解除する (必要な場合):
sudo subscription-manager unregister
Hyper-V Manager マネージャーからの RHEL 7 VM の準備に関するセクションの手順 15 「プロビジョニング解除」の手順に従ってプロビジョニングを解除します。
KVM で VM をシャット ダウンします。
qcow2 イメージを VHD 形式に変換します。
Note
qemu-img のバージョン 1.1.1 以降には、VHD の不適切なフォーマットを引き起こす既知のバグがあります。 この問題は QEMU 1.6 で修正されました。 qemu-img 1.1.0 以前を使用するか、1.6 以降に更新することをお勧めします。 詳細については、こちらの Web サイトを参照してください。
まず、イメージを未加工の形式に変換します。
sudo qemu-img convert -f qcow2 -O raw rhel-7.4.qcow2 rhel-7.4.raw
未加工のイメージのサイズが 1 MB になっていることを確認します。 そうでない場合は、1 MB になるようにサイズの端数を切り上げます。
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 ディスクを固定サイズの VHD に変換します。
sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
または、qemu バージョン 1.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
このセクションでは、VMware から RHEL 6 または RHEL 7 ディストリビューションを準備する方法について説明します。
前提条件
このセクションでは、VMware に RHEL VM が既にインストールされていることを前提としています。 VMware にオペレーティング システムをインストールする方法の詳細については、VMware の「ゲスト オペレーティング システム インストール ガイド」を参照してください。
- Linux オペレーティング システムをインストールする場合は、LVM (通常、多くのインストールで既定) ではなく標準パーティションを使用することをお勧めします。 特にトラブルシューティングのためにオペレーティング システム ディスクを別の VM に接続する必要がある場合、パーティションを使用すると、複製された VM との LVM 名の競合を回避できます。 必要に応じて、LVM または RAID を使用できます。
- オペレーティング システム ディスクにスワップ パーティションを構成しないでください。 一時的なリソース ディスク上にスワップ ファイルを作成するよう Linux エージェントを構成できます。 詳細については、以下の手順を参照してください。
- VHD を作成する場合、[仮想ディスクを 1 つのファイルとして格納する] をオンにします。
VMware を使用した RHEL 6
重要
RHEL 6 のメンテナンス フェーズは、2020 年 11 月 30 日に終了しました。 メンテナンス フェーズが終了すると、延長ライフ フェーズに移行します。 RHEL 6 はフル サポート/メンテナンス フェーズから移行するため、RHEL 7、8、または 9 にアップグレードすることを強くお勧めします。 RHEL 6 を引き続き使用する必要がある場合は、RHEL 延長ライフサイクル サポートのアドオンを追加することをお勧めします。
RHEL 6 では、
NetworkManager
が Azure Linux エージェントに干渉する可能性があります。 このパッケージをアンインストールします。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 ルールを移動 (または削除) して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらの規則により、Azure または Hyper-V で VM を複製する際に問題が発生します。
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
Note
高速ネットワークを使用する場合、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!="remove", ENV{NM_UNMANAGED}="1" EOF
ネットワーク サービスが起動時に確実に開始されるようにします。
sudo chkconfig network on
RHEL リポジトリからパッケージをインストールできるように、Red Hat のサブスクリプションを登録します。
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
WALinuxAgent パッケージ
WALinuxAgent-<version>
が Red Hat extras リポジトリにプッシュされました。 extras リポジトリを有効にします。sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
Azure 用にさらにカーネル パラメーターを含めるために、GRUB 構成でカーネルのブート行を変更します。 この手順を行うには、テキスト エディターで
/etc/default/grub
を開き、GRUB_CMDLINE_LINUX
パラメーターを編集します。 次に例を示します。GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
この手順により、すべてのコンソール メッセージが最初のシリアル ポートに送信され、Azure サポートでの問題のデバッグに役立ちます。 また、次のパラメーターを削除することをお勧めします。
rhgb quiet crashkernel=auto
クラウド環境では、すべてのログをシリアル ポートに送信する必要がある場合、グラフィカル ブートおよびクワイエット ブートは役に立ちません。 必要に応じて、
crashkernel
オプションの構成をそのままにしておくことができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少するため、VM のサイズが小さい場合、問題になる可能性があります。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
Azure Linux エージェントをインストールします。
sudo yum install WALinuxAgent sudo chkconfig waagent on
オペレーティング システム ディスクにスワップ領域を作成しないでください。
Azure Linux エージェントは、VM が Azure にプロビジョニングされた後に VM にアタッチされたローカルのリソース ディスクを使用してスワップ領域を自動的に構成できます。 ローカル リソース ディスクは一時ディスクであるため、VM のプロビジョニングが解除されると空になる可能性があります。 前の手順で Azure Linux エージェントのインストールした後、
/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
次のコマンドを実行して VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
Note
特定の VM を移行する際に、汎用化イメージを作成しない場合は、プロビジョニング解除手順をスキップします。
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
VM をシャットダウンし、VMDK ファイルを .vhd ファイルに変換します。
Note
qemu-img のバージョン 2.2.1 以降には、VHD の不適切なフォーマットを引き起こす既知のバグがあります。 この問題は QEMU 2.6 で修正されています。 qemu-img 2.2.0 以前を使用するか、2.6 以降に更新することをお勧めします。 詳細については、こちらの Web サイトを参照してください。
まず、イメージを未加工の形式に変換します。
sudo qemu-img convert -f vmdk -O raw rhel-6.9.vmdk rhel-6.9.raw
未加工のイメージのサイズが 1 MB になっていることを確認します。 そうでない場合は、1 MB になるようにサイズの端数を切り上げます。
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 ディスクを固定サイズの VHD に変換します。
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
VMware を使用した RHEL 7
/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
Note
高速ネットワークを使用する場合、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!="remove", ENV{NM_UNMANAGED}="1" EOF
ネットワーク サービスが起動時に確実に開始されるようにします。
sudo systemctl enable network
RHEL リポジトリからパッケージをインストールできるように、Red Hat のサブスクリプションを登録します。
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
Azure 用にさらにカーネル パラメーターを含めるために、GRUB 構成でカーネルのブート行を変更します。 この変更を行うには、テキスト エディターで
/etc/default/grub
を開き、GRUB_CMDLINE_LINUX
パラメーターを編集します。 次に例を示します。GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
この構成により、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure での問題のデバッグに利用できるようになります。 NIC の新しい RHEL 7 名前付け規則もオフになります。 上記の他に、次のパラメーターを削除することをお勧めします。
rhgb quiet crashkernel=auto
クラウド環境では、すべてのログをシリアル ポートに送信する必要がある場合、グラフィカル ブートおよびクワイエット ブートは役に立ちません。 必要に応じて、
crashkernel
オプションの構成をそのままにしておくことができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少するため、VM のサイズが小さい場合、問題になる可能性があります。/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 extras リポジトリにプッシュされました。 extras リポジトリを有効にします。sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
Azure Linux エージェントをインストールします。
sudo yum install WALinuxAgent sudo systemctl enable waagent.service
cloud-init
をインストールします。Hyper-V Manager マネージャーからの RHEL 7 VM の準備に関するセクションの手順 12 「プロビジョニングを処理する
cloud-init
をインストールします」の手順に従います。スワップの構成:
- オペレーティング システム ディスクにスワップ領域を作成しないでください。
- Hyper-V Manager マネージャーからの RHEL 7 VM の準備に関するセクションの手順 13 「スワップの構成」の手順に従います。
サブスクリプションを登録解除する場合は、次のコマンドを実行します。
sudo subscription-manager unregister
Hyper-V Manager マネージャーからの RHEL 7 VM の準備に関するセクションの手順 15 「プロビジョニング解除」の手順に従ってプロビジョニングを解除します。
VM をシャットダウンし、VMDK ファイルを VHD 形式に変換します。
Note
qemu-img のバージョン 2.2.1 以降には、VHD の不適切なフォーマットを引き起こす既知のバグがあります。 この問題は QEMU 2.6 で修正されています。 qemu-img 2.2.0 以前を使用するか、2.6 以降に更新することをお勧めします。 詳細については、こちらの Web サイトを参照してください。
まず、イメージを未加工の形式に変換します。
sudo qemu-img convert -f vmdk -O raw rhel-7.4.vmdk rhel-7.4.raw
未加工のイメージのサイズが 1 MB になっていることを確認します。 そうでない場合は、1 MB になるようにサイズの端数を切り上げます。
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 ディスクを固定サイズの VHD に変換します。
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 ファイル
このセクションでは、kickstart ファイルを使用して、ISO から RHEL 7 ディストリビューションを準備する方法について説明します。
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 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!="remove", ENV{NM_UNMANAGED}="1" 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 マネージャーで新しい VM を作成します。 [仮想ハード ディスクの接続] ページで、[後で仮想ハード ディスクをアタッチする] をオンにし、仮想マシンの新規作成ウィザードを完了します。
VM 設定を開きます。
新しい VHD を VM にアタッチします。 [VHD 形式] と [固定サイズ] を選択します。
インストール ISO を DVD ドライブに接続します。
CD から起動するように BIOS を設定します。
VM を起動します。 インストール ガイドが表示されたら、Tab キーを押してブート オプションを構成します。
ブート オプションの最後に
inst.ks=<the location of the kickstart file>
を入力し、Enterキーを押します。インストールが完了するのを待ちます。 完了すると、VM は自動的にシャットダウンされます。 これで、Linux VHD を Azure にアップロードする準備が整いました。
既知の問題
次の問題が確認されています。
非 Hyper-V ハイパーバイザーを使用しているとき、Hyper-V ドライバーを初期 RAM ディスクに含めることができない
一部のケースにおいて、Linux インストーラーは、Hyper-V 環境で実行されていることを Linux が検出しない限り、初期 RAM ディスク (initrd または initramfs) に Hyper-V 用のドライバーを含めないことがあります。
別の仮想化システム (VirtualBox や Xen など) を使用して Linux イメージを準備する場合、少なくとも hv_vmbus
と hv_storvsc
のカーネル モジュールを初期 RAM ディスクで確実に使用できるように initrd を再構築することが必要な場合があります。 この問題は、少なくとも、アップストリームの Red Hat ディストリビューションに基づくシステムで確認されています。
この問題を解決するには、initramfs に Hyper-V モジュールを追加して再構築する必要があります。
/etc/dracut.conf
を編集し、次の内容を追加します。
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
initramfs を再構築します。
sudo dracut -f -v
詳細については、initramfs の再構築に関するページを参照してください。
関連するコンテンツ
- これで、RHEL VHD を使用して Azure に新しい VM を作成する準備ができました。 .vhd ファイルを Azure に初めてアップロードする場合は、「Create a Linux VM from a custom disk (カスタム ディスクから Linux VM を作成する)」を参照してください。
- RHEL の実行が認定されているハイパーバイザーの詳細については、Red Hat の Web サイトを参照してください。
- 運用環境対応の RHEL BYOS イメージの詳細については、サブスクリプション持ち込みに関するドキュメント ページを参照してください。