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=0
をenabled=1
に変更します。
Oracle Linux 6.X
重要
Oracle Linux 6.x は既に EOL であることを考慮してください。 Oracle Linux バージョン 6.10 では、2024 年 7 月に終了予定の ELS サポートを利用できます。
Azure 上で実行する仮想マシンのオペレーティング システムで固有の構成手順を完了する必要があります。
Hyper-V マネージャーの中央のウィンドウで仮想マシンを選択します。
[接続] をクリックすると、仮想マシンのウィンドウが開きます。
次のコマンドを実行して NetworkManager をアンインストールします。
sudo rpm -e --nodeps NetworkManager
Note
パッケージがまだインストールされていない場合、このコマンドは失敗してエラー メッセージが表示されます。 このメッセージは予期されたものです。
/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 ルールを編集して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらのルールは、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
次のコマンドを実行して、起動時にネットワーク サービスが開始されるようにします。
sudo chkconfig network on
次のコマンドを実行して python-pyasn1 をインストールします。
sudo yum install python-pyasn1
Azure 用にさらにカーネル パラメーターを含めるために、GRUB 構成でカーネルのブート行を変更します。 これを行うには、テキスト エディターで "/boot/grub/menu.lst" を開き、カーネルに次のパラメーターが含まれていることを確認します。
console=ttyS0 earlyprintk=ttyS0
この設定により、すべてのコンソール メッセージが最初のシリアル ポートに送信されるので、問題をデバッグしている Azure サポートの役に立ちます。
上記の他に、次のパラメーターを "削除" することをお勧めします。
rhgb quiet crashkernel=auto
クラウド環境では、すべてのログをシリアル ポートに送信するため、グラフィカル ブートおよびクワイエット ブートは役立ちません。
crashkernel
オプションは、必要に応じて構成したままにできますが、このパラメーターを指定すると VM で使用できるメモリ量が 128 MB 以上減少するため、サイズが小さい VM では問題となる可能性がある点に注意してください。SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。 通常これが既定です。
次のコマンドを実行して Azure Linux エージェントをインストールします。 最新バージョンは 2.0.15 です。
sudo yum install WALinuxAgent
手順 2 で説明したように NetworkManager パッケージと NetworkManager-gnome パッケージを削除しなかった場合、WALinuxAgent パッケージをインストールするとこれらのパッケージが削除されます。
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.
次のコマンドを実行して仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
sudo waagent -force -deprovision sudo export HISTSIZE=0 sudo logout
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 ファイル システムを使用できます。
構成手順
Hyper-V マネージャーで仮想マシンを選択します。
[接続] をクリックすると、仮想マシンのコンソール ウィンドウが開きます。
/etc/sysconfig/
ディレクトリに network という名前のファイルを作成し、次のテキストを追加します。NETWORKING=yes HOSTNAME=localhost.localdomain
/etc/sysconfig/network-scripts/
ディレクトリに ifcfg-eth0 という名前のファイルを作成し、次のテキストを追加します。DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
udev ルールを編集して、イーサネット インターフェイスの静的ルールが生成されないようにします。 これらのルールは、Microsoft Azure または Hyper-V で仮想マシンを複製する際に問題の原因となる可能性があります。
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
次のコマンドを実行して、起動時にネットワーク サービスが開始されるようにします。
sudo chkconfig network on
次のコマンドを実行して python-pyasn1 パッケージをインストールします。
sudo yum install python3-pyasn1
次のコマンドを実行して、現在の yum メタデータをクリアし、更新をインストールします。
sudo yum clean all sudo yum -y update
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 では問題になる可能性がある点に注意してください。上記のとおりに "/etc/default/grub" の編集を終了したら、次のコマンドを実行して GRUB 構成をリビルドします。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。 通常これが既定です。
Azure Linux エージェントと依存関係をインストールします。
sudo yum install WALinuxAgent sudo systemctl enable waagent
プロビジョニングを処理する cloud-init をインストールします
sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
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
スワップの構成。 オペレーティング システム ディスクにスワップ領域を作成しないでください。
以前は、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
次のコマンドを実行して仮想マシンをプロビジョニング解除し、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
特定の仮想マシンを移行する際に、一般化されたイメージを作成しない場合、プロビジョニング解除手順をスキップしてください。
Hyper-V マネージャーで [アクション] >[シャットダウン] をクリックします。 これで、Linux VHD を Azure にアップロードする準備が整いました。
次のステップ
これで、Oracle Linux .vhd を使用して、Azure に新しい仮想マシンを作成する準備が整いました。 .vhd ファイルを Azure に初めてアップロードする場合は、「Create a Linux VM from a custom disk (カスタム ディスクから Linux VM を作成する)」を参照してください。