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

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

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

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 システムをインストールする場合は、LVM (通常、多くのインストールで既定) ではなく標準パーティションを使用することをお勧めします。 これらの標準パーティションを使うと、特に OS ディスクをトラブルシューティングのために別の VM に接続する必要がある場合に、LVM 名と、複製された VM との競合が回避されます。 必要な場合は、LVM または RAID をデータ ディスク上で使用できます。
  • 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 は既に EOL であることを考慮してください。 Oracle Linux バージョン 6.10 では、2024 年 7 月に終了予定ELS サポートを利用できます。

Azure 上で実行する仮想マシンのオペレーティング システムで固有の構成手順を完了する必要があります。

  1. Hyper-V マネージャーの中央のウィンドウで仮想マシンを選択します。

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

  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 ルールを編集して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらのルールは、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
    
  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 で説明したように NetworkManager パッケージと NetworkManager-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. 次のコマンドを実行して仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

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


Oracle Linux 7.0 以降

Oracle Linux 7 での変更

Azure 用の Oracle Linux 7 仮想マシンを準備する手順は、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 マネージャーで仮想マシンを選択します。

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

    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 での問題のデバッグに利用できるようになります。 また、これにより、Unbreakable Enterprise Kernel を使用する Oracle Linux 7 で NIC の名前付け規則がオフになります。 上記のほかに、次のパラメーターを 削除 することをお勧めします。

       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-init に対して waagent を構成します

    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. スワップの構成。 オペレーティング システム ディスクにスワップ領域を作成しないでください。

    以前は、Azure で仮想マシンがプロビジョニングされた後に、仮想マシンに接続されたローカル リソース ディスクを使用してスワップ領域を自動的に構成するために、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
    

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

    • VM を作成するたびに、cloud-init 構成としてこれを渡す
    • VM が作成されるたびに、これを実行するイメージに組み込まれている 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/resource"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    
  16. 次のコマンドを実行して仮想マシンをプロビジョニング解除し、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

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

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

次のステップ

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