6.3. ブートディスクでの iSCSI カーネルパラメーターの設定

イメージ上のカーネルで iSCSI ブートを有効にする必要があります。そのためには、QCOW2 イメージをマウントし、イメージ上で iSCSI コンポーネントを有効にします。

前提条件

  1. Red Hat Enterprise Linux QCOW2 イメージをダウンロードして、アンダークラウドの /home/stack/ ディレクトリーにコピーします。以下のページから、QCOW2 形式で Red Hat Enterprise Linux KVM イメージをダウンロードすることができます。

手順

  1. アンダークラウドに stack ユーザーとしてログインします。
  2. QCOW2 イメージをマウントし、root ユーザーとしてアクセスします。

    1. nbd カーネルモジュールを読み込みます。

      $ sudo modprobe nbd
    2. QCOW イメージを /dev/nbd0 として接続します。

      $ sudo qemu-nbd --connect=/dev/nbd0 <IMAGE>
    3. NBD 上のパーティションを確認します。

      $ sudo fdisk /dev/nbd0 -l

      新しい Red Hat Enterprise Linux QCOW2 イメージには、パーティションが 1 つだけ含まれます。通常、そのパーティションは NBD の /dev/nbd0p1 という名前です。

    4. イメージのマウントポイントを作成します。

      mkdir /tmp/mountpoint
    5. イメージをマウントします。

      sudo mount /dev/nbd0p1 /tmp/mountpoint/
    6. イメージがホストのデバイス情報にアクセスできるように、dev ディレクトリーをマウントします。

      sudo mount -o bind /dev /tmp/mountpoint/dev
    7. ルートディレクトリーをマウントポイントに変更します。

      sudo chroot /tmp/mountpoint /bin/bash
  3. イメージ上で iSCSI を設定します。

    注記

    このステップの一部のコマンドにより、以下のエラーが返される場合があります。

    lscpu: cannot open /proc/cpuinfo: No such file or directory

    このエラーは重要ではないので、エラーを無視して構いません。

    1. resolv.conf ファイルを一時的な場所に移動します。

      # mv /etc/resolv.conf /etc/resolv.conf.bak
    2. Red Hat コンテンツ配信ネットワークの DNS 要求を解決するために、一時的な resolv.conf ファイルを作成します。以下の例では、ネームサーバーに 8.8.8.8 を使用しています。

      # echo "nameserver 8.8.8.8" > /etc/resolv.conf
    3. マウントしたイメージを Red Hat コンテンツ配信ネットワークに登録します。

      # subscription-manager register

      コマンドにより要求されたら、ユーザー名およびパスワードを入力します。

    4. Red Hat Enterprise Linux が含まれるサブスクリプションをアタッチします。

      # subscription-manager list --all --available
      # subscription-manager attach --pool <POOLID>

      <POOLID> をサブスクリプションのプール ID に置き換えます。

    5. デフォルトのリポジトリーを無効にします。

      # subscription-manager repos --disable "*"
    6. Red Hat Enterprise Linux リポジトリーを有効にします。

      • Red Hat Enterprise Linux 7:

        # subscription-manager repos --enable "rhel-7-server-rpms"
      • Red Hat Enterprise Linux 8:

        # subscription-manager repos --enable "rhel-8-for-x86_64-baseos-eus-rpms"
    7. iscsi-initiator-utils パッケージをインストールします。

      # yum install -y iscsi-initiator-utils
    8. マウントしたイメージの登録を解除します。

      # subscription-manager unregister
    9. 元の resolv.conf ファイルを復元します。

      # mv /etc/resolv.conf.bak /etc/resolv.conf
    10. マウントされたイメージのカーネルバージョンを確認します。

      # rpm -qa kernel

      たとえば、出力が kernel-3.10.0-1062.el7.x86_64 の場合、カーネルバージョンは 3.10.0-1062.el7.x86_64 になります。次のステップのために、このカーネルバージョンを書き留めておきます。

      注記

      新しい Red Hat Enterprise Linux QCOW2 イメージには、1 つのカーネルバージョンしかインストールされません。複数のカーネルバージョンがインストールされている場合は、最新のものを使用してください。

    11. initramfs イメージに network および iscsi dracut モジュールを追加します。

      # dracut --force --add "network iscsi" /boot/initramfs-<KERNELVERSION>.img <KERNELVERSION>

      <KERNELVERSION>rpm -qa kernel から取得したバージョン番号に置き換えます。以下の例では、カーネルバージョンに 3.10.0-1062.el7.x86_64 を使用しています。

      # dracut --force --add "network iscsi" /boot/initramfs-3.10.0-1062.el7.x86_64.img 3.10.0-1062.el7.x86_64
    12. マウントされたイメージからホストオペレーティングシステムに戻ります。

      # exit
  4. イメージをアンマウントします。

    1. 一時的なマウントポイントから dev ディレクトリーをアンマウントします。

      $ sudo umount /tmp/mountpoint/dev
    2. マウントポイントからイメージをアンマウントします。

      $ sudo umount /tmp/mountpoint
    3. QCOW2 イメージを /dev/nbd0/ から切断します。

      $ sudo qemu-nbd --disconnect /dev/nbd0
  5. イメージ上で grub メニュー設定を再ビルドします。

    1. libguestfs-tools パッケージをインストールします。

      $ sudo yum -y install libguestfs-tools
      重要

      アンダークラウドに libguestfs-tools パッケージをインストールする場合は、アンダークラウドの tripleo_iscsid サービスとのポートの競合を避けるために iscsid.socket を無効にします。

      $ sudo systemctl disable --now iscsid.socket
    2. QEMU を直接使用するように libguestfs バックエンドを設定します。

      $ export LIBGUESTFS_BACKEND=direct
    3. イメージ上の grub 設定を更新します。

      $ guestfish -a /tmp/images/{{ dib_image }} -m /dev/sda3 sh "mount /dev/sda2 /boot/efi && rm /boot/grub2/grubenv && /sbin/grub2-mkconfig -o /boot/grub2/grub.cfg && cp /boot/grub2/grub.cfg /boot/efi/EFI/redhat/grub.cfg && grubby --update-kernel=ALL --args=\"rd.iscsi.firmware=1\" && cp /boot/grub2/grubenv /boot/efi/EFI/redhat/grubenv && echo Success"