Proceso personalizado de creación de imágenes de SO en RHEL para soluciones SAP en IBM® Power® Virtual Server
La siguiente información describe cómo crear una imagen personalizada del sistema operativo (SO) en Red Hat Enterprise Linux (RHEL) para el software SAP en IBM® Power® Virtual Server.
Requisitos de creación de imágenes de SO personalizadas
Complete los siguientes requisitos antes de iniciar el proceso de creación de la imagen:
-
Cree una cuenta en IBM Cloud y obtenga las credenciales necesarias para desplegar un servidor de creación de imágenes en Power Virtual Server. Los detalles sobre la administración de identidad y acceso (IAM) se describen en Administración de identidad y acceso(IAM)para IBM® Power® Virtual Server.
-
Asegúrese de que tiene acceso a IBM Cloud Object Storage para poder cargar una imagen de base. Consulte Introducción a IBM Cloud Object Storage para obtener información sobre cómo empezar.
-
Descargue la imagen Red Hat Enterprise Linux 9 KVM Guest Image
rhel-9.4-ppc64le-kvm.qcow2
de Red Hat Enterprise Linux para Power little endian.La siguiente guía para crear una imagen de SO personalizada se basa en la imagen de SO RHEL 9.4.
-
Cree un servidor de creación de imágenes, en el que configurará un entorno de creación de imágenes y creará una imagen del sistema operativo. Consiste en una instancia Power Virtual Server que ejecuta RHEL 9.2 ( RHEL9-SP2-SAP-NETWEAVER ) o una versión RHEL superior, con un volumen de almacenamiento adicional de 200 GByte. Existen dos métodos para configurar el servidor de creación de imágenes:
-
Para un enfoque manual, consulte la información detallada en Introducción a Power Virtual Server y Creación de un Servidor Virtual IBM Power.
-
Para un enfoque automatizado, consulte la guía Power Virtual Server with VPC Landing Zonedeployment.
-
Configurar un entorno de imagen de compilación
Los siguientes pasos describen cómo configurar un entorno de servidor de compilación para la creación de imágenes.
-
Inicie sesión en su servidor de compilación y compruebe su estado de registro ejecutando el siguiente comando.
subscription-manager status
-
Actualice los paquetes del sistema operativo RHEL.
-
Compruebe y ajuste la configuración del proxy para un entorno de compilación. Configure los ajustes temporales del proxy HTTPS utilizando su dirección IP del proxy o URL. Si ha desplegado la automatización Power Virtual Server con VPC landing zone desde el catálogo IBM Cloud, utilice esta dirección proxy
http://10.30.40.7:3128/
para su configuración.export https_proxy="http://10.30.40.7:3128/" || die "Set HTTPS proxy failed (rc $?)"
-
Crea un directorio '/data' y exporta una variable de entorno que apunte a él.
mkdir -p /data
export MOUNT_PATH=/data
-
Conecte un volumen de almacenamiento adicional con una capacidad de 200 GB y cree el sistema de archivos
/data
.-
Ejecute el comando multipath para identificar los volúmenes de almacenamiento disponibles y sus World Wide Names (WWNs). Asegúrese de que la salida del comando sólo muestra un volumen de almacenamiento de 200 GB. De lo contrario, la creación del sistema de archivos no funcionará correctamente..
multipath -ll
-
Exporta las siguientes variables para volúmenes físicos y lógicos, un grupo de volúmenes y un directorio de montaje.
export PV_SIZE=200G
export LV_NAME=image_lv
export VG_NAME=image_vg
-
Cree los volúmenes físicos y lógicos.
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}
-
Comprueba si el volumen lógico creado está activo.
lvscan
-
Montar el sistema de archivos.
mount -t xfs -o defaults,nofail --source /dev/mapper/${VG_NAME}-${LV_NAME} --target ${MOUNT_PATH}
-
Añade el sistema de archivos al archivo
/etc/fstab
.echo "/dev/mapper/${VG_NAME}-${LV_NAME} ${MOUNT_PATH} xfs defaults,nofail 0 0" >> /etc/fstab
-
Asegúrese de que el sistema de archivos está presente en la lista de todos los sistemas de archivos montados.
df -h
-
-
Cree el directorio
/data/image
donde se guardará la imagen base. -
Copie la imagen
rhel-9.4-ppc64le-kvm.qcow2
en/data/image
. -
Cree el directorio
/data/tmp
, en el que se guardará una imagen temporal durante el proceso de compilación. -
Realice las siguientes tareas para configurar el servidor de compilación. Utilice el gestor de paquetes RHEL
dnf
.-
Instale los paquetes de sistema
xfsprogs
ylvm2
. -
Instale los paquetes de desarrollo
make
,git
,libgcrypt-devel
ygo-toolset
. -
Instale los paquetes
qemu-img
ycloud-utils-growpart
. -
Configure un proxy añadiendo su host proxy en el archivo
~root/.bashrc
.export https_proxy='<your_https_proxy>'
-
-
Configure el módulo NBD para que se cargue en el arranque añadiendo las siguientes líneas al archivo
/etc/modules-load.d/ndb.conf
.nbd options nbd max_part=8
-
Descargar el
pvsadm
herramienta de la última versión depvsadm-linux-ppc64le
Repositorio GitHub. Guárdelo en el archivo llamado/usr/local/bin/pvsadm
y cambie el modo a0755
. Para más detalles sobre la herramienta, consultepvsadm
tool.
Creación de una imagen personalizada del sistema operativo
El proceso de creación de una imagen de SO personalizada para IBM Cloud PowerVS consta de las siguientes tareas.
-
Compruebe que las credenciales de suscripción de Red Hat Satellite son válidas.
-
Cree un archivo vacío llamado
image-prep.template
y utilícelo como plantilla de preparación de imágenes. -
Las siguientes tareas contienen los comandos shell necesarios para crear una imagen personalizada. Añada estos comandos a la plantilla
image-prep.template
. Los comandos actualizan la imagen del SO base durante la creación de la imagen con la herramientapvsadm
para crear la imagen del SO final SAP-ready. El orden de mando es importante y no debe modificarse.-
Copie las siguientes líneas, incluido el tratamiento de errores, para utilizarlas como cabecera de la plantilla.
#!/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 }
-
Añade un servidor de nombres temporal.
echo "nameserver 9.9.9.9" >> /etc/resolv.conf \ || die "Add nameserver failed (rc $?)"
-
Cree un directorio de trabajo
/tmp/work
y expórtelo como variable de entorno.mkdir -p /tmp/work || die "Create work directory failed (rc $?)"
export WORK_DIR=/tmp/work
-
Cree el archivo de intercambio 25GB, añada permisos y compruebe que se ha creado correctamente.
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"
-
Suscríbase a Red Hat Satellite y active los repositorios SAP. Utilice sus propios valores para el nombre de usuario, la contraseña y la versión de la suscripción.
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 $?)"
-
Instalar un servidor de grupos de paquetes.
dnf -y group install server \ || die "Installing server group packages failed (rc $?)"
-
Instale los paquetes del sistema.
dnf -y install \ cloud-init \ device-mapper-multipath \ libxcrypt-compat \ glibc-langpack-en \ || die "Install system packages failed (rc $?)"
-
Actualice
grub2
.dnf -y reinstall grub2-common \ || die "Reinstall system package failed (rc $?)"
dnf -y update grub2 \ || die "Update grub2 package failed (rc $?)"
-
Instale Ansible y los roles de sistema Red Hat para SAP.
dnf -y install ansible-core rhel-system-roles rhel-system-roles-sap \ || die "Install Ansible and RH System Roles failed (rc $?)"
-
Habilitar el repositorio EPEL.
dnf -y install "https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm" \ || die "Installation EPEL configuration failed (rc $?)"
-
Configurar el repositorio de herramientas IBM Power.
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 $?)")
-
Instale las herramientas IBM Power y desactive el repositorio.
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 $?)"
-
Actualización del sistema operativo.
dnf -y update || die "OS update failed (rc $?)"
-
Eliminar el repositorio EPEL.
dnf -y remove epel-release \ || die "Uninstall EPEL configuration failed (rc $?)"
-
Baja del servidor Red Hat Satellite.
subscription-manager unregister \ || die "Unregister subscription failed (rc $?)"
subscription-manager clean \ || die "Clean subscription failed (rc $?)"
-
Cambie la política criptográfica (desactive 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 $?)"
-
Cree una configuración multitrayecto básica.
echo -e "defaults {\n \ user_friendly_names no\n \ find_multipaths smart\n}\n" \ > /etc/multipath.conf \ || die "Create multipath configuration failed (rc $?)"
-
Defina un inventario Ansible.
echo -e "localhost ansible_connection=local\n" > /root/inventory \ || die "Create Ansible inventory file failed (rc $?)"
-
Cree Ansible archivos yml para SAP HANA y NetWeaver.
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
-
Cambie el parámetro por defecto del núcleo en el archivo
/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
-
Active Receive Flow Steering (RFS) en los dispositivos ibmveth, ajuste el archivo
/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
Active el Receive Flow Steering (RFS) en el archivo
/etc/sysctl.d/95-enable-rfs.conf
.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
-
Configure el demonio 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 $?)"
-
Adaptar GRUB.
-
Compruebe que la partición PReP existe y actualícela.
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
-
Instale
grub2
en la partición PReP.grub2-install "$prep_partition" \ || die "Install GRUB update failed (rc $?)"
-
Ejecuta el comando bootlist.
bootlist -m normal -o || die "Setting boot list failed (rc $?)"
-
Cambie la opción de tiempo de espera por defecto de GRUB.
sed -i \ -e 's/GRUB_TIMEOUT=.*/GRUB_TIMEOUT=20/' \ /etc/default/grub || die "Fail to change default GRUB options (rc $?)"
-
Actualice la configuración de 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 $?)"
-
Activar multipath para todos los kernels.
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
-
Generar la configuración de GRUB.
grub2-mkconfig -o /boot/grub2/grub.cfg \ || die "Generate GRUB configuration failed (rc $?)"
-
-
Elimine el servidor de nombres temporal.
sed -i '/nameserver 9.9.9.9/d' /etc/resolv.conf \ || die "Remove nameserver failed (rc $?)"
-
Activar el reetiquetado SELinux en el siguiente arranque.
touch /.autorelabel || die "Create relabel file failed (rc $?)"
-
Borra la contraseña del usuario root.
usermod -p '!' root || die "Delete root password failed (rc $?)"
-
Limpia el sistema de archivos.
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
-
Borrado del historial de comandos.
history -c
-
-
Antes de ejecutar la herramienta
pvsadm
, asegúrese de que el intercambio local en un servidor de compilación está desactivado. En caso contrario, se produce el errormkswap: error: /swapfile is mounted; will not make swapspace
durante la ejecución depvsadm
. Para desactivar el intercambio, ejecute el siguiente comando.swapoff -a
-
Utilice la herramienta de creación de imágenes
pvsadm
con el comandoqcow2ova
para convertir la imagen qcow2 al formato OVA. Establezca sus propios valores personalizados para los indicadores de comando según sus formatos de entrada. Véase más abajo la descripción de las banderas.--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
Por ejemplo, utilice
rhel-9.4-ppc64le-image
como nuevo nombre de imagen del SO,rhel-9.4-ppc64le-kvm.qcow2
es la imagen base del SO ubicada en/data/image
, por lo que la ruta local absoluta para la imagen qcow2 es/data/image/rhel-9.4-ppc64le-kvm.qcow2
, y la distribución de la imagen esrhel
. Ajuste el tamaño de la imagen y del disco de destino según sus necesidades, 120 GB es el valor por defecto para el volumen del disco de destino. Una plantilla de guión de preparación de imágenes esimage-prep.template
, y el nombre del guión también es personalizable. Para simplificar la ejecución de la herramienta de creación de imágenespvsadm
, también puede configurar variables de entorno.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}
La herramienta
pvsadm
dispone de un menú de ayuda con descripciones detalladas de uso, comandos y banderas. Ejecute el siguiente comando para acceder al menú de ayuda.pvsadm --help
-
Cargue la imagen del sistema operativo creada a medida en Cloud Object Storage (COS).
Importación de la imagen del sistema operativo en el espacio de trabajo Power Virtual Server
Para importar su imagen de arranque personalizada, consulte la guía para Importar una imagen de arranque.
Creación de una instancia Power Virtual Server a partir de la nueva imagen de SO importada
Para aprovisionar una nueva instancia Power Virtual Server siga los pasos que se describen en Uso de una imagen de arranque personalizada para aprovisionar una nueva instancia.