Azure 用の Red Hat ベースの仮想マシンの準備

適用対象: ✔️ Linux VM ✔️ フレキシブル スケール セット ✔️ 均一スケール セット

この記事では、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 Web サイトAzure での RHEL の実行に関するページを参照してください。 RHEL イメージの作成を自動化する方法については、Azure Image Builder に関するページを参照してください。

Note

サポート終了 (EOL) に達しており、Redhat でサポートされなくなったバージョンに注意してください。 EOL 以降にアップロードされた画像は、合理的な業務努力に基づいてサポートされます。 Redhat の製品ライフサイクルへのリンク

Hyper-V マネージャーは

このセクションでは、Hyper-V マネージャーを使用して、RHEL 6RHEL 7、または RHEL 8 仮想マシンを準備する方法について説明します。

前提条件

このセクションは、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 ブート) 仮想マシンがサポートされています。

  • VHD のサイズの上限は、1,023 GB です。

  • vfat カーネル モジュールをカーネル内で有効にする必要があります。

  • Logical Volume Manager (LVM) がサポートされており、Azure 仮想マシンの OS ディスクやデータ ディスクに使用できます。 ただし、一般的には、LVM ではなく OS ディスクの標準パーティションを使うことをお勧めします。 特にオペレーティング システム ディスクをトラブルシューティングのために別の同じ仮想マシンに接続する必要がある場合、そうすることで、複製された仮想マシンとの LVM 名の競合を回避することができます。 LVMRAID のドキュメントをご覧ください。

  • ユニバーサル ディスク フォーマット (UDF) ファイル システムをマウントするためのカーネル サポートが必要です。 Azure での最初の起動時に、ゲストに接続されている UDF でフォーマットされたメディアを介して、プロビジョニング構成が Linux 仮想マシンに渡されます。 Azure Linux エージェントは、その構成を読み取り、仮想マシンをプロビジョニングする UDF ファイル システムをマウントできる必要があります。これがないと、プロビジョニングは失敗します。

  • オペレーティング システム ディスクにスワップ パーティションを構成しないでください。 このことに関する詳細については、次の手順を参照してください。

  • Azure の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 未フォーマット ディスクから VHD に変換するときに、変換する前の未フォーマット ディスクのサイズが 1 MB の倍数であることを確認する必要があります。 詳細については、後述の手順を参照してください。 また、Linux のインストールに関する注記のセクションも参照してください。

Note

"cloud-init 21.2 以降では、UDF の要件はなくなりました。" ただし、UDF モジュールが有効になっていないと、プロビジョニング中に cdrom がマウントされず、カスタム データが適用されません。 これを回避するには、ユーザー データを使ってカスタム データを適用します。 ただし、カスタム データとは異なり、ユーザー データは暗号化されません。 https://cloudinit.readthedocs.io/en/latest/topics/format.html

Hyper-V マネージャーを使用した RHEL 6

重要

2020 年 11 月 30 日をもって、Red Hat Enterprise Linux 6 のメンテナンス フェーズは終了します。 メンテナンス フェーズの後に、延長ライフサイクル フェーズが続きます。 Red Hat Enterprise Linux 6 はフルまたはメンテナンスのフェーズから外れるため、Red Hat Enterprise Linux 7、8、または 9 にアップグレードすることを強くお勧めします。 お客様が Red Hat Enterprise Linux 6 を使い続ける必要がある場合は、Red Hat Red Hat Enterprise Linux Extended Life Cycle Support (ELS) アドオンを追加することをお勧めします。

  1. Hyper-V マネージャーで仮想マシンを選択します。

  2. [接続] をクリックすると、仮想マシンのコンソール ウィンドウが開きます。

  3. RHEL 6 では、NetworkManager が Azure Linux エージェントと干渉する可能性があります。 次のコマンドを実行して、このパッケージをアンインストールします。

    sudo rpm -e --nodeps NetworkManager
    
  4. /etc/sysconfig/network ファイルを作成または編集して次のテキストを追加します。

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを作成または編集して次のテキストを追加します。

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. udev ルールを移動 (または削除) して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらのルールは、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
    

Note

** 高速ネットワーク (AN) を使用する場合、作成される合成インターフェイスは udev 規則を使用してアンマネージドになるよう構成する必要があります。 これにより、NetworkManager がプライマリ インターフェイスと同じ IP を割り当てるのを防ぐことができます。

適用するには:

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparentlybonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. 次のコマンドを実行して、起動時にネットワーク サービスが開始されるようにします。

    sudo chkconfig network on
    
  2. RHEL リポジトリからパッケージをインストールできるように、次のコマンドを実行して Red Hat のサブスクリプションを登録します。

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. WALinuxAgent パッケージ WALinuxAgent-<version> が Red Hat extras リポジトリにプッシュされました。 次のコマンドを実行して extras リポジトリを有効にします。

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  4. GRUB 構成でカーネルのブート行を変更して Azure の追加のカーネル パラメーターを含めます。 この変更を行うには、テキスト エディターで /boot/grub/menu.lst を開き、既定のカーネルに次のパラメーターが含まれていることを確認します。

    console=ttyS0 earlyprintk=ttyS0
    

    これにより、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure での問題のデバッグに利用できるようになります。

    上記の他に、次のパラメーターを削除することをお勧めします。

    rhgb quiet crashkernel=auto
    

    クラウド環境では、すべてのログがシリアル ポートに送信されるため、グラフィカル ブートとクワイエット ブートは役に立ちません。 crashkernel オプションの構成は、必要であればそのままにしてかまいません。 ただし、このパラメーターにより、仮想マシン内の使用可能なメモリ量が 128 MB 以上減少します。 仮想マシンのサイズが小さいと、この構成が問題となる可能性があります。

  5. SSH (Secure Shell) サーバーがインストールされており、起動時に開始するように構成されていることを確認します。通常は、既定でそのように構成されています。 /etc/ssh/sshd_config を変更して、次の行を含めます。

    ClientAliveInterval 180
    
  6. 次のコマンドを実行して Azure Linux エージェントをインストールします。

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    

    手順 3 で NetworkManager パッケージと NetworkManager-gnome パッケージを削除しなかった場合は、WALinuxAgent パッケージをインストールすると、これらのパッケージが削除されます。

  7. オペレーティング システム ディスクにスワップ領域を作成しないでください。

    Azure Linux エージェントは、Azure で仮想マシンがプロビジョニングされた後に仮想マシンに接続されたローカルのリソース ディスクを使用してスワップ領域を自動的に構成できます。 ローカル リソース ディスクは一時ディスクであるため、仮想マシンのプロビジョニングが解除されると空になる場合があることにご注意ください。 前の手順で 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.
    
  8. 次のコマンドを実行して、サブスクリプションを登録解除します (必要な場合)。

    sudo subscription-manager unregister
    
  9. 次のコマンドを実行して仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

Note

特定の仮想マシンを移行していて、一般化されたイメージを作成したくない場合は、プロビジョニング解除の手順をスキップしてください。

    sudo waagent -force -deprovision
    sudo export HISTSIZE=0
  1. Hyper-V マネージャーで [アクション]>[シャットダウン] の順にクリックします。 これで、Linux VHD を Azure にアップロードする準備が整いました。

Hyper-V マネージャーを使用した RHEL 7

  1. Hyper-V マネージャーで仮想マシンを選択します。

  2. [接続] をクリックすると、仮想マシンのコンソール ウィンドウが開きます。

  3. /etc/sysconfig/network ファイルを作成または編集して次のテキストを追加します。

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを作成または編集して次のテキストを追加します。

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  5. 次のコマンドを実行して、起動時にネットワーク サービスが開始されるようにします。

    sudo systemctl enable network
    
  6. RHEL リポジトリからパッケージをインストールできるように、次のコマンドを実行して Red Hat のサブスクリプションを登録します。

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. GRUB 構成でカーネルのブート行を変更して Azure の追加のカーネル パラメーターを含めます。 この変更を行うには、テキスト エディターで /etc/default/grub を開き、GRUB_CMDLINE_LINUX パラメーターを編集します。 次に例を示します。

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

    これにより、すべてのコンソール メッセージが最初のシリアル ポートに送信され、シリアル コンソールとの対話が可能になります。こうすることで、Azure での問題のデバッグが支援されます。 NIC の新しい RHEL 7 名前付け規則もオフになります。

    rhgb quiet crashkernel=auto
    

    クラウド環境では、すべてのログがシリアル ポートに送信されるため、グラフィカル ブートとクワイエット ブートは役に立ちません。 crashkernel オプションの構成は、必要であればそのままにしてかまいません。 ただし、このパラメーターにより、仮想マシン内の使用可能なメモリ量が 128 MB 以上減少します。仮想マシンのサイズが小さいと、このことが問題になる可能性があります。

  8. /etc/default/grub の編集を終了したら、次のコマンドを実行して GRUB 構成を再構築します。

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

    注意

    UEFI 対応 VM をアップロードする場合、GRUB を更新するコマンドは grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg です。

  9. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。通常は、既定でそのように構成されています。 /etc/ssh/sshd_config を変更して、次の行を含めます。

    ClientAliveInterval 180
    
  10. WALinuxAgent パッケージ WALinuxAgent-<version> が Red Hat extras リポジトリにプッシュされました。 次のコマンドを実行して extras リポジトリを有効にします。

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. 次のコマンドを実行して、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
    
  12. プロビジョニングを処理するように cloud-init を構成します。

    1. 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
    

    注意

    特定の仮想マシンを移行する際に、一般化されたイメージを作成しない場合は、/etc/waagent.conf 構成で Provisioning.Agent=disabled を設定します。

    1. マウントを構成します。
    sudo echo "Adding mounts and disk_setup to init stage"
    sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    1. Azure データソースを構成します。
    sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
    sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    EOF
    
    1. 既存の swapfile が構成されている場合は削除します。
    if [[ -f /mnt/resource/swapfile ]]; then
    echo "Removing swapfile" #RHEL uses a swapfile by default
    swapoff /mnt/resource/swapfile
    rm /mnt/resource/swapfile -f
    fi
    
    1. cloud-init のログを構成します。
    sudo echo "Add console log file"
    sudo cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
    
    # This tells cloud-init to redirect its stdout and stderr to
    # 'tee -a /var/log/cloud-init-output.log' so the user can see output
    # there without needing to look on the console.
    output: {all: '| tee -a /var/log/cloud-init-output.log'}
    EOF
    
    
  13. スワップの構成。 オペレーティング システム ディスクにスワップ領域を作成しないでください。

    以前は、Azure で仮想マシンがプロビジョニングされた後に、仮想マシンに接続されたローカル リソース ディスクを使用してスワップ領域を自動的に構成するために、Azure Linux エージェントが使用されていました。 ただし、これは cloud-init によって処理されるようになったので、リソース ディスクをフォーマットしたり、スワップ ファイルを作成したりするために、Linux エージェントを使用しないでください/etc/waagent.conf の次のパラメーターを適切に変更します。

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    

    スワップのマウント、フォーマット、作成を行う場合は、次のいずれかの方法を使用できます。

    • VM を作成するたびに、customdata を介して cloud-init 構成としてこれを渡します これが推奨される方法です。

    • VM が作成されるたびにこれを実行する、イメージに組み込まれている cloud-init ディレクティブを使用します。

      sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
      sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
      #cloud-config
      # Generated by Azure cloud image build
      disk_setup:
        ephemeral0:
          table_type: mbr
          layout: [66, [33, 82]]
          overwrite: True
      fs_setup:
        - device: ephemeral0.1
          filesystem: ext4
        - device: ephemeral0.2
          filesystem: swap
      mounts:
        - ["ephemeral0.1", "/mnt/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  14. サブスクリプションを登録解除する場合は、次のコマンドを実行します。

    sudo subscription-manager unregister
    
  15. プロビジョニング解除

    次のコマンドを実行して仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

    注意事項

    特定の仮想マシンを移行する際に、一般化されたイメージを作成しない場合、プロビジョニング解除手順をスキップしてください コマンド waagent -force -deprovision+user を実行すると、ソース マシンが使用できなくなります。この手順は一般化されたイメージを作成することのみを目的としています。

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  16. Hyper-V マネージャーで [アクション]>[シャットダウン] の順にクリックします。 これで、Linux VHD を Azure にアップロードする準備が整いました。

Hyper-V マネージャーを使用した RHEL 8

  1. Hyper-V マネージャーで仮想マシンを選択します。

  2. [接続] をクリックすると、仮想マシンのコンソール ウィンドウが開きます。

  3. 次のコマンドを実行して、起動時にネットワーク マネージャー サービスが開始されるようにします。

    sudo systemctl enable NetworkManager.service
    
  4. ネットワーク インターフェイスが起動時に自動的に開始し、DHCP を使用するように構成します。

    sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
    
  5. RHEL リポジトリからパッケージをインストールできるように、次のコマンドを実行して Red Hat のサブスクリプションを登録します。

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  6. GRUB 構成でカーネルのブート行を変更して Azure の追加のカーネル パラメーターを含め、シリアル コンソールを有効にします。

    1. 現在の GRUB パラメーターを削除します。
    sudo grub2-editenv - unset kernelopts
    
    1. テキスト エディターで /etc/default/grub を編集し、次のパラメーターを追加します。
    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

    これにより、すべてのコンソール メッセージが最初のシリアル ポートに送信され、シリアル コンソールとの対話が可能になります。こうすることで、Azure での問題のデバッグが支援されます。 NIC の新しい名前付け規則もオフになります。

    1. また、次のパラメーターを削除することをお勧めします。
    rhgb quiet crashkernel=auto
    

    クラウド環境では、すべてのログがシリアル ポートに送信されるため、グラフィカル ブートとクワイエット ブートは役に立ちません。 crashkernel オプションの構成は、必要であればそのままにしてかまいません。 ただし、このパラメーターにより、仮想マシン内の使用可能なメモリ量が 128 MB 以上減少します。仮想マシンのサイズが小さいと、このことが問題になる可能性があります。

  7. /etc/default/grubの編集を終了したら、次のコマンドを実行して GRUB 構成を再構築します。

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

    UEFI 対応 VM の場合は、次のコマンドを実行します。

    sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    
  8. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。通常は、既定でそのように構成されています。 /etc/ssh/sshd_config を変更して、次の行を含めます。

    ClientAliveInterval 180
    
  9. 次のコマンドを実行して、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
    
  10. プロビジョニングを処理するように cloud-init を構成します。

    1. 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

    特定の仮想マシンを移行する際に、一般化されたイメージを作成しない場合は、/etc/waagent.conf 構成で Provisioning.Agent=disabled を設定します。

    1. マウントを構成します。
    sudo echo "Adding mounts and disk_setup to init stage"
    sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    1. Azure データソースを構成します。
    sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
    sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    EOF
    
    1. 既存の swapfile が構成されている場合は削除します。
    if [[ -f /mnt/resource/swapfile ]]; then
    echo "Removing swapfile" #RHEL uses a swapfile by defaul
    swapoff /mnt/resource/swapfile
    rm /mnt/resource/swapfile -f
    fi
    
    1. cloud-init のログを構成します。
    sudo echo "Add console log file"
    sudo cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
    
    # This tells cloud-init to redirect its stdout and stderr to
    # 'tee -a /var/log/cloud-init-output.log' so the user can see output
    # there without needing to look on the console.
    output: {all: '| tee -a /var/log/cloud-init-output.log'}
    EOF
    
  11. スワップの構成 オペレーティング システム ディスクにスワップ領域を作成しないでください。

    以前は、Azure で仮想マシンがプロビジョニングされた後に、仮想マシンに接続されたローカル リソース ディスクを使ってスワップ領域を自動的に構成するために、Azure Linux エージェントが使われていました。 ただし、これは cloud-init によって処理されるようになったので、リソース ディスクをフォーマットしたり、スワップ ファイルを作成したりするために、Linux エージェントを使用しないでください/etc/waagent.conf の次のパラメーターを適切に変更します。

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    
    • VM を作成するたびに、customdata を介して cloud-init 構成としてこれを渡します これが推奨される方法です。

    • VM が作成されるたびにこれを実行する、イメージに組み込まれている cloud-init ディレクティブを使用します。

      sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
      sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
      #cloud-config
      # Generated by Azure cloud image build
      disk_setup:
        ephemeral0:
          table_type: mbr
          layout: [66, [33, 82]]
          overwrite: True
      fs_setup:
        - device: ephemeral0.1
          filesystem: ext4
        - device: ephemeral0.2
          filesystem: swap
      mounts:
        - ["ephemeral0.1", "/mnt/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
      EOF
      
  12. サブスクリプションを登録解除する場合は、次のコマンドを実行します。

    sudo subscription-manager unregister
    
  13. プロビジョニング解除

    次のコマンドを実行して仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

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

    注意事項

    特定の仮想マシンを移行していて、一般化されたイメージを作成したくない場合は、プロビジョニング解除の手順をスキップしてください。 コマンド waagent -force -deprovision+user を実行すると、ソース マシンが使用できなくなります。この手順は一般化されたイメージを作成することのみを目的としています。

  14. Hyper-V マネージャーで [アクション]>[シャットダウン] の順にクリックします。 これで、Linux VHD を Azure にアップロードする準備が整いました。

KVM

このセクションでは、Azure にアップロードするために、KVM を使用して RHEL 6 または RHEL 7 ディストリビューションを準備する方法について説明します。

KVM を使用した RHEL 6

重要

2020 年 11 月 30 日をもって、Red Hat Enterprise Linux 6 のメンテナンス フェーズは終了します。 メンテナンス フェーズの後に、延長ライフサイクル フェーズが続きます。 Red Hat Enterprise Linux 6 はフルまたはメンテナンスのフェーズから外れるため、Red Hat Enterprise Linux 7、8、または 9 にアップグレードすることを強くお勧めします。 お客様が Red Hat Enterprise Linux 6 を使い続ける必要がある場合は、Red Hat Red Hat Enterprise Linux Extended Life Cycle Support (ELS) アドオンを追加することをお勧めします。

  1. Red Hat の Web サイトから、RHEL 6 の KVM イメージをダウンロードします。

  2. ルート パスワードを設定します。

    暗号化されたパスワードを生成し、コマンドの出力をコピーします。

    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 番目のフィールドを、"!!" から暗号化されたパスワードに変更します。

  3. qcow2 イメージから KVM の仮想マシンを作成します。 ディスクの種類を qcow2 に設定して、仮想ネットワーク インターフェイスのデバイス モデルを virtio に設定します。 その後、仮想マシンを起動し、root としてサインインします。

  4. /etc/sysconfig/network ファイルを作成または編集して次のテキストを追加します。

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを作成または編集して次のテキストを追加します。

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. udev ルールを移動 (または削除) して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらのルールは、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
    

Note

** 高速ネットワーク (AN) を使用する場合、作成される合成インターフェイスは udev 規則を使用してアンマネージドになるよう構成する必要があります。 これにより、NetworkManager がプライマリ インターフェイスと同じ IP を割り当てるのを防ぐことができます。

適用するには:

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparently bonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. 次のコマンドを実行して、起動時にネットワーク サービスが開始されるようにします。

    sudo chkconfig network on
    
  2. RHEL リポジトリからパッケージをインストールできるように、次のコマンドを実行して Red Hat のサブスクリプションを登録します。

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. GRUB 構成でカーネルのブート行を変更して Azure の追加のカーネル パラメーターを含めます。 この構成を行うには、テキスト エディターで /boot/grub/menu.lst を開き、既定のカーネルに次のパラメーターが含まれていることを確認します。

    console=ttyS0 earlyprintk=ttyS0
    

    これにより、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure での問題のデバッグに利用できるようになります。

    上記の他に、次のパラメーターを削除することをお勧めします。

    rhgb quiet crashkernel=auto
    

    クラウド環境では、すべてのログがシリアル ポートに送信されるため、グラフィカル ブートとクワイエット ブートは役に立ちません。 crashkernel オプションの構成は、必要であればそのままにしてかまいません。 ただし、このパラメーターにより、仮想マシン内の使用可能なメモリ量が 128 MB 以上減少します。仮想マシンのサイズが小さいと、このことが問題になる可能性があります。

  4. Hyper-V モジュールを initramfs に追加します。

    /etc/dracut.conf を編集し、次の内容を追加します。

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    initramfs を再構築します。

    sudo dracut -f -v
    
  5. cloud-init をアンインストールします。

    sudo yum remove cloud-init
    
  6. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。

    sudo chkconfig sshd on
    

    /etc/ssh/sshd_config を変更して、次の行を含めます。

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  7. WALinuxAgent パッケージ WALinuxAgent-<version> が Red Hat extras リポジトリにプッシュされました。 次のコマンドを実行して extras リポジトリを有効にします。

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  8. 次のコマンドを実行して Azure Linux エージェントをインストールします。

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  9. Azure Linux エージェントは、Azure で仮想マシンがプロビジョニングされた後に仮想マシンに接続されたローカルのリソース ディスクを使用してスワップ領域を自動的に構成できます。 ローカル リソース ディスクは一時ディスクであるため、仮想マシンのプロビジョニングが解除されると空になる場合があることにご注意ください。 前の手順で 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.
    
  10. 次のコマンドを実行して、サブスクリプションを登録解除します (必要な場合)。

    sudo subscription-manager unregister
    
  11. 次のコマンドを実行して仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

    Note

    特定の仮想マシンを移行しようとしていて、一般化されたイメージを作成しない場合は、プロビジョニング解除の手順をスキップしてください

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  12. KVM で仮想マシンをシャットダウンします。

  13. qcow2 イメージを VHD 形式に変換します。

    Note

    qemu-img のバージョン 2.2.1 以降には VHD が適切にフォーマットされないというバグがあることがわかっています。 この問題は QEMU 2.6 で修正されています。 qemu-img 2.2.0 以前を使用するか、2.6 以降に更新することをお勧めします。 [https://bugs.launchpad.net/qemu/+bug/1490611](https://bugs.launchpad.net/qemu/+bug/1490611 ) を参照してください。

    まず、イメージを未加工の形式に変換します。

    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
    

    未フォーマット ディスクを固定サイズの 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

  1. Red Hat の Web サイトから、RHEL 7 の KVM イメージをダウンロードします。 この手順では、例として RHEL 7 を使います。

  2. ルート パスワードを設定します。

    暗号化されたパスワードを生成し、コマンドの出力をコピーします。

    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 番目のフィールドを、"!!" から暗号化されたパスワードに変更します。

  3. qcow2 イメージから KVM の仮想マシンを作成します。 ディスクの種類を qcow2 に設定して、仮想ネットワーク インターフェイスのデバイス モデルを virtio に設定します。 その後、仮想マシンを起動し、root としてサインインします。

  4. /etc/sysconfig/network ファイルを作成または編集して次のテキストを追加します。

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを作成または編集して次のテキストを追加します。

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  6. 次のコマンドを実行して、起動時にネットワーク サービスが開始されるようにします。

    sudo systemctl enable network
    
  7. RHEL リポジトリからパッケージをインストールできるように、次のコマンドを実行して Red Hat のサブスクリプションを登録します。

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  8. GRUB 構成でカーネルのブート行を変更して Azure の追加のカーネル パラメーターを含めます。 この構成を行うには、テキスト エディターで /etc/default/grub を開き、GRUB_CMDLINE_LINUX パラメーターを編集します。 次に例を示します。

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

    このコマンドにより、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure での問題のデバッグに利用できるようになります。 NIC の新しい RHEL 7 名前付け規則も、このコマンドでオフになります。 上記の他に、次のパラメーターを削除することをお勧めします。

    rhgb quiet crashkernel=auto
    

    クラウド環境では、すべてのログがシリアル ポートに送信されるため、グラフィカル ブートとクワイエット ブートは役に立ちません。 crashkernel オプションの構成は、必要であればそのままにしてかまいません。 ただし、このパラメーターにより、仮想マシン内の使用可能なメモリ量が 128 MB 以上減少します。仮想マシンのサイズが小さいと、このことが問題になる可能性があります。

  9. /etc/default/grubの編集を終了したら、次のコマンドを実行して GRUB 構成を再構築します。

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  10. Hyper-V モジュールを initramfs に追加します。

    /etc/dracut.conf を編集して、コンテンツを追加します。

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    initramfs を再構築します。

    sudo dracut -f -v
    
  11. cloud-init をアンインストールします。

    sudo yum remove cloud-init
    
  12. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。

    sudo systemctl enable sshd
    

    /etc/ssh/sshd_config を変更して、次の行を含めます。

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. WALinuxAgent パッケージ WALinuxAgent-<version> が Red Hat extras リポジトリにプッシュされました。 次のコマンドを実行して extras リポジトリを有効にします。

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  14. 次のコマンドを実行して Azure Linux エージェントをインストールします。

    sudo yum install WALinuxAgent
    

    waagent サービスを有効にします。

    sudo systemctl enable waagent.service
    
  15. cloud-init のインストール: Hyper-V マネージャーからの RHEL 7 仮想マシンの準備に関するセクションの手順 12.「プロビジョニングを処理する cloud-init をインストールします」に従います。

  16. スワップの構成

    オペレーティング システム ディスクにスワップ領域を作成しないでください。 Hyper-V マネージャーからの RHEL 7 仮想マシンの準備に関するセクションの手順 13.「スワップの構成」に従います。

  17. 次のコマンドを実行して、サブスクリプションを登録解除します (必要な場合)。

    sudo subscription-manager unregister
    
  18. プロビジョニング解除

    Hyper-V マネージャーからの RHEL 7 仮想マシンの準備に関するセクションの手順 15.「プロビジョニング解除」に従います。

  19. KVM で仮想マシンをシャットダウンします。

  20. qcow2 イメージを VHD 形式に変換します。

    Note

    qemu-img のバージョン 2.2.1 以降には VHD が適切にフォーマットされないというバグがあることがわかっています。 この問題は QEMU 2.6 で修正されています。 qemu-img 2.2.0 以前を使用するか、2.6 以降に更新することをお勧めします。 [https://bugs.launchpad.net/qemu/+bug/1490611](https://bugs.launchpad.net/qemu/+bug/1490611 ) を参照してください。

    まず、イメージを未加工の形式に変換します。

    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
    

    未フォーマット ディスクを固定サイズの 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
    

VMware

このセクションでは、VMware から RHEL 6 または RHEL 7 ディストリビューションを準備する方法について説明します。

前提条件

このセクションでは、VMware に RHEL の仮想マシンが既にインストールされていると仮定します。 VMware にオペレーティング システムをインストールする方法の詳細については、VMware のゲスト オペレーティング システムのインストール ガイドを参照してください。

  • Linux オペレーティング システムをインストールする場合は、LVM (通常、多くのインストールで既定) ではなく標準パーティションを使用することをお勧めします。 特にオペレーティング システム ディスクをトラブルシューティングのために別の仮想マシンに接続する必要がある場合、そうすることで、複製された仮想マシンとの LVM 名の競合を回避することができます。 必要な場合は、LVM または RAID をデータ ディスク上で使用できます。
  • オペレーティング システム ディスクにスワップ パーティションを構成しないでください。 一時的なリソース ディスク上にスワップ ファイルを作成するよう Linux エージェントを構成できます。 この詳細については、次の手順を参照してください。
  • 仮想ハード ディスクを作成する場合は、 [Store virtual disk as a single file (仮想ディスクを 1 つのファイルとして格納する)] を選択します。

VMware を使用した RHEL 6

重要

2020 年 11 月 30 日をもって、Red Hat Enterprise Linux 6 のメンテナンス フェーズは終了します。 メンテナンス フェーズの後に、延長ライフサイクル フェーズが続きます。 Red Hat Enterprise Linux 6 はフルまたはメンテナンスのフェーズから移行するため、Red Hat Enterprise Linux 7、8、または 9 にアップグレードすることを強くお勧めします。 顧客が Red Hat Enterprise Linux 6 を使い続ける必要がある場合は、Red Hat Red Hat Enterprise Linux Extended Life Cycle Support (ELS) アドオンを追加することをお勧めします。

  1. RHEL 6 では、NetworkManager が Azure Linux エージェントと干渉する可能性があります。 次のコマンドを実行して、このパッケージをアンインストールします。

    sudo rpm -e --nodeps NetworkManager
    
  2. /etc/sysconfig/ ディレクトリに network という名前のファイルを作成し、次のテキストを追加します。

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  3. /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを作成または編集して次のテキストを追加します。

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  4. udev ルールを移動 (または削除) して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらのルールは、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
    

Note

** 高速ネットワーク (AN) を使用する場合、作成される合成インターフェイスは udev 規則を使用してアンマネージドになるよう構成する必要があります。 これにより、NetworkManager がプライマリ インターフェイスと同じ IP を割り当てるのを防ぐことができます。

適用するには:

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparently bonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. 次のコマンドを実行して、起動時にネットワーク サービスが開始されるようにします。

    sudo chkconfig network on
    
  2. RHEL リポジトリからパッケージをインストールできるように、次のコマンドを実行して Red Hat のサブスクリプションを登録します。

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. WALinuxAgent パッケージ WALinuxAgent-<version> が Red Hat extras リポジトリにプッシュされました。 次のコマンドを実行して extras リポジトリを有効にします。

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  4. GRUB 構成でカーネルのブート行を変更して Azure の追加のカーネル パラメーターを含めます。 これを行うには、テキスト エディターで /etc/default/grub を開き、GRUB_CMDLINE_LINUX パラメーターを編集します。 次に例を示します。

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
    

    これにより、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure での問題のデバッグに利用できるようになります。 上記の他に、次のパラメーターを削除することをお勧めします。

    rhgb quiet crashkernel=auto
    

    クラウド環境では、すべてのログがシリアル ポートに送信されるため、グラフィカル ブートとクワイエット ブートは役に立ちません。 crashkernel オプションの構成は、必要であればそのままにしてかまいません。 ただし、このパラメーターにより、仮想マシン内の使用可能なメモリ量が 128 MB 以上減少します。仮想マシンのサイズが小さいと、このことが問題になる可能性があります。

  5. Hyper-V モジュールを initramfs に追加します。

    /etc/dracut.conf を編集し、次の内容を追加します。

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    initramfs を再構築します。

    sudo dracut -f -v
    
  6. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。通常は、既定でそのように構成されています。 /etc/ssh/sshd_config を変更して、次の行を含めます。

    ClientAliveInterval 180
    
  7. 次のコマンドを実行して Azure Linux エージェントをインストールします。

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  8. オペレーティング システム ディスクにスワップ領域を作成しないでください。

    Azure Linux エージェントは、Azure で仮想マシンがプロビジョニングされた後に仮想マシンに接続されたローカルのリソース ディスクを使用してスワップ領域を自動的に構成できます。 ローカル リソース ディスクは一時ディスクであるため、仮想マシンのプロビジョニングが解除されると空になる場合があることにご注意ください。 前の手順で 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.
    
  9. 次のコマンドを実行して、サブスクリプションを登録解除します (必要な場合)。

    sudo subscription-manager unregister
    
  10. 次のコマンドを実行して仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

    Note

    特定の仮想マシンを移行していて、一般化されたイメージを作成したくない場合は、プロビジョニング解除の手順をスキップしてください。

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  11. 仮想マシンをシャットダウンし、VMDK ファイルを .vhd ファイルに変換します。

    Note

    qemu-img のバージョン 2.2.1 以降には VHD が適切にフォーマットされないというバグがあることがわかっています。 この問題は QEMU 2.6 で修正されています。 qemu-img 2.2.0 以前を使用するか、2.6 以降に更新することをお勧めします。 [https://bugs.launchpad.net/qemu/+bug/1490611](https://bugs.launchpad.net/qemu/+bug/1490611 ) を参照してください。

    まず、イメージを未加工の形式に変換します。

    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
    

    未フォーマット ディスクを固定サイズの 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

  1. /etc/sysconfig/network ファイルを作成または編集して次のテキストを追加します。

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  2. /etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを作成または編集して次のテキストを追加します。

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  3. 次のコマンドを実行して、起動時にネットワーク サービスが開始されるようにします。

    sudo systemctl enable network
    
  4. RHEL リポジトリからパッケージをインストールできるように、次のコマンドを実行して Red Hat のサブスクリプションを登録します。

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  5. GRUB 構成でカーネルのブート行を変更して Azure の追加のカーネル パラメーターを含めます。 この変更を行うには、テキスト エディターで /etc/default/grub を開き、GRUB_CMDLINE_LINUX パラメーターを編集します。 次に例を示します。

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

    この構成により、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure での問題のデバッグに利用できるようになります。 NIC の新しい RHEL 7 名前付け規則もオフになります。 上記の他に、次のパラメーターを削除することをお勧めします。

    rhgb quiet crashkernel=auto
    

    クラウド環境では、すべてのログがシリアル ポートに送信されるため、グラフィカル ブートとクワイエット ブートは役に立ちません。 crashkernel オプションの構成は、必要であればそのままにしてかまいません。 ただし、このパラメーターにより、仮想マシン内の使用可能なメモリ量が 128 MB 以上減少します。仮想マシンのサイズが小さいと、このことが問題になる可能性があります。

  6. /etc/default/grubの編集を終了したら、次のコマンドを実行して GRUB 構成を再構築します。

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  7. Hyper-V モジュールを initramfs に追加します。

    /etc/dracut.confを編集して、コンテンツを追加します。

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    initramfs を再構築します。

    sudo dracut -f -v
    
  8. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。 通常これが既定の設定です。 /etc/ssh/sshd_config を変更して、次の行を含めます。

    ClientAliveInterval 180
    
  9. WALinuxAgent パッケージ WALinuxAgent-<version> が Red Hat extras リポジトリにプッシュされました。 次のコマンドを実行して extras リポジトリを有効にします。

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  10. 次のコマンドを実行して Azure Linux エージェントをインストールします。

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent.service
    
  11. cloud-init のインストール

    Hyper-V マネージャーからの RHEL 7 仮想マシンの準備に関するセクションの手順 12.「プロビジョニングを処理する cloud-init をインストールします」に従います。

  12. スワップの構成

    オペレーティング システム ディスクにスワップ領域を作成しないでください。 Hyper-V マネージャーからの RHEL 7 仮想マシンの準備に関するセクションの手順 13.「スワップの構成」に従います。

  13. サブスクリプションを登録解除する場合は、次のコマンドを実行します。

    sudo subscription-manager unregister
    
  14. プロビジョニング解除

    Hyper-V マネージャーからの RHEL 7 仮想マシンの準備に関するセクションの手順 15.「プロビジョニング解除」に従います。

  15. 仮想マシンをシャットダウンし、VMDK ファイルを VHD 形式に変換します。

    Note

    qemu-img のバージョン 2.2.1 以降には VHD が適切にフォーマットされないというバグがあることがわかっています。 この問題は QEMU 2.6 で修正されています。 qemu-img 2.2.0 以前を使用するか、2.6 以降に更新することをお勧めします。 [https://bugs.launchpad.net/qemu/+bug/1490611](https://bugs.launchpad.net/qemu/+bug/1490611 ) を参照してください。

    まず、イメージを未加工の形式に変換します。

    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
    

    未フォーマット ディスクを固定サイズの 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

  1. 次の内容を含む 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
    
  2. インストール システムからアクセスできる場所に kickstart ファイルを置きます。

  3. Hyper-V マネージャーで新しい仮想マシンを作成します。 [仮想ハード ディスクの接続] ページで、 [後で仮想ハード ディスクを接続する] を選択し、仮想マシンの新規作成ウィザードを完了します。

  4. 仮想マシンの設定を開きます。

    1. 新しい仮想ハード ディスクを仮想マシンに接続します。 [VHD 形式][固定サイズ] を選択します。

    2. インストール ISO を DVD ドライブに接続します。

    3. CD から起動するように BIOS を設定します。

  5. 仮想マシンを開始します。 インストール ガイドが表示されたら、 Tab キーを押してブート オプションを構成します。

  6. ブート オプションの最後に inst.ks=<the location of the kickstart file> を入力し、 Enterキーを押します。

  7. インストールが完了するのを待ちます。 完了すると、仮想マシンが自動的にシャットダウンされます。 これで、Linux VHD を Azure にアップロードする準備が整いました。

既知の問題

非 Hyper-V ハイパーバイザーを使用しているとき、Hyper-V ドライバーを初期 RAM ディスクに含めることができない

Hyper-V 環境で実行されていることを Linux が検出しなかった場合、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 の再構築に関する情報を参照してください。

次のステップ

  • これで、Red Hat Enterprise Linux 仮想ハード ディスク を使用して、Azure に新しい仮想マシンを作成する準備が整いました。 .vhd ファイルを Azure に初めてアップロードする場合は、「Create a Linux VM from a custom disk (カスタム ディスクから Linux VM を作成する)」を参照してください。
  • Red Hat Enterprise Linux の実行が認定されているハイパーバイザーの詳細については、 Red Hat の Web サイトを参照してください。
  • 実稼働可能な RHEL BYOS イメージの詳細については、BYOSのドキュメント ページにアクセスしてください。