Azure 用の SLES または openSUSE Leap 仮想マシンの準備を行う
適用対象: ✔️ Linux VM ✔️ フレキシブル スケール セット 適用対象: ✔️ 均一スケール セット
場合によっては、Azure 環境でカスタマイズされた SUSE Linux Enterprise Server (SLES) または openSUSE Leap Linux 仮想マシン (VM) を使って、これらの種類の VM をオートメーションで構築できるようにしたいことがあります。 この記事では、SUSE Linux オペレーティング システムを格納したカスタム Azure 仮想ハード ディスク (VHD) を作成してアップロードする方法を示します。
前提条件
この記事は、SLES または openSUSE Leap Linux オペレーティング システムを仮想ハード ディスクに既にインストールしてあるものとします。 .vhd ファイルを作成するツールはいくつかあります。 たとえば、Hyper-V などの仮想化ソリューションを使用できます。 詳細については、「 Hyper-V をインストールして仮想マシンを作成する」を参照してください。
SLES/openSUSE Leap のインストールに関する注意事項
- Linux イメージの Azure 用の準備に関するその他のヒントについては、「Linux のインストールに関する一般的な注記」をご覧ください。
- Azure では、Windows ハード ディスク イメージ (.vhdx) ファイルはサポートされていません。 仮想マシンの外部では、VHD (.vhd) ファイルのみがサポートされます。 Hyper-V マネージャーまたは
Convert-VHD
コマンドレットを使って、ディスクを VHD 形式に変換できます。 - Azure では、Gen1 (BIOS ブート) および Gen2 (UEFI ブート) 仮想マシンがサポートされています。
- 仮想ファイル割り当てテーブル (VFAT) カーネル モジュールを、カーネルで有効にする必要があります。
- OS ディスクにスワップ パーティションを構成しないでください。 一時的なリソース ディスク上にスワップ ファイルを作成するよう Linux エージェントを構成できます。 スワップ領域の構成については、この記事で後ほど示す手順で詳しく説明します。
- Azure の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 生ディスクから VHD に変換するときは、変換前の生ディスクのサイズが 1 MB の倍数であることを確認してください。 詳しくは、「Linux のインストールに関する一般的な注記」をご覧ください。
Note
cloud-init バージョン 21.2 以降では、ユーザー定義関数 (UDF) の要件がなくなります。 ただし、udf
モジュールが有効になっていないと、プロビジョニングの間に CD-ROM がマウントされず、カスタム データが適用されません。 これを回避するには、ユーザー データを適用します。 ただし、カスタム データとは異なり、ユーザー データは暗号化されません。 詳しくは、cloud-init のドキュメントの「ユーザー データの形式」をご覧ください。
SUSE Studio を使用する
SUSE Studio では、Azure および Hyper-V 用の SLES または openSUSE Leap のイメージを簡単に作成、管理できます。 SLES または openSUSE Leap のイメージをカスタマイズする場合は、SUSE Studio を使うことをお勧めします。
SUSE では、独自の VHD を構築する代わりに、VM Depot で SLES 用の BYOS (Bring Your Own Subscription) イメージを発行することもできます。
Azure 用に SLES を準備する
必要に応じて、Azure モジュールと Hyper-V モジュールを構成します。
ソフトウェア ハイパーバイザーが Hyper-V でない場合、Azure で正常に起動するには、他のモジュールを初期 RAM ディスク (initramfs) に追加する必要があります。
/etc/dracut.conf ファイルを編集し、次の行をファイルに追加します。
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
dracut
コマンドを実行して、initramfs ファイルをリビルドします。sudo dracut --verbose --force
シリアル コンソールを設定します。
シリアル コンソールを正常に操作するには、/etc/defaults/grub ファイルで複数の変数を設定し、サーバーで GRUB を作成し直す必要があります。
# Add console=ttyS0 and earlyprintk=ttS0 to the variable. # Remove "splash=silent" and "quiet" options. GRUB_CMDLINE_LINUX_DEFAULT="audit=1 no-scroll fbcon=scrollback:0 mitigations=auto security=apparmor crashkernel=228M,high crashkernel=72M,low console=ttyS0 earlyprintk=ttyS0" # Add "console serial" to GRUB_TERMINAL. GRUB_TERMINAL="console serial" # Set the GRUB_SERIAL_COMMAND variable. GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
SUSE Linux Enterprise システムを登録すると、更新プログラムをダウンロードしてパッケージをインストールできるようになります。
最新の更新ログラムでシステムを更新します。
sudo zypper update
Azure Linux VM エージェント (
waagent
) と cloud-init をインストールします。sudo SUSEConnect -p sle-module-public-cloud/15.2/x86_64 (SLES 15 SP2) sudo zypper refresh sudo zypper install python-azure-agent sudo zypper install cloud-init
waagent
と cloud-init がブート時に起動されるようにしますsudo systemctl enable waagent sudo systemctl enable cloud-init-local.service sudo systemctl enable cloud-init.service sudo systemctl enable cloud-config.service sudo systemctl enable cloud-final.service sudo systemctl daemon-reload sudo cloud-init clean
cloud-init の構成を更新します。
cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg datasource_list: [ Azure ] datasource: Azure: apply_network_config: False EOF
sudo cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/05_logging.cfg # 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 # Make sure mounts and disk_setup are in the init stage: 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 つのオプションは、VM を作成するたびに cloud-init の構成を渡すことです。
もう 1 つのオプションは、イメージで cloud-init ディレクティブを使って、VM が作成されるたびにスワップ領域を構成することです。
cat <<EOF | sudo tee -a /etc/systemd/system.conf 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' EOF cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg #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.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"] EOF
以前は、Azure で仮想マシンがプロビジョニングされた後、仮想マシンにアタッチされたローカル リソース ディスクを使ってスワップ領域を自動的に構成するため、Azure Linux エージェントが使われていました。 このステップは cloud-init によって処理されるようになったので、リソース ディスクをフォーマットしたり、スワップ ファイルを作成したりするために、Linux エージェントを使用 "しないでください"。 /etc/waagent.conf を適切に変更するには、次のコマンドを使います。
sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=auto/g' /etc/waagent.conf sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/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
21.2 より前のバージョンの cloud-init を使っている場合は、
udf
モジュールが有効になっていることを確認してください。 それを削除または無効化すると、プロビジョニングまたは起動が失敗します。 cloud-init バージョン 21.2 以降では、UDF の要件がなくなります。/etc/fstab ファイルで UUID (
by-uuid
) を使ってディスクが参照されていることを確認します。イーサネット インターフェイスに関する静的ルールが生成されないように、udev ルールとネットワーク アダプター構成ファイルを削除します。 Microsoft Azure または Hyper-V で仮想マシンを複製するとき、これらのルールが原因で問題が発生する可能性があります。
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules sudo rm -f /etc/udev/rules.d/85-persistent-net-cloud-init.rules sudo rm -f /etc/sysconfig/network/ifcfg-eth*
/etc/sysconfig/network/dhcp ファイルを編集し、
DHCLIENT_SET_HOSTNAME
パラメーターを次のように変更することをお勧めします。DHCLIENT_SET_HOSTNAME="no"
/etc/sudoers ファイルに次の行がある場合は、それをコメント アウトするか削除します。
Defaults targetpw # Ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this setting together with 'Defaults targetpw'!
Secure Shell (SSH) サーバーがインストールされており、起動時に開始するように構成されていることを確認します。
sudo systemctl enable sshd
cloud-init ステージをクリーンします。
sudo cloud-init clean --seed --logs
次のコマンドを実行して仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
特定の仮想マシンを移行していて、一般化されたイメージを作成したくない場合は、プロビジョニング解除のステップをスキップしてください。
sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo export HISTSIZE=0 sudo rm -f ~/.bash_history
バージョン 15.4 以上の openSUSE を準備する
Hyper-V マネージャーの中央のペインで仮想マシンを選びます。
[接続] を選んで、仮想マシンのウィンドウを開きます。
ターミナルで
zypper lr
コマンドを実行します。 このコマンドから次の例のような出力が返される場合、リポジトリは想定どおりに構成されているため、調整は必要ありません。 (バージョン番号は異なる場合があります)。# Alias 名前 Enabled GPG チェック 更新 1 Cloud:Tools_15.4 Cloud:Tools-> はい (r ) Yes はい 2 openSUSE_stable_OSS openSUSE_st-> はい (r ) Yes はい 3 openSUSE_stable_Updates openSUSE_st-> はい (r ) Yes はい メッセージ "定義されているリポジトリがありません" が
zypper lr
から表示される場合は、リポジトリを手動で追加する必要があります。これらのリポジトリを追加するためのコマンドの例を次に示します (バージョンとリンクは異なる場合があります):
sudo zypper ar -f https://download.opensuse.org/update/openSUSE-stable openSUSE_stable_Updates sudo zypper ar -f https://download.opensuse.org/repositories/Cloud:/Tools/15.4 Cloud:Tools_15.4 sudo zypper ar -f https://download.opensuse.org/distribution/openSUSE-stable/repo/oss openSUSE_stable_OSS
その後、
zypper lr
コマンドをもう一度実行して、リポジトリが追加されたことを確認できます。 関連する更新リポジトリのいずれかが有効になっていない場合は、次のコマンドを使ってそれを有効にします。sudo zypper mr -e [NUMBER OF REPOSITORY]
カーネルを最新のバージョンに更新します。
sudo zypper up kernel-default
または、すべての最新のパッチでオペレーティング システムを更新します。
sudo zypper update
Azure Linux エージェントをインストールします。
sudo zypper install WALinuxAgent
Azure 用に他のカーネル パラメーターを含めるには、GRUB 構成でカーネルのブート行を変更します。 これを行うには、テキスト エディターで /boot/grub/menu.lst を開き、既定のカーネルに次のパラメーターが含まれていることを確認します。
console=ttyS0 earlyprintk=ttyS0
このオプションにより、すべてのコンソール メッセージが最初のシリアル ポートに送信されるようになり、Azure サポートが問題をデバッグするのに役立つ場合があります。 また、カーネルのブート行に次のパラメーターがある場合は削除します。
libata.atapi_enabled=0 reserve=0x1f0,0x8
/etc/sysconfig/network/dhcp ファイルを編集して、
DHCLIENT_SET_HOSTNAME
パラメーターを次の設定に変更することをお勧めします。DHCLIENT_SET_HOSTNAME="no"
/etc/sudoers ファイルに次の行がある場合は、それをコメント アウトするか削除します。 これは重要な手順です。
Defaults targetpw # ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。
OS ディスクにスワップ領域を作成しないでください。
Azure Linux エージェントは、Azure でプロビジョニングされた後、VM にアタッチされたローカル リソース ディスクを使って、スワップ領域を自動的に構成できます。 ローカル リソース ディスクは "一時" ディスクであり、VM がプロビジョニング解除されると空になります。
Azure Linux エージェントをインストールした後、/etc/waagent.conf のパラメーターを次のように変更します。
ResourceDisk.Format=n ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=n ResourceDisk.SwapSizeMB=2048 ## NOTE: set the size to whatever you need it to be.
起動時に Azure Linux エージェントが実行されることを確認します。
sudo systemctl enable waagent.service
次のコマンドを実行して仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
特定の仮想マシンを移行していて、一般化されたイメージを作成したくない場合は、プロビジョニング解除のステップをスキップしてください。
sudo rm -f ~/.bash_history # Remove current user history sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history # Remove root user history sudo export HISTSIZE=0
Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。
次のステップ
これで、SUSE Linux VHD を使って Azure に新しい仮想マシンを作成する準備が整いました。 .vhd ファイルを Azure に初めてアップロードする場合は、「Create a Linux VM from a custom disk (カスタム ディスクから Linux VM を作成する)」を参照してください。