Azure 用の Oracle Linux 仮想マシンの準備

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

この記事では、既に Oracle Linux オペレーティング システム (OS) を仮想ハード ディスク (VHD) にインストールしていることを前提にしています。 .vhd ファイルを作成するツールはいくつかあります。 たとえば、Hyper-V などの仮想化ソリューションなどです。 詳細については、Hyper-V の役割のインストールと仮想マシン (VM) の構成に関する記事を参照してください。

Oracle Linux のインストールに関する注記

  • Azure 用に Linux を準備する場合のその他のヒントについては、「Linux のインストールに関する一般的な注記」を参照してください。
  • Hyper-V と Azure では、Unbreakable Enterprise Kernel (UEK) か Red Hat Compatible Kernel のいずれかを使用する Oracle Linux がサポートされます。
  • Oracle の UEK2 には必要なドライバーが含まれないため、Hyper-V と Azure ではサポートされていません。
  • VHDX 形式は Azure ではサポートされていません。サポートされるのは固定 VHD のみです。 Hyper-V マネージャーまたは convert-vhd コマンドレットを使って、ディスクを VHD 形式に変換できます。
  • ユーザー定義関数 (UDF) ファイル システムをマウントするためのカーネル サポートが必要です。 Azure での初回起動時に、ゲストに接続されている UDF でフォーマットされたメディアを介して、プロビジョニング構成が Linux VM に渡されます。 Azure Linux エージェントは、その構成を読み取り、VM をプロビジョニングする UDF ファイル システムをマウントできる必要があります。
  • Linux システムをインストールする場合は、Logical Volume Manager (LVM) (通常、多くのインストールで既定) ではなく標準パーティションを使用することをお勧めします。 これらの標準パーティションを使うと、特に OS ディスクをトラブルシューティングのために別の VM に接続する必要がある場合に、LVM 名と、複製された VM との競合が回避されます。 LVMRAID もデータ ディスクで使用できます。
  • 2\.6.37 未満の Linux カーネル バージョンは、HYPER-V で大きい VM サイズの NUMA をサポートできません。 この問題は、主に、アップストリームの Red Hat 2.6.32 カーネルを使用する古いディストリビューションに影響し、Oracle Linux 6.6 以降では修正されています。
  • OS ディスクにスワップ パーティションを構成しないでください。
  • Azure の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 未フォーマット ディスクから VHD に変換するときに、変換する前の未フォーマット ディスクのサイズが 1 MB の倍数であることを確かめる必要があります。 詳細については、Linux のインストールに関する注意事項に関するページを参照してください。
  • Addons リポジトリが有効になっていることを確認します。 ファイル /etc/yum.repos.d/public-yum-ol6.repo(Oracle Linux 6) または /etc/yum.repos.d/public-yum-ol7.repo(Oracle Linux 7) を編集します。 このファイルの [ol6_addons] または [ol7_addons] の下の行 enabled=0enabled=1 に変更します。

Oracle Linux 6.X

重要

Oracle Linux 6.x は既にサポートが終了していることに注意してください。 Oracle Linux バージョン 6.10 では延長ライフサイクル サポートを使用できますが、2024 年 7 月に終了します

Azure で VM を実行するには、OS で特定の構成手順を完了する必要があります。

  1. Hyper-V マネージャーの中央のペインで VM を選びます。

  2. [接続] を選んで、VM のウィンドウを開きます。

  3. NetworkManager をアンインストールします。

    sudo rpm -e --nodeps NetworkManager
    

    Note

    パッケージがまだインストールされていない場合、このコマンドは失敗してエラー メッセージが表示されます。 これは想定されるメッセーです。

  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 で 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
    
  7. 起動時にネットワーク サービスが開始されるようにします。

    sudo chkconfig network on
    
  8. python-pyasn1 をインストールします。

    sudo yum install python-pyasn1
    
  9. Azure 用にさらにカーネル パラメーターを含めるために、GRUB 構成でカーネルのブート行を変更します。 この手順を行うには、テキスト エディターで /boot/grub/menu.lst を開き、カーネルに次のパラメーターが含まれていることを確認します。

    console=ttyS0 earlyprintk=ttyS0
    

    この設定により、すべてのコンソール メッセージが最初のシリアル ポートに送信されるので、問題をデバッグしている Azure サポートの役に立ちます。

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

    rhgb quiet crashkernel=auto
    

    クラウド環境では、すべてのログをシリアル ポートに送信するため、グラフィカル ブートおよびクワイエット ブートは役立ちません。

    必要に応じて crashkernel オプションは構成したままにすることができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少するため、VM のサイズが小さい場合、問題になる可能性があります。

  10. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。 通常これが既定の設定です。

  11. 次のコマンドを実行して Azure Linux エージェントをインストールします。 最新バージョンは 2.0.15 です。

    sudo yum install WALinuxAgent
    

    手順 2 で説明したように NetworkManagerNetworkManager-gnome のパッケージがまだ削除されていない場合、WALinuxAgent パッケージをインストールすると、それらは削除されます。

  12. OS ディスクにスワップ領域を作成しないでください。

    Azure Linux エージェントは、Azure でプロビジョニングされた後、VM にアタッチされたローカル リソース ディスクを使って、スワップ領域を自動的に構成できます。 ローカル リソース ディスクは "一時" ディスクであるため、VM のプロビジョニングが解除されると空になることがあります。 Azure Linux エージェントのインストール後に (前の手順を参照)、/etc/waagent.conf にある次のパラメーターを適切に変更します。

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  13. VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

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


Oracle Linux 7.0 以降

Oracle Linux 7.0 以降を使用している場合は、次のセクションの手順を実行します。

Oracle Linux 7 での変更

Azure 用 Oracle Linux 7 VM の準備は Oracle Linux 6 と似ていますが、いくつか相違点があるので注意してください。

  • Azure では、Unbreakable Enterprise Kernel (UEK) か Red Hat Compatible Kernel のいずれかを使用する Oracle Linux がサポートされます。 UEK を搭載した Oracle Linux を使用することをお勧めします。
  • NetworkManager パッケージが、Azure Linux エージェントと競合しなくなりました。 このパッケージは既定でインストールされますが、これを削除しないことをお勧めします。
  • GRUB2 が、既定のブートローダーとして使用されるようになったため、カーネル パラメーターの編集手順が変更されました。 ("構成手順" に関するセクションを参照してください。)
  • XFS が既定のファイル システムになりました。 必要に応じて、引き続き ext4 ファイル システムを使用できます。

構成手順

  1. Hyper-V マネージャーで VM を選択します。

  2. [接続] を選択すると、VM のコンソール ウィンドウが開きます。

  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
    
  5. udev ルールを編集して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらのルールにより、Azure または Hyper-V で VM を複製する際に問題が発生する可能性があります。

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. 起動時にネットワーク サービスが開始されるようにします。

    sudo chkconfig network on
    
  7. python-pyasn1 パッケージのインストール:

    sudo yum install python3-pyasn1
    
  8. 現在の yum メタデータをクリアし、更新をインストールします。

    sudo yum clean all
    sudo yum -y update
    
  9. Azure 用にさらにカーネル パラメーターを含めるために、GRUB 構成でカーネルのブート行を変更します。 この手順を行うには、テキスト エディターで /etc/default/grub を開き、GRUB_CMDLINE_LINUX パラメーターを編集します。 次に例を示します。

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

    この変更により、すべてのコンソール メッセージが最初のシリアル ポートに送信され、メッセージを Azure での問題のデバッグに利用できるようになります。 また、UEK を搭載した Oracle Linux 7 では、ネットワーク インターフェイス カードの名前付け規則も無効になります。 次のパラメーターを "削除" することもお勧めします。

       rhgb quiet crashkernel=auto
    

    クラウド環境では、すべてのログをシリアル ポートに送信するため、グラフィカル ブートおよびクワイエット ブートは役立ちません。

    必要に応じて crashkernel オプションは構成したままにすることができます。 このパラメーターにより、VM 内の使用可能なメモリ量が 128 MB 以上減少するため、VM のサイズが小さい場合、問題になる可能性があります。

  10. /etc/default/grub の編集が完了したら、grub 構成を再構築します。

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  11. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。 通常これが既定の設定です。

  12. Azure Linux エージェントと依存関係をインストールします。

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent
    
  13. プロビジョニングを処理する cloud-init をインストールします。

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
  14. cloud-initwaagent を構成します。

    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /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
    
    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 - Oracle Linux uses a swapfile by default
    swapoff /mnt/swapfile
    rm /mnt/swapfile -f
    fi
    
    echo "Add console log file"
    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
    
  15. スワップの構成:

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

      以前は、VM が Azure にプロビジョニングされた後に VM にアタッチされたローカルのリソース ディスクを使用してスワップ領域を構成するには、Azure Linux エージェントを使用して自動的に行われていました。 この手順は cloud-init によって処理されるようになりました。 リソース ディスクをフォーマットして、スワップ ファイルを作成するために、Linux エージェントを使用 "しないでください"。 /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
      
    2. スワップのマウント、フォーマット、作成を行う場合は、次のいずれかの方法を使用できます。

      • VM を作成するたびに、cloud-init 構成としてこのコードを渡します。
      • イメージに組み込まれている cloud-init ディレクティブを使用して、VM が作成されるたびにこの手順を実行します。
      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/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  16. VM をプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

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

    Note

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

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

これで、Oracle Linux .vhd を使用して Azure に新しい VM を作成する準備ができました。 .vhd ファイルを Azure に初めてアップロードする場合は、「Create a Linux VM from a custom disk (カスタム ディスクから Linux VM を作成する)」を参照してください。