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つある:
-
手動でのアプローチについては、「 Power Virtual Server を始める 」および 「IBM Power Virtual Server を作成する 」の詳細情報を参照してください。
-
自動化アプローチについては、「 Power Virtual Server with VPC Landing Zonedeployment 」ガイドを参照してください。
-
ビルドイメージ環境のセットアップ
以下の手順では、イメージ作成用のビルドサーバー環境をセットアップする方法を説明します。
-
ビルド・サーバーにログインし、以下のコマンドを実行して登録状況を確認する。
subscription-manager status
-
RHEL OSのパッケージを更新する。
-
ビルド環境のプロキシ設定をチェックし、調整する。 プロキシ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 $?)"
-
data'ディレクトリを作成し、それを指す環境変数をエクスポートする。
mkdir -p /data
export MOUNT_PATH=/data
-
容量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
-
-
ベース画像を保存するディレクトリ
/data/image
を作成する。 -
画像
rhel-9.4-ppc64le-kvm.qcow2
を/data/image
にコピーする。 -
/data/tmp
ディレクトリを作成する。このディレクトリには、ビルド処理中に一時的なイメージが保存される。 -
ビルド・サーバーを設定するために、以下のタスクを完了する。
dnf
RHELパッケージマネージャを使用する。-
xfsprogs
とlvm2
システムパッケージをインストールする。 -
make
、git
、libgcrypt-devel
、go-toolset
の開発パッケージをインストールする。 -
qemu-img
とcloud-utils-growpart
パッケージをインストールする。 -
ファイル
~root/.bashrc
にプロキシホストを追加してプロキシを設定する。export https_proxy='<your_https_proxy>'
-
-
以下の行をファイル
/etc/modules-load.d/ndb.conf
に追加して、ブート時にNBDモジュールがロードされるように設定する。nbd options nbd max_part=8
-
最新リリース
pvsadm-linux-ppc64le
GitHub リポジトリからpvsadm
ツールをダウンロードする。 それを/usr/local/bin/pvsadm
という名前のファイルに保存し、モードを0755
に変更する。 ツールの詳細については、pvsadm
ツールを参照してください。
カスタムOSイメージの構築
IBM Cloud PowerVS 用のカスタムOSイメージのビルド・プロセスは、以下のタスクで構成される。
-
Red Hat Satellite のサブスクリプション認証情報が有効であることを確認する。
-
image-prep.template
という名前の空のファイルを作成し、画像準備テンプレートとして使用する。 -
以下のタスクには、カスタマイズされたイメージの構築に必要なシェルコマンドが含まれています。
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
-
-
pvsadm
ツールを実行する前に、ビルド・サーバーのローカル・スワッピングが無効になっていることを確認する。 そうでない場合、pvsadm
の実行中にエラーmkswap: error: /swapfile is mounted; will not make swapspace
が発生する。 スワッピングを無効にするには、以下のコマンドを実行する。swapoff -a
-
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
-
カスタム作成したOSイメージを Cloud Object Storage (COS)にアップロードする。
Power Virtual Server ワークスペースでのOSイメージのインポート
カスタムブートイメージをインポートするには、 ブートイメージのインポートに関する ガイダンスを参照してください。
新しいインポートOSイメージから Power Virtual Server インスタンスを作成する
新しい Power Virtual Server インスタンスをプロビジョニングするには、「 カスタムブートイメージを使用して新しいインスタンスをプロビジョニングする 」で説明する手順に従います。