IBM Cloud Docs
Benutzerdefinierter Prozess zur Erstellung von Betriebssystem-Images auf RHEL für SAP Lösungen auf IBM® Power® Virtual Server

Benutzerdefinierter Prozess zur Erstellung von Betriebssystem-Images auf RHEL für SAP Lösungen auf IBM® Power® Virtual Server

Die folgenden Informationen beschreiben, wie Sie ein benutzerdefiniertes Betriebssystem-Image auf Red Hat Enterprise Linux (RHEL) für SAP Software auf IBM® Power® Virtual Server erstellen.

Anforderungen für die Erstellung benutzerdefinierter Betriebssystem-Images

Erfüllen Sie die folgenden Anforderungen, bevor Sie mit der Imageerstellung beginnen:

Einrichten einer Build-Image-Umgebung

Die folgenden Schritte beschreiben, wie Sie eine Build-Server-Umgebung für die Image-Erstellung einrichten.

  1. Melden Sie sich bei Ihrem Build-Server an und überprüfen Sie seinen Registrierungsstatus, indem Sie den folgenden Befehl ausführen.

    subscription-manager status
    
  2. Aktualisieren Sie die RHEL OS-Pakete.

  3. Überprüfen und Anpassen der Proxy-Einstellungen für eine Build-Umgebung. Konfigurieren Sie die temporären HTTPS Proxy-Einstellungen, indem Sie Ihre Proxy-IP-Adresse oder URL verwenden. Wenn Sie die automatisierte Power Virtual Server mit VPC landing zone aus dem Katalog IBM Cloud bereitgestellt haben, verwenden Sie diese Proxy-Adresse http://10.30.40.7:3128/ für Ihre Konfiguration.

    export https_proxy="http://10.30.40.7:3128/"  || die "Set HTTPS proxy failed (rc $?)"
    
  4. Erstellen Sie ein Verzeichnis "/data" und exportieren Sie eine Umgebungsvariable, die auf dieses Verzeichnis verweist.

    mkdir -p /data
    
    export MOUNT_PATH=/data
    
  5. Fügen Sie ein zusätzliches Speichervolumen mit einer Kapazität von 200 GB hinzu und erstellen Sie das Dateisystem /data.

    • Führen Sie den Befehl multipath aus, um die verfügbaren Speichervolumes und ihre World Wide Names (WWNs) zu ermitteln. Stellen Sie sicher, dass die Befehlsausgabe nur ein 200-GB-Speicher-Volume anzeigt. Andernfalls wird die Erstellung des Dateisystems nicht richtig funktionieren.

      multipath -ll
      
    • Exportieren Sie die folgenden Variablen für physische und logische Volumes, eine Volume-Gruppe und ein Einhängeverzeichnis.

      export PV_SIZE=200G
      
      export LV_NAME=image_lv
      
      export VG_NAME=image_vg
      
    • Erstellen Sie die physischen und logischen Datenträger.

      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}
      
    • Prüfen Sie, ob das erstellte logische Volume aktiv ist.

      lvscan
      
    • Hängen Sie das Dateisystem an.

      mount -t xfs -o defaults,nofail --source /dev/mapper/${VG_NAME}-${LV_NAME} --target ${MOUNT_PATH}
      
    • Fügen Sie das Dateisystem zur Datei /etc/fstab hinzu.

      echo "/dev/mapper/${VG_NAME}-${LV_NAME}  ${MOUNT_PATH} xfs defaults,nofail 0 0" >> /etc/fstab
      
    • Vergewissern Sie sich, dass das Dateisystem in der Liste aller eingehängten Dateisysteme enthalten ist.

      df -h
      
  6. Erstellen Sie das Verzeichnis /data/image, in dem das Basisbild gespeichert wird.

  7. Kopieren Sie das Bild rhel-9.4-ppc64le-kvm.qcow2 auf /data/image.

  8. Erstellen Sie das Verzeichnis /data/tmp, in dem ein temporäres Abbild während des Erstellungsprozesses gespeichert wird.

  9. Führen Sie die folgenden Aufgaben aus, um den Build-Server zu konfigurieren. Verwenden Sie den dnf RHEL-Paketmanager.

    • Installieren Sie die Systempakete xfsprogs und lvm2.

    • Installieren Sie die Entwicklungspakete make, git, libgcrypt-devel und go-toolset.

    • Installieren Sie die Pakete qemu-img und cloud-utils-growpart.

    • Konfigurieren Sie einen Proxy, indem Sie Ihren Proxy-Host in der Datei ~root/.bashrc hinzufügen.

      export https_proxy='<your_https_proxy>'
      
  10. Konfigurieren Sie das NBD-Modul so, dass es beim Booten geladen wird, indem Sie die folgenden Zeilen in die Datei /etc/modules-load.d/ndb.conf einfügen.

    nbd
    options nbd max_part=8
    
  11. Laden Sie die pvsadm Tool aus der neuesten Version von pvsadm-linux-ppc64le GitHub Repository. Speichern Sie es in der Datei mit dem Namen /usr/local/bin/pvsadm und ändern Sie den Modus auf 0755. Weitere Einzelheiten zu diesem Tool finden Sie unter pvsadm.

Erstellen eines benutzerdefinierten Betriebssystem-Images

Der Erstellungsprozess eines benutzerdefinierten Betriebssystem-Images für IBM Cloud PowerVS besteht aus den folgenden Aufgaben.

  1. Überprüfen Sie, ob die Red Hat Satellite Anmeldedaten gültig sind.

  2. Erstellen Sie eine leere Datei mit dem Namen image-prep.template und verwenden Sie diese als Bildvorlage.

  3. Die folgenden Aufgaben enthalten die Shell-Befehle, die für die Erstellung eines angepassten Images benötigt werden. Fügen Sie diese Befehle der Vorlage image-prep.template hinzu. Die Befehle aktualisieren das Basis-Betriebssystem-Image während der Image-Erstellung mit dem Tool pvsadm, um das endgültige SAP-ready OS-Image zu erstellen. Die Befehlsfolge ist wichtig und sollte nicht geändert werden.

    • Kopieren Sie die folgenden Zeilen, einschließlich der Fehlerbehandlung, die als Kopfzeile der Vorlage verwendet werden sollen.

      #!/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
      }
      
    • Fügen Sie einen temporären Namenserver hinzu.

      echo "nameserver 9.9.9.9" >> /etc/resolv.conf \
          || die "Add nameserver failed (rc $?)"
      
    • Erstellen Sie ein Arbeitsverzeichnis /tmp/work und exportieren Sie es als Umgebungsvariable.

      mkdir -p /tmp/work || die "Create work directory failed (rc $?)"
      
      export WORK_DIR=/tmp/work
      
    • Erstellen Sie die Auslagerungsdatei 25GB, fügen Sie Berechtigungen hinzu und überprüfen Sie, ob sie korrekt erstellt wurde.

      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"
      
    • Abonnieren Sie Red Hat Satellite und aktivieren Sie die SAP Repositories. Verwenden Sie Ihre eigenen Werte für den Abonnement-Benutzernamen, das Passwort und die Release-Version.

      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 $?)"
      
    • Installieren Sie einen Paketgruppenserver.

      dnf -y group install server \
          || die "Installing server group packages failed (rc $?)"
      
    • Installieren Sie die Systempakete.

      dnf -y install \
          cloud-init \
          device-mapper-multipath \
          libxcrypt-compat \
          glibc-langpack-en \
          || die "Install system packages failed (rc $?)"
      
    • Aktualisieren Sie grub2.

      dnf -y reinstall grub2-common \
          || die "Reinstall system package failed (rc $?)"
      
      dnf -y update grub2 \
          || die "Update grub2 package failed (rc $?)"
      
    • Installieren Sie Ansible und die Systemrollen Red Hat für SAP.

      dnf -y install ansible-core rhel-system-roles rhel-system-roles-sap \
          || die "Install Ansible and RH System Roles failed (rc $?)"
      
    • Aktivieren Sie das EPEL-Repository.

      dnf -y install "https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm" \
          || die "Installation EPEL configuration failed (rc $?)"
      
    • Konfigurieren Sie das IBM Power tools Repository.

      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 $?)")
      
    • Installieren Sie die IBM Power Tools und deaktivieren Sie das Repository.

      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 $?)"
      
    • Aktualisierung des Betriebssystems.

      dnf -y update || die "OS update failed (rc $?)"
      
    • Entfernen Sie das EPEL-Repository.

      dnf -y remove epel-release \
          || die "Uninstall EPEL configuration failed (rc $?)"
      
    • Abmeldung vom Server Red Hat Satellite.

      subscription-manager unregister \
          || die "Unregister subscription failed (rc $?)"
      
      subscription-manager clean \
          || die "Clean subscription failed (rc $?)"
      
    • Ändern Sie die Verschlüsselungsrichtlinie (deaktivieren Sie 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 $?)"
      
    • Erstellen Sie eine grundlegende Multipath-Konfiguration.

      echo -e "defaults {\n \
          user_friendly_names no\n \
          find_multipaths smart\n}\n" \
          > /etc/multipath.conf \
          || die "Create multipath configuration failed (rc $?)"
      
    • Definieren Sie ein Ansible Inventar.

      echo -e "localhost ansible_connection=local\n" > /root/inventory \
          || die "Create Ansible inventory file failed (rc $?)"
      
    • Erstellen Sie Ansible yml-Dateien für SAP HANA und 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
      
    • Ändern Sie den Standard-Kernelparameter in der Datei /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
      
    • Aktivieren Sie Receive Flow Steering (RFS) auf ibmveth-Geräten, passen Sie die Datei /etc/udev/rules.d/70-ibmveth-rfs.rules an.

      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
      

      Aktivieren Sie das Receive Flow Steering (RFS) in der Datei /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
      
    • Konfigurieren Sie den SSH-Daemon.

      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 anpassen.

      • Überprüfen Sie, ob die Partition PReP existiert und aktualisieren Sie sie.

        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
        
      • Installieren Sie grub2 auf der Partition PReP.

        grub2-install "$prep_partition" \
            || die "Install GRUB update failed (rc $?)"
        
      • Führen Sie den Befehl bootlist aus.

        bootlist -m normal -o || die "Setting boot list failed (rc $?)"
        
      • Ändern Sie die Standard-Timeout-Option von GRUB.

        sed -i \
            -e 's/GRUB_TIMEOUT=.*/GRUB_TIMEOUT=20/' \
            /etc/default/grub || die "Fail to change default GRUB options (rc $?)"
        
      • Aktualisieren Sie die GRUB-Konfiguration.

        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 $?)"
        
      • Aktivieren Sie Multipath für alle Kernel.

        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
        
      • Erzeugen Sie die GRUB-Konfiguration.

        grub2-mkconfig -o /boot/grub2/grub.cfg \
            || die "Generate GRUB configuration failed (rc $?)"
        
    • Entfernen Sie den temporären Namenserver.

      sed -i '/nameserver 9.9.9.9/d' /etc/resolv.conf \
          || die "Remove nameserver failed (rc $?)"
      
    • Aktivieren Sie SELinux-Relabeling beim nächsten Start.

      touch /.autorelabel || die "Create relabel file failed (rc $?)"
      
    • Löschen Sie das Passwort des Root-Benutzers.

      usermod -p '!' root || die "Delete root password failed (rc $?)"
      
    • Bereinigen Sie das Dateisystem.

      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
      
    • Löschen der Befehlshistorie.

      history -c
      
  4. Bevor Sie das Tool pvsadm ausführen, stellen Sie sicher, dass die lokale Auslagerung auf einem Build-Server deaktiviert ist. Andernfalls tritt der Fehler mkswap: error: /swapfile is mounted; will not make swapspace bei der Ausführung von pvsadm auf. Um die Auslagerung zu deaktivieren, führen Sie den folgenden Befehl aus.

    swapoff -a
    
  5. Verwenden Sie das Image-Erstellungstool pvsadm mit dem Befehl qcow2ova, um das Image qcow2 in das OVA-Format zu konvertieren. Setzen Sie Ihre eigenen Werte für die Befehlsflags entsprechend ihren Eingabeformaten. Siehe die Beschreibung der Flaggen unten.

    --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
    

    Verwenden Sie z. B. rhel-9.4-ppc64le-image als Namen für ein neues Betriebssystem-Image, rhel-9.4-ppc64le-kvm.qcow2 ist das Basis-OS-Image, das sich auf /data/image befindet. Der absolute lokale Pfad für das qcow2-Image ist /data/image/rhel-9.4-ppc64le-kvm.qcow2, und die Image-Distribution ist rhel. Passen Sie die Größe des Abbilds und des Zieldatenträgers an Ihre Anforderungen an. 120 GB ist der Standardwert für den Zieldatenträger. Eine Skriptvorlage für die Bildvorbereitung ist image-prep.template, und auch der Name des Skripts ist anpassbar. Um die Ausführung des pvsadm Image Build Tools zu vereinfachen, können Sie auch Umgebungsvariablen einrichten.

    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}
    

    Das Tool pvsadm verfügt über ein Hilfemenü mit ausführlichen Beschreibungen der Verwendung, der Befehle und der Flaggen. Führen Sie den folgenden Befehl aus, um das Hilfemenü aufzurufen.

    pvsadm --help
    
  6. Laden Sie das selbst erstellte Betriebssystem-Image auf Cloud Object Storage (COS) hoch.

Importieren des OS-Images in den Arbeitsbereich Power Virtual Server

Wie Sie Ihr benutzerdefiniertes Boot-Image importieren, erfahren Sie in der Anleitung zum Importieren eines Boot-Images.

Erstellen einer Power Virtual Server-Instanz aus dem neu importierten Betriebssystem-Image

Um eine neue Power Virtual Server Instanz bereitzustellen, führen Sie die Schritte aus, die unter Verwendung eines benutzerdefinierten Boot-Images zur Bereitstellung einer neuen Instanz beschrieben sind.