IBM Cloud Docs
Proceso personalizado de creación de imágenes de SO en RHEL para soluciones SAP en IBM® Power® Virtual Server

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:

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.

  1. Inicie sesión en su servidor de compilación y compruebe su estado de registro ejecutando el siguiente comando.

    subscription-manager status
    
  2. Actualice los paquetes del sistema operativo RHEL.

  3. 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 $?)"
    
  4. Crea un directorio '/data' y exporta una variable de entorno que apunte a él.

    mkdir -p /data
    
    export MOUNT_PATH=/data
    
  5. 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
      
  6. Cree el directorio /data/image donde se guardará la imagen base.

  7. Copie la imagen rhel-9.4-ppc64le-kvm.qcow2 en /data/image.

  8. Cree el directorio /data/tmp, en el que se guardará una imagen temporal durante el proceso de compilación.

  9. Realice las siguientes tareas para configurar el servidor de compilación. Utilice el gestor de paquetes RHEL dnf.

    • Instale los paquetes de sistema xfsprogs y lvm2.

    • Instale los paquetes de desarrollo make, git, libgcrypt-devel y go-toolset.

    • Instale los paquetes qemu-img y cloud-utils-growpart.

    • Configure un proxy añadiendo su host proxy en el archivo ~root/.bashrc.

      export https_proxy='<your_https_proxy>'
      
  10. 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
    
  11. Descargar el pvsadm herramienta de la última versión de pvsadm-linux-ppc64le Repositorio GitHub. Guárdelo en el archivo llamado /usr/local/bin/pvsadm y cambie el modo a 0755. Para más detalles sobre la herramienta, consulte pvsadm 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.

  1. Compruebe que las credenciales de suscripción de Red Hat Satellite son válidas.

  2. Cree un archivo vacío llamado image-prep.template y utilícelo como plantilla de preparación de imágenes.

  3. 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 herramienta pvsadm 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
      
  4. 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 error mkswap: error: /swapfile is mounted; will not make swapspace durante la ejecución de pvsadm. Para desactivar el intercambio, ejecute el siguiente comando.

    swapoff -a
    
  5. Utilice la herramienta de creación de imágenes pvsadm con el comando qcow2ova 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 es rhel. 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 es image-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ágenes pvsadm, 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
    
  6. 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.