IBM Cloud Docs
Processo de criação de imagem de sistema operacional personalizado no RHEL para soluções SAP em IBM® Power® Virtual Server

Processo de criação de imagem de sistema operacional personalizado no RHEL para soluções SAP em IBM® Power® Virtual Server

As informações a seguir descrevem como criar uma imagem personalizada do sistema operacional (SO) em Red Hat Enterprise Linux (RHEL) para o software SAP em IBM® Power® Virtual Server.

Requisitos de criação de imagens personalizadas do sistema operacional

Preencha os requisitos a seguir antes de iniciar o processo de criação da imagem:

Configurar um ambiente de imagem de compilação

As etapas a seguir descrevem como configurar um ambiente de servidor de compilação para a criação de imagens.

  1. Faça login no seu servidor de compilação e verifique o status de registro executando o seguinte comando.

    subscription-manager status
    
  2. Atualize os pacotes do sistema operacional RHEL.

  3. Verifique e ajuste as configurações de proxy para um ambiente de compilação. Defina as configurações temporárias do proxy HTTPS usando seu endereço IP do proxy ou URL. Se você implementou o Power Virtual Server automatizado com VPC landing zone do catálogo IBM Cloud, use esse endereço de proxy http://10.30.40.7:3128/ para sua configuração.

    export https_proxy="http://10.30.40.7:3128/"  || die "Set HTTPS proxy failed (rc $?)"
    
  4. Crie um diretório '/data' e exporte uma variável de ambiente que aponte para ele.

    mkdir -p /data
    
    export MOUNT_PATH=/data
    
  5. Anexe um volume de armazenamento adicional com capacidade de 200 GB e crie o sistema de arquivos /data.

    • Execute o comando multipath para identificar os volumes de armazenamento disponíveis e seus WWNs (World Wide Names). Certifique-se de que a saída do comando mostre apenas um volume de armazenamento de 200 GB. Caso contrário, a criação do sistema de arquivos não funcionará corretamente.

      multipath -ll
      
    • Exporte as seguintes variáveis para volumes físicos e lógicos, um grupo de volumes e um diretório de montagem.

      export PV_SIZE=200G
      
      export LV_NAME=image_lv
      
      export VG_NAME=image_vg
      
    • Crie os volumes físicos e 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}
      
    • Verificar se o volume lógico criado está ativo.

      lvscan
      
    • Monte o sistema de arquivos.

      mount -t xfs -o defaults,nofail --source /dev/mapper/${VG_NAME}-${LV_NAME} --target ${MOUNT_PATH}
      
    • Adicione o sistema de arquivos ao arquivo /etc/fstab.

      echo "/dev/mapper/${VG_NAME}-${LV_NAME}  ${MOUNT_PATH} xfs defaults,nofail 0 0" >> /etc/fstab
      
    • Certifique-se de que o sistema de arquivos esteja presente na lista de todos os sistemas de arquivos montados.

      df -h
      
  6. Crie o diretório /data/image onde a imagem base é salva.

  7. Copie a imagem rhel-9.4-ppc64le-kvm.qcow2 para /data/image.

  8. Crie o diretório /data/tmp, no qual uma imagem temporária é salva durante o processo de compilação.

  9. Conclua as tarefas a seguir para configurar o servidor de compilação. Use o gerenciador de pacotes dnf RHEL.

    • Instale os pacotes de sistema xfsprogs e lvm2.

    • Instale os pacotes de desenvolvimento make, git, libgcrypt-devel e go-toolset.

    • Instale os pacotes qemu-img e cloud-utils-growpart.

    • Configure um proxy adicionando seu host de proxy no arquivo ~root/.bashrc.

      export https_proxy='<your_https_proxy>'
      
  10. Configure o módulo NBD para ser carregado no momento da inicialização, adicionando as seguintes linhas ao arquivo /etc/modules-load.d/ndb.conf.

    nbd
    options nbd max_part=8
    
  11. Baixe o pvsadm ferramenta da última versão do pvsadm-linux-ppc64le Repositório GitHub. Salve-o no arquivo denominado /usr/local/bin/pvsadm e altere o modo para 0755. Para obter mais detalhes sobre a ferramenta, consulte pvsadm tool.

Criação de uma imagem de sistema operacional personalizada

O processo de criação de uma imagem de sistema operacional personalizada para IBM Cloud PowerVS consiste nas seguintes tarefas.

  1. Verifique se as credenciais de assinatura do Red Hat Satellite são válidas.

  2. Crie um arquivo vazio chamado image-prep.template e use-o como modelo de preparação de imagem.

  3. As tarefas a seguir contêm os comandos do shell necessários para criar uma imagem personalizada. Adicione esses comandos ao modelo image-prep.template. Os comandos atualizam a imagem básica do sistema operacional durante a criação da imagem com a ferramenta pvsadm para criar a imagem final do sistema operacional pronta para SAP. A ordem de comando é importante e não deve ser alterada.

    • Copie as seguintes linhas, incluindo o tratamento de erros, para serem usadas como cabeçalho do modelo.

      #!/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
      }
      
    • Adicione um servidor de nomes temporário.

      echo "nameserver 9.9.9.9" >> /etc/resolv.conf \
          || die "Add nameserver failed (rc $?)"
      
    • Crie um diretório de trabalho /tmp/work e exporte-o como uma variável ambiental.

      mkdir -p /tmp/work || die "Create work directory failed (rc $?)"
      
      export WORK_DIR=/tmp/work
      
    • Crie o arquivo de troca 25GB, adicione permissões e verifique se ele foi criado corretamente.

      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"
      
    • Inscreva-se em Red Hat Satellite e ative os repositórios SAP. Use seus próprios valores para o nome de usuário da assinatura, a senha e a versão de lançamento.

      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 um servidor de grupo de pacotes.

      dnf -y group install server \
          || die "Installing server group packages failed (rc $?)"
      
    • Instale os pacotes do sistema.

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

      dnf -y reinstall grub2-common \
          || die "Reinstall system package failed (rc $?)"
      
      dnf -y update grub2 \
          || die "Update grub2 package failed (rc $?)"
      
    • Instale Ansible e as funções 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 $?)"
      
    • Habilite o repositório EPEL.

      dnf -y install "https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm" \
          || die "Installation EPEL configuration failed (rc $?)"
      
    • Configure o repositório de ferramentas do Power IBM.

      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 as ferramentas do IBM Power e desative o repositório.

      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 $?)"
      
    • Atualização do sistema operacional.

      dnf -y update || die "OS update failed (rc $?)"
      
    • Remova o repositório EPEL.

      dnf -y remove epel-release \
          || die "Uninstall EPEL configuration failed (rc $?)"
      
    • Cancelar o registro no servidor Red Hat Satellite.

      subscription-manager unregister \
          || die "Unregister subscription failed (rc $?)"
      
      subscription-manager clean \
          || die "Clean subscription failed (rc $?)"
      
    • Altere a política criptográfica (desative 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 $?)"
      
    • Crie uma configuração multipath 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 um inventário Ansible.

      echo -e "localhost ansible_connection=local\n" > /root/inventory \
          || die "Create Ansible inventory file failed (rc $?)"
      
    • Crie os arquivos Ansible yml para SAP HANA e 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
      
    • Altere o parâmetro padrão do kernel no arquivo /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
      
    • Habilite o Receive Flow Steering (RFS) nos dispositivos ibmveth, ajuste o arquivo /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
      

      Habilite o Receive Flow Steering (RFS) no arquivo /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 o daemon 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 o GRUB.

      • Verifique se a partição PReP existe e atualize-a.

        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 o grub2 na partição PReP.

        grub2-install "$prep_partition" \
            || die "Install GRUB update failed (rc $?)"
        
      • Execute o comando bootlist.

        bootlist -m normal -o || die "Setting boot list failed (rc $?)"
        
      • Altere a opção de tempo limite padrão do GRUB.

        sed -i \
            -e 's/GRUB_TIMEOUT=.*/GRUB_TIMEOUT=20/' \
            /etc/default/grub || die "Fail to change default GRUB options (rc $?)"
        
      • Atualize a configuração do 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 $?)"
        
      • Ativar o multipath para todos os 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
        
      • Gerar a configuração do GRUB.

        grub2-mkconfig -o /boot/grub2/grub.cfg \
            || die "Generate GRUB configuration failed (rc $?)"
        
    • Remova o servidor de nomes temporário.

      sed -i '/nameserver 9.9.9.9/d' /etc/resolv.conf \
          || die "Remove nameserver failed (rc $?)"
      
    • Habilite a reclassificação do SELinux na próxima inicialização.

      touch /.autorelabel || die "Create relabel file failed (rc $?)"
      
    • Exclua a senha do usuário root.

      usermod -p '!' root || die "Delete root password failed (rc $?)"
      
    • Limpe o sistema de arquivos.

      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
      
    • Exclusão do histórico de comandos.

      history -c
      
  4. Antes de executar a ferramenta pvsadm, certifique-se de que a troca local em um servidor de compilação esteja desativada. Caso contrário, o erro mkswap: error: /swapfile is mounted; will not make swapspace ocorre durante a execução de pvsadm. Para desativar a troca, execute o seguinte comando.

    swapoff -a
    
  5. Use a ferramenta de criação de imagem pvsadm com o comando qcow2ova para converter a imagem qcow2 no formato OVA. Defina seus próprios valores personalizados para os sinalizadores de comando de acordo com seus formatos de entrada. Veja a descrição dos sinalizadores abaixo.

    --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 exemplo, use rhel-9.4-ppc64le-image como um novo nome de imagem do sistema operacional, rhel-9.4-ppc64le-kvm.qcow2 é a imagem do sistema operacional de base localizada em /data/image, portanto, o caminho local absoluto para a imagem qcow2 é /data/image/rhel-9.4-ppc64le-kvm.qcow2 e a distribuição da imagem é rhel. Ajuste os tamanhos da imagem e do disco de destino de acordo com suas necessidades; 120 GB é definido como o valor padrão para o volume do disco de destino. Um modelo de script de preparação de imagem é image-prep.template, e o nome do script também pode ser personalizado. Para simplificar a execução da ferramenta de criação de imagens pvsadm, você também pode configurar variáveis de ambiente.

    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}
    

    A ferramenta pvsadm tem um menu de ajuda com descrições detalhadas de uso, comandos e sinalizadores. Execute o seguinte comando para acessar o menu de ajuda.

    pvsadm --help
    
  6. Faça upload da imagem do sistema operacional criado de forma personalizada para Cloud Object Storage (COS).

Importação da imagem do sistema operacional no espaço de trabalho Power Virtual Server

Para importar sua imagem de inicialização personalizada, consulte a orientação para Importar uma imagem de inicialização.

Criação de uma instância do Power Virtual Server a partir da nova imagem importada do sistema operacional

Para provisionar uma nova instância do Power Virtual Server, siga as etapas descritas em Uso de uma imagem de inicialização personalizada para provisionar uma nova instância.