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 を準備する

  1. 必要に応じて、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
    
  2. シリアル コンソールを設定します。

    シリアル コンソールを正常に操作するには、/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
    
  3. SUSE Linux Enterprise システムを登録すると、更新プログラムをダウンロードしてパッケージをインストールできるようになります。

  4. 最新の更新ログラムでシステムを更新します。

    sudo zypper update
    
  5. 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
    
  6. 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
    
  7. 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
    
  8. スワップ パーティションをマウント、フォーマット、作成する場合の 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
    
  9. 以前は、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 の要件がなくなります。

  10. /etc/fstab ファイルで UUID (by-uuid) を使ってディスクが参照されていることを確認します。

  11. イーサネット インターフェイスに関する静的ルールが生成されないように、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*
    
  12. /etc/sysconfig/network/dhcp ファイルを編集し、DHCLIENT_SET_HOSTNAME パラメーターを次のように変更することをお勧めします。

    DHCLIENT_SET_HOSTNAME="no"
    
  13. /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'!
    
  14. Secure Shell (SSH) サーバーがインストールされており、起動時に開始するように構成されていることを確認します。

    sudo systemctl enable sshd
    
  15. cloud-init ステージをクリーンします。

    sudo cloud-init clean --seed --logs
    
  16. 次のコマンドを実行して仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。

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

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

バージョン 15.2 以上の openSUSE を準備する

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

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

  3. ターミナルで zypper lr コマンドを実行します。 このコマンドから次の例のような出力が返される場合、リポジトリは想定どおりに構成されているため、調整は必要ありません。 (バージョン番号は異なる場合があります)。

    # Alias 名前 Enabled 更新
    1 Cloud:Tools_15.2 Cloud:Tools_15.2 はい 有効
    2 openSUSE_15.2_OSS openSUSE_15.2_OSS はい 有効
    3 openSUSE_15.2_Updates openSUSE_15.2_Updates はい はい

    コマンドから "No repositories defined" (リポジトリが定義されていません) が返る場合は、次のコマンドを使ってこれらのリポジトリを追加します。

    sudo zypper ar -f http://download.opensuse.org/repositories/Cloud:Tools/openSUSE_15.2 Cloud:Tools_15.2
    sudo zypper ar -f https://download.opensuse.org/distribution/15.2/repo/oss openSUSE_15.2_OSS
    sudo zypper ar -f http://download.opensuse.org/update/15.2 openSUSE_15.2_Updates
    

    その後、zypper lr コマンドをもう一度実行して、リポジトリが追加されたことを確認できます。 関連する更新リポジトリのいずれかが有効になっていない場合は、次のコマンドを使ってそれを有効にします。

    sudo zypper mr -e [NUMBER OF REPOSITORY]
    
  4. カーネルを最新のバージョンに更新します。

    sudo zypper up kernel-default
    

    または、すべての最新のパッチでオペレーティング システムを更新します。

    sudo zypper update
    
  5. Azure Linux エージェントをインストールします。

    sudo zypper install WALinuxAgent
    
  6. Azure 用に他のカーネル パラメーターを含めるには、GRUB 構成でカーネルのブート行を変更します。 これを行うには、テキスト エディターで /boot/grub/menu.lst を開き、既定のカーネルに次のパラメーターが含まれていることを確認します。

     console=ttyS0 earlyprintk=ttyS0
    

    このオプションにより、すべてのコンソール メッセージが最初のシリアル ポートに送信されるようになり、Azure サポートが問題をデバッグするのに役立つ場合があります。 また、カーネルのブート行に次のパラメーターがある場合は削除します。

     libata.atapi_enabled=0 reserve=0x1f0,0x8
    
  7. /etc/sysconfig/network/dhcp ファイルを編集して、DHCLIENT_SET_HOSTNAME パラメーターを次の設定に変更することをお勧めします。

     DHCLIENT_SET_HOSTNAME="no"
    
  8. /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'!
    
  9. SSH サーバーがインストールされており、起動時に開始するように構成されていることを確認します。

  10. 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.
    
  11. 起動時に Azure Linux エージェントが実行されることを確認します。

    sudo systemctl enable waagent.service
    
  12. 次のコマンドを実行して仮想マシンをプロビジョニング解除し、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
    
  13. Hyper-V マネージャーで [アクション]>[シャットダウン] の順に選択します。

次のステップ

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