IBM Cloud Docs
SAP、RHEL上でカスタムOSイメージのビルドプロセスを行う。 IBM® Power® Virtual Server

SAP、RHEL上でカスタムOSイメージのビルドプロセスを行う。 IBM® Power® Virtual Server

以下の情報では、 IBM® Power® Virtual Server 上の SAP ソフトウェア用に、 Red Hat Enterprise Linux (RHEL) 上でカスタム・オペレーティング・システム (OS) イメージを構築する方法について説明します。

カスタムOSイメージのビルド要件

イメージのビルドプロセスを開始する前に、以下の要件を完了してください:

  • IBM Cloud アカウントを 作成し、 Power Virtual Server にイメージビルドサーバーをデプロイするために必要な認証情報を取得します。 アイデンティティとアクセス管理(IAM)の詳細については、『 Managing identity and access management(IAM)for IBM® Power® Virtual Server 』に記載されている。

  • IBM Cloud Object Storage、ベース画像をアップロードできるようにしてください。 始め方については、 IBM Cloud Object Storage を ご覧ください。

  • Red Hat Enterprise Linux から Red Hat Enterprise Linux 9 KVM ゲストイメージ rhel-9.4-ppc64le-kvm.qcow2 をダウンロードしてください。

    カスタムOSイメージの構築に関する以下のガイダンスは、RHEL 9.4 OSイメージに基づいています。

  • イメージビルドサーバーを作成し、イメージビルド環境を設定し、OSイメージをビルドする。 RHEL 9.2 ( RHEL9-SP2-SAP-NETWEAVER ) またはそれ以上の RHEL バージョンが動作する Power Virtual Server インスタンスで構成され、200 GByte のストレージ容量が追加されます。 イメージビルドサーバーを設定する方法は2つある:

ビルドイメージ環境のセットアップ

以下の手順では、イメージ作成用のビルドサーバー環境をセットアップする方法を説明します。

  1. ビルド・サーバーにログインし、以下のコマンドを実行して登録状況を確認する。

    subscription-manager status
    
  2. RHEL OSのパッケージを更新する。

  3. ビルド環境のプロキシ設定をチェックし、調整する。 プロキシIPアドレスまたは URL を使用して、一時的な HTTPS プロキシ設定を行います。 IBM Cloud カタログから VPC landing zone、自動化された Power Virtual Server をデプロイした場合は、このプロキシアドレス http://10.30.40.7:3128/ を設定に使用する。

    export https_proxy="http://10.30.40.7:3128/"  || die "Set HTTPS proxy failed (rc $?)"
    
  4. data'ディレクトリを作成し、それを指す環境変数をエクスポートする。

    mkdir -p /data
    
    export MOUNT_PATH=/data
    
  5. 容量200GBの追加ストレージボリュームを取り付け、 /data ファイルシステムを作成します。

    • multipath コマンドを実行して、利用可能なストレージボリュームとそのワールドワイドネーム(WWN)を特定する。 コマンド出力に200GBのストレージボリュームが1つだけ表示されていることを確認する。 そうしないと、ファイルシステムの作成がうまくいかない。

      multipath -ll
      
    • 物理ボリューム、論理ボリューム、ボリュームグループ、およびマウントディレクトリについて、以下の変数をエクスポートします。

      export PV_SIZE=200G
      
      export LV_NAME=image_lv
      
      export VG_NAME=image_vg
      
    • 物理ボリュームと論理ボリュームを作成する。

      devices=$(multipath -ll | grep -B 1 $PV_SIZE | grep dm- | awk '{print "/dev/"$2}' | tr '\n' ' ')
      
      stripes=$(multipath -ll | grep -B 1 $PV_SIZE | grep dm- | awk '{print "/dev/"$2}' | wc | awk '{print $1}')
      
      pvcreate $devices
      
      vgcreate ${VG_NAME} ${devices}
      
      lvcreate -i${stripes} -I64 -l100%VG -n ${LV_NAME} ${VG_NAME}
      
      mkfs.xfs /dev/mapper/${VG_NAME}-${LV_NAME}
      
    • 作成された論理ボリュームがアクティブかどうかを確認します。

      lvscan
      
    • ファイル・システムをマウントする。

      mount -t xfs -o defaults,nofail --source /dev/mapper/${VG_NAME}-${LV_NAME} --target ${MOUNT_PATH}
      
    • ファイルシステムを /etc/fstab ファイルに追加する。

      echo "/dev/mapper/${VG_NAME}-${LV_NAME}  ${MOUNT_PATH} xfs defaults,nofail 0 0" >> /etc/fstab
      
    • マウントされているすべてのファイルシステムのリストにファイルシステムが存在することを確認する。

      df -h
      
  6. ベース画像を保存するディレクトリ /data/image を作成する。

  7. 画像 rhel-9.4-ppc64le-kvm.qcow2/data/image にコピーする。

  8. /data/tmp ディレクトリを作成する。このディレクトリには、ビルド処理中に一時的なイメージが保存される。

  9. ビルド・サーバーを設定するために、以下のタスクを完了する。 dnf RHELパッケージマネージャを使用する。

    • xfsprogslvm2 システムパッケージをインストールする。

    • makegitlibgcrypt-develgo-toolset の開発パッケージをインストールする。

    • qemu-imgcloud-utils-growpart パッケージをインストールする。

    • ファイル ~root/.bashrc にプロキシホストを追加してプロキシを設定する。

      export https_proxy='<your_https_proxy>'
      
  10. 以下の行をファイル /etc/modules-load.d/ndb.conf に追加して、ブート時にNBDモジュールがロードされるように設定する。

    nbd
    options nbd max_part=8
    
  11. 最新リリース pvsadm-linux-ppc64le GitHub リポジトリから pvsadm ツールをダウンロードする。 それを /usr/local/bin/pvsadm という名前のファイルに保存し、モードを 0755 に変更する。 ツールの詳細については、 pvsadm ツールを参照してください。

カスタムOSイメージの構築

IBM Cloud PowerVS 用のカスタムOSイメージのビルド・プロセスは、以下のタスクで構成される。

  1. Red Hat Satellite のサブスクリプション認証情報が有効であることを確認する。

  2. image-prep.template という名前の空のファイルを作成し、画像準備テンプレートとして使用する。

  3. 以下のタスクには、カスタマイズされたイメージの構築に必要なシェルコマンドが含まれています。 image-prep.template 以下のコマンドをテンプレートに追加する。 これらのコマンドは、 pvsadm ツールを使ってイメージ作成中にベース OS イメージを更新し、最終的な SAP-ready OS イメージを作成します。 指揮官の命令は重要であり、変えてはならない。

    • エラー処理を含む以下の行をコピーし、テンプレートのヘッダーとして使用する。

      #!/usr/bin/env bash
      set -o errexit
      set -o nounset
      set -o pipefail
      
      die() {
        echo -e "\n${1}"
        set +o errexit
        set +o nounset
        exit 1
      }
      
    • 一時ネームサーバーを追加する。

      echo "nameserver 9.9.9.9" >> /etc/resolv.conf \
          || die "Add nameserver failed (rc $?)"
      
    • 作業ディレクトリ /tmp/work を作成し、環境変数としてエクスポートする。

      mkdir -p /tmp/work || die "Create work directory failed (rc $?)"
      
      export WORK_DIR=/tmp/work
      
    • 25GB スワップファイルを作成し、パーミッションを追加し、正しく作成されていることを確認する。

      fallocate -l 25G /swapfile || die "allocate swapfile failed (rc $?)"
      
      chmod 600 /swapfile || die "chmod swapfile failed (rc $?)"
      
      mkswap /swapfile || die "mkswap swapfile failed (rc $?)"
      
      swapon /swapfile || die "swapon swapfile failed (rc $?)"
      
      swapon --show
      
      echo "/swapfile swap swap defaults 0 0" >> /etc/fstab || die "update fstab with swapfile failed (rc $?)"
      
      echo "swapon -s"
      
    • Red Hat Satellite を購読し、 SAP リポジトリを有効にする。 サブスクリプションのユーザー名、パスワード、リリース・バージョンには、独自の値を使用してください。

      subscription-manager register \
          --force --auto-attach \
          --username=<SUBSCRIPTION_USER>  \
          --password=<SUBSCRIPTION_PASSWORD> \
          --release=<OS_VERSION> \
         || die "Register subscription failed (rc $?)"
      
      subscription-manager repos \
          --disable="*" \
          --enable="rhel-9-for-$(uname -m)-baseos-e4s-rpms" \
          --enable="rhel-9-for-$(uname -m)-appstream-e4s-rpms" \
          --enable="rhel-9-for-$(uname -m)-sap-solutions-e4s-rpms" \
          --enable="rhel-9-for-$(uname -m)-sap-netweaver-e4s-rpms" \
          --enable="rhel-9-for-$(uname -m)-highavailability-e4s-rpms"\
          --enable="codeready-builder-for-rhel-9-$(uname -m)-rpms" \
          || die "Repository configuration failed (rc $?)"
      
    • パッケージ・グループ・サーバーをインストールする。

      dnf -y group install server \
          || die "Installing server group packages failed (rc $?)"
      
    • システムパッケージをインストールする。

      dnf -y install \
          cloud-init \
          device-mapper-multipath \
          libxcrypt-compat \
          glibc-langpack-en \
          || die "Install system packages failed (rc $?)"
      
    • grub2を更新します。

      dnf -y reinstall grub2-common \
          || die "Reinstall system package failed (rc $?)"
      
      dnf -y update grub2 \
          || die "Update grub2 package failed (rc $?)"
      
    • Ansible と SAP 用の Red Hat システム・ロールをインストールする。

      dnf -y install ansible-core rhel-system-roles rhel-system-roles-sap \
          || die "Install Ansible and RH System Roles failed (rc $?)"
      
    • EPEL リポジトリを有効にします。

      dnf -y install "https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm" \
          || die "Installation EPEL configuration failed (rc $?)"
      
    • IBM Power tools リポジトリを設定します。

      dnf -y install "https://public.dhe.ibm.com/software/server/POWER/Linux/yum/download/ibm-power-repo-latest.noarch.rpm" \
          || die "Installation IBM Power Tools configuration failed (rc $?)"
      
      echo 'y' | (/opt/ibm/lop/configure \
          || die "Power Tools configuration failed (rc $?)")
      
    • IBM Power toolsをインストールし、リポジトリを無効にする。

      dnf config-manager --set-disabled Advance_Toolchain \
          || die "Disable Advance Toolchain repository failed (rc $?)"
      
      dnf -y install ibm-power-managed-rhel9 \
         || die "Install IBM Power Tools failed (rc $?)"
      
      dnf config-manager --set-disabled IBM_Power_Tools \
          || die "Disable IBM Power Tools repository failed (rc $?)"
      
    • OSのアップデート。

      dnf -y update || die "OS update failed (rc $?)"
      
    • EPEL リポジトリを削除します。

      dnf -y remove epel-release \
          || die "Uninstall EPEL configuration failed (rc $?)"
      
    • Red Hat Satellite サーバの登録を解除する。

      subscription-manager unregister \
          || die "Unregister subscription failed (rc $?)"
      
      subscription-manager clean \
          || die "Clean subscription failed (rc $?)"
      
    • 暗号化ポリシーを変更する( SHA1/CBC を無効にする)。

      echo -e "cipher@ssh = -*-CBC\n" \
         > /etc/crypto-policies/policies/modules/NO-CBC.pmod \
         || die "Create of CBC disabling file failed (rc $?)"
      
      update-crypto-policies --set DEFAULT:NO-SHA1:NO-CBC \
          || die "Update of cryptografic policy failed (rc $?)"
      
    • 基本的なマルチパスコンフィギュレーションを作成する。

      echo -e "defaults {\n \
          user_friendly_names no\n \
          find_multipaths smart\n}\n" \
          > /etc/multipath.conf \
          || die "Create multipath configuration failed (rc $?)"
      
    • Ansible インベントリーを定義する。

      echo -e "localhost ansible_connection=local\n" > /root/inventory \
          || die "Create Ansible inventory file failed (rc $?)"
      
    • SAP HANA と NetWeaver 用に Ansible yml-files を作成する。

      cat <<EOF > /root/sap-hana.yml \
        || die "Create SAP HANA Ansible file failed (rc $?)"
      - hosts: localhost
        vars:
         sap_hana_preconfigure_min_rhel_release_check: false
         sap_hana_preconfigure_install_ibm_power_tools: false
         sap_hana_preconfigure_add_ibm_power_repo: false
        connection: local
        roles:
          - redhat.sap_install.sap_general_preconfigure
          - redhat.sap_install.sap_hana_preconfigure
      EOF
      
      cat <<EOF > /root/sap-netweaver.yml \
        || die "Create SAP NetWeaver Ansible file failed (rc $?)"
      - hosts: localhost
        connection: local
        roles:
          - redhat.sap_install.sap_general_preconfigure
          - redhat.sap_install.sap_netweaver_preconfigure
      EOF
      
      cat <<EOF > /root/sap-preconfigure.yml \
        || die "Create SAP preconfiguration Ansible file failed (rc $?)"
      - hosts: localhost
        connection: local
        roles:
          - redhat.sap_install.sap_general_preconfigure
      EOF
      
    • ファイル /etc/sysctl.conf のデフォルト・カーネル・パラメーターを変更する。

      cat <<EOF >> /etc/sysctl.conf \
       || die "Change of kernel parameter failed (rc $?)"
      net.core.rmem_max = 56623104
      net.core.wmem_max = 56623104
      net.ipv4.tcp_rmem = 65536 262088 56623104
      net.ipv4.tcp_wmem = 65536 262088 56623104
      net.ipv4.tcp_mem = 56623104 56623104 56623104
      EOF
      
    • ibmvethデバイスで受信フローステアリング(RFS)を有効にし、ファイル /etc/udev/rules.d/70-ibmveth-rfs.rules を調整する。

      cat <<EOF >> /etc/udev/rules.d/70-ibmveth-rfs.rules \
       || die "Create udev rule for RFS failed (rc $?)"
      # Enable Receive Flow Steering (RFS) on ibmveth devices
      SUBSYSTEM=="net",ACTION=="add",DRIVERS=="ibmveth",RUN{program}+="/bin/bash -c 'echo 32768 > /sys/\$DEVPATH/queues/rx-0/rps_flow_cnt';"
      EOF
      

      ファイル /etc/sysctl.d/95-enable-rfs.conf で受信フローステアリング(RFS)を有効にする。

      cat <<EOF >> /etc/sysctl.d/95-enable-rfs.conf \
       || die "Create kernel parameter file for RFS failed (rc $?)"
      # Enable Receive Flow Steering (RFS)
      net.core.rps_sock_flow_entries=32768
      EOF
      
    • SSHデーモンを設定する。

      sed -i \
          -e 's/^\(#\)\?PermitRootLogin .*/PermitRootLogin yes/g' \
          -e 's/^\(#\)\?PasswordAuthentication .*/PasswordAuthentication no/g' \
          -e 's/^\(#\)\?MaxStartups .*/MaxStartups 10:30:60/g' \
          /etc/ssh/sshd_config \
          || die "Failed SSH daemon configuration (rc $?)"
      
    • GRUBを適応させる。

      • PReP パーティションが存在することを確認し、更新する。

        prep_partition=$(fdisk -l | grep -i ppc | grep -i loop | awk '{print $1}')
        
        # Check if a PReP partition was found
        if [ -z "$prep_partition" ]; then
          echo "No PReP partition found with /dev/loop."
          exit 1
        else
          echo "PReP partition found: $prep_partition"
        fi
        
      • PReP パーティションに grub2 をインストールする。

        grub2-install "$prep_partition" \
            || die "Install GRUB update failed (rc $?)"
        
      • bootlistコマンドを実行する。

        bootlist -m normal -o || die "Setting boot list failed (rc $?)"
        
      • GRUBのデフォルトのタイムアウトオプションを変更する。

        sed -i \
            -e 's/GRUB_TIMEOUT=.*/GRUB_TIMEOUT=20/' \
            /etc/default/grub || die "Fail to change default GRUB options (rc $?)"
        
      • GRUBの設定を更新する。

        grubby --update-kernel=ALL \
            --remove-args="net.ifnames=0" \
            --args="console=tty0 console=hvc0,115200n8 crashkernel=2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G rd.shell rd.debug rd.driver.pre=dm_multipath log_buf_len=1M elevator=none" \
            || die "GRUB cmdline configuration update failed (rc $?)"
        
      • すべてのカーネルでマルチパスを有効にする。

        echo -e 'force_drivers+=" dm-multipath "\n' >/etc/dracut.conf.d/10-mp.conf\
            || die "Create of multipath include file for dracut failed (rc $?)"
        
        dracut --regenerate-all --force \
         || die "Regenerate of initramfs images failed (rc $?)"
        for kernel in $(rpm -q kernel | sort -V | sed 's/kernel-//'); do
          dracut --kver ${kernel} --force --add multipath --include /etc/multipath\
          /etc/multipath --include /etc/multipath.conf /etc/multipath.conf \
             || die "Generate initramfs of ${kernel} failed (rc $?)"
        done
        
      • GRUBコンフィギュレーションを生成する。

        grub2-mkconfig -o /boot/grub2/grub.cfg \
            || die "Generate GRUB configuration failed (rc $?)"
        
    • 一時ネームサーバーを削除する。

      sed -i '/nameserver 9.9.9.9/d' /etc/resolv.conf \
          || die "Remove nameserver failed (rc $?)"
      
    • 次回のブート時にSELinuxのリラベリングを有効にする。

      touch /.autorelabel || die "Create relabel file failed (rc $?)"
      
    • ルートユーザーのパスワードを削除する。

      usermod -p '!' root || die "Delete root password failed (rc $?)"
      
    • ファイルシステムをクリーンアップする。

      rm -rf /etc/sysconfig/network-scripts/ifcfg-eth*
      
      rm -rf  /tmp/work
      
      rm -rf /root/.ssh
      
      rm -rf /etc/pki/entitlement/
      
      rm -rf /setup.sh
      
    • コマンド履歴の削除

      history -c
      
  4. pvsadm ツールを実行する前に、ビルド・サーバーのローカル・スワッピングが無効になっていることを確認する。 そうでない場合、 pvsadm の実行中にエラー mkswap: error: /swapfile is mounted; will not make swapspace が発生する。 スワッピングを無効にするには、以下のコマンドを実行する。

    swapoff -a
    
  5. qcow2 イメージを OVA フォーマットに変換するには、 qcow2ova コマンドとともに pvsadm イメージビルドツールを使用します。 コマンド・フラグには、入力形式に応じて自分用にカスタマイズした値を設定する。 以下のフラッグの説明を参照のこと。

    --image-name <string>     Name of the resultant OVA image
    --image-url  <string>     URL or absolute local file path to the qcow2 image
    --image-dist <string>     Image Distribution(supported: rhel, centos, coreos)
    --target-disk-size <int>  Size (in GB) of the target disk volume where OVA will be copied (default 120)
    --rhn-user <string>       RedHat Subscription username. Required when Image distribution is rhel
    --rhn-password <string>   RedHat Subscription password. Required when Image distribution is rhel
    --os-password  <string>   Root user password, will auto-generate the 12 bits password(applicable only for redhat and cento distro)
    --temp-dir <string>       Scratch space to use for OVA generation
    --prep-template <string>  Image preparation script template
    

    例えば、 rhel-9.4-ppc64le-image を新しい OS イメージ名として使用します。 rhel-9.4-ppc64le-kvm.qcow2/data/image にあるベース OS イメージなので、 qcow2 イメージの絶対ローカルパスは /data/image/rhel-9.4-ppc64le-kvm.qcow2 で、イメージ配布は rhel です。 ターゲットディスクボリュームのデフォルト値として120GBが設定されています。 画像準備スクリプトのテンプレートは image-prep.template、スクリプトの名前もカスタマイズ可能です。 pvsadm イメージ・ビルド・ツールの実行を簡単にするために、環境変数も設定できます。

    export IMAGE_NAME=rhel-9.4-ppc64le-image
    export QCOW2_IMAGE_PATH=/data/image/rhel-9.4-ppc64le-kvm.qcow2
    export IMAGE_SIZE=100
    export TARGET_DISK_SIZE=100
    export SUBSCRIPTION_USER=<RedHat subscription username>
    export SUBSCRIPTION_PASSWORD=<RedHat Subscription password>
    export IMAGE_BUILD_DIRECTORY=/data/tmp
    export IMAGE_PREP_SCRIPT=image-prep.template
    
    pvsadm image qcow2ova --image-name ${IMAGE_NAME} \
        --image-url ${QCOW2_IMAGE_PATH} \
        --image-dist rhel \
        --image-size ${IMAGE_SIZE} --target-disk-size ${TARGET_DISK_SIZE} \
        --rhn-user ${SUBSCRIPTION_USER} \
        --rhn-password ${SUBSCRIPTION_PASSWORD}  \
        --temp-dir ${IMAGE_BUILD_DIRECTORY} \
        --prep-template ${IMAGE_PREP_SCRIPT}
    

    pvsadm ツールにはヘルプメニューがあり、使い方、コマンド、フラグについて詳しく説明されている。 以下のコマンドを実行してヘルプメニューにアクセスする。

    pvsadm --help
    
  6. カスタム作成したOSイメージを Cloud Object Storage (COS)にアップロードする。

Power Virtual Server ワークスペースでのOSイメージのインポート

カスタムブートイメージをインポートするには、 ブートイメージのインポートに関する ガイダンスを参照してください。

新しいインポートOSイメージから Power Virtual Server インスタンスを作成する

新しい Power Virtual Server インスタンスをプロビジョニングするには、「 カスタムブートイメージを使用して新しいインスタンスをプロビジョニングする 」で説明する手順に従います。