Preparar uma máquina virtual baseada no Red Hat para o Azure

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis ✔️ Conjunto de dimensionamento uniformes

Neste artigo, você aprenderá a preparar uma máquina virtual do RHEL (Red Hat Enterprise Linux) para usá-la no Azure. As versões do RHEL abordadas neste artigo são 6.X, 7.X e 8.X. Neste artigo, abordamos os seguintes hipervisores de preparação: Hyper-V, máquina virtual baseada em kernel (KVM) e VMware. Para saber mais informações sobre os requisitos de qualificação para participação no programa Red Hat Cloud Access, confira o site Red Hat Cloud Access e o artigoComo executar o RHEL no Azure. Para saber como automatizar a criação de imagens do Red Hat Enterprise Linux, consulte o Construtor de imagens do Azure.

Observação

Fique atento às versões que são Fim da Vida Útil (EOL) e não são mais suportadas pela Redhat. As imagens carregadas que estão na EOL ou além dela serão suportadas em uma base de esforço comercial razoável. Link para o Ciclo de Vida do Produto da Redhat

Gerenciador do Hyper-V

Esta seção mostra como preparar uma máquina virtual RHEL 6, RHEL 7ou RHEL 8 usando o Gerenciador do Hyper-V.

Pré-requisitos

Esta seção pressupõe que você já tenha baixado um arquivo ISO do site do Red Hat e instalado a imagem do RHEL em um VHD (disco rígido virtual). Para obter mais detalhes sobre como usar o Gerenciador do Hyper-V para instalar uma imagem do sistema operacional, confira Como instalar a função Hyper-V e configurar uma máquina virtual.

Notas de instalação do RHEL

  • O Azure não dá suporte ao formato VHDX. O Azure suporta apenas VHD fixo. Você pode usar o Gerenciador do Hyper-V para converter o disco em formato VHD, ou pode usar o cmdlet convert-vhd. Quando criar o disco, se você usar o VirtualBox, selecione Tamanho fixo em vez da opção padrão alocada dinamicamente.

  • O Azure dá suporte a máquinas virtuais Gen1 (inicialização do BIOS) e Gen2 (inicialização de UEFI).

  • O tamanho máximo permitido para o VHD é 1.023 GB.

  • O módulo de kernel vfat precisa ser habilitado no kernel.

  • Gerenciador de Volume lógico (LVM) tem suporte e pode ser usado no disco do sistema operacional ou discos de dados em máquinas virtuais do Azure. No entanto, em geral, recomendamos o uso de partições padrão no disco do sistema operacional em vez de LVM. Essa prática evitará conflitos de nome LVM entre máquinas virtuais clonadas, especialmente se você precisar anexar um disco do sistema operacional em outra máquina virtual idêntica para solução de problemas. Consulte a documentação LVM e RAID.

  • É necessário suporte a kernel para a montagem de sistemas de arquivos de formato de disco universal (UDF) . Na primeira inicialização no Azure, a configuração de provisionamento é transmitida à máquina virtual do Linux por meio de mídia formatada para UDF, a qual é anexada ao convidado. O agente de Linux do Azure deve ser capaz de montar o sistema de arquivos UDF para ler a configuração e provisionar a máquina virtual. Sem isso, o provisionamento vai falhar!

  • Não configure uma partição de troca no disco do sistema operacional. Verifique as etapas a seguir para obter mais informações sobre esse assunto.

  • Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1 MB. Ao converter de um disco não processado para VHD, certifique-se de que o tamanho do disco não processado seja um múltiplo de 1 MB antes da conversão. Encontre mais detalhes nas etapas abaixo. Consulte também Notas de Instalação do Linux para obter mais informações.

Observação

O cloud-init >= 21.2 remove o requisito udf. No entanto, sem o módulo udf habilitado, o cd-rom não será montado durante o provisionamento, impedindo que dados personalizados sejam aplicados. Uma solução alternativa para isso é aplicar dados personalizados usando dados do usuário. No entanto, ao contrário dos dados personalizados, os dados do usuário não são criptografados. https://cloudinit.readthedocs.io/en/latest/topics/format.html

RHEL 6 usando o Gerenciador do Hyper-V

Importante

Em 30 de novembro de 2020 foi encerrada a fase de manutenção do Red Hat Enterprise Linux 6. A fase de manutenção é seguida pela Fase de Ciclo de Vida Estendido. À medida que o Red Hat Enterprise Linux 6 sai das fases de manutenção completa, é altamente recomendável fazer upgrade para o Red Hat Enterprise Linux 7, 8 ou 9. Se os clientes precisarem permanecer no Red Hat Enterprise Linux 6, recomendamos adicionar o complemento Red Hat Enterprise Linux Extended Life Cycle Support (ELS).

  1. No Gerenciador do Hyper-V, selecione a máquina virtual.

  2. Clique em Conectar para abrir a janela do console para a máquina virtual.

  3. No RHEL 6, NetworkManager pode interferir com o agente Linux do Azure. Desinstale este pacote ao executar o seguinte comando:

    sudo rpm -e --nodeps NetworkManager
    
  4. Crie ou edite o arquivo /etc/sysconfig/network e adicione o texto a seguir:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Crie ou edite o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 e adicione o texto a seguir:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Mova (ou remova) as regras de udev para evitar a geração de regras estáticas da interface Ethernet. Essas regras causam problemas ao clonar uma máquina virtual no Microsoft Azure ou no Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

Observação

** Ao usar a Rede Acelerada (AN), a interface sintética criada deve ser configurada para não ser gerenciada usando uma regra udev. Isso impedirá que o NetworkManager atribua o mesmo IP a ele que a interface primária.

Para aplicá-lo:

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparentlybonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. Certifique-se de que o serviço de rede será iniciado durante a inicialização executando o seguinte comando:

    sudo chkconfig network on
    
  2. Registre a sua assinatura do Red Hat para habilitar a instalação de pacotes do repositório RHEL ao executar o seguinte comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. O pacote WALinuxAgent WALinuxAgent-<version> foi enviado para o repositório de extras do Red Hat. Habilite o repositório de extras para a VM executando o seguinte comando:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  4. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de kernel para o Azure. Para fazer esta modificação, abra /boot/grub/menu.lst em um editor de texto e verifique se o kernel padrão inclui os seguintes parâmetros:

    console=ttyS0 earlyprintk=ttyS0
    

    Isso garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, o que pode auxiliar o suporte do Azure com problemas de depuração.

    Além disso, recomendamos que você remova os seguintes parâmetros:

    rhgb quiet crashkernel=auto
    

    Inicializações gráficas e silenciosas não são úteis em um ambiente de nuvem onde queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opção crashkernel configurada se quiser. Observe que esse parâmetro reduz a memória disponível na máquina virtual em 128 MB ou mais. Essa configuração pode ser um problema em máquinas virtuais menores.

  5. Confira se o servidor shell seguro (SSH) está instalado e configurado para iniciar no momento da inicialização, que geralmente é o padrão. Modifique o /etc/ssh/sshd_config para incluir a seguinte linha:

    ClientAliveInterval 180
    
  6. Instale o Agente Linux do Azure executando o seguinte comando:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    

    A instalação do pacote WALinuxAgent removerá os pacotes NetworkManager e NetworkManager-gnome se eles já não tiverem sido removidos na etapa 3.

  7. Não crie o espaço de troca no disco do sistema operacional.

    O agente de Linux do Azure pode configurar automaticamente o espaço de permuta usando o disco de recurso local anexado à máquina virtual, depois da mesma ser provisionada no Azure. É importante lembrar que o disco de recurso local é um disco temporário e pode ser esvaziado quando a máquina virtual for desprovisionada. Depois de instalar o agente de Linux do Azure na etapa anterior, modifique os seguintes parâmetros em /etc/waagent.conf:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  8. Cancele o registro da assinatura (se necessário) executando o seguinte comando:

    sudo subscription-manager unregister
    
  9. Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

Observação

Se você estiver migrando uma máquina virtual específica e não desejar criar uma imagem generalizada, ignore a etapa de desprovisionamento.

    sudo waagent -force -deprovision
    sudo export HISTSIZE=0
  1. Clique em Ação>Desligar no Gerenciador do Hyper-V. Agora, o VHD do Linux está pronto para ser carregado no Azure.

RHEL 7 usando o Gerenciador do Hyper-V

  1. No Gerenciador do Hyper-V, selecione a máquina virtual.

  2. Clique em Conectar para abrir a janela do console para a máquina virtual.

  3. Crie ou edite o arquivo /etc/sysconfig/network e adicione o texto a seguir:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Crie ou edite o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 e adicione o texto a seguir:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  5. Certifique-se de que o serviço de rede será iniciado durante a inicialização executando o seguinte comando:

    sudo systemctl enable network
    
  6. Registre a sua assinatura do Red Hat para habilitar a instalação de pacotes do repositório RHEL ao executar o seguinte comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de kernel para o Azure. Para fazer essa modificação, abra /etc/default/grub em um editor de texto e edite o parâmetro GRUB_CMDLINE_LINUX. Por exemplo:

    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    ENABLE_BLSCFG=true
    

    Observação

    Se ENABLE_BLSCFG=false estiver presente em /etc/default/grub em vez de ferramentas 'ENABLE_BLSCFG=true', como grubedit ou gubby, que dependem da BLS (Especificação do Carregador de Inicialização) para gerenciar entradas e configurações de inicialização, pode não funcionar corretamente no RHEL 8 e 9. Lembre-se de que, se ENABLE_BLSCFG não estiver presente, o comportamento padrão será "false".

    Isso garante que todas as mensagens do console sejam enviadas para a primeira porta serial e ainda habilita a interação com o console serial, o que pode auxiliar o suporte do Azure em problemas de depuração. Essa configuração também desliga as novas convenções de nomenclatura do RHEL 7 para NICs.

    rhgb quiet crashkernel=auto
    

    Inicializações gráficas e silenciosas não são úteis em um ambiente de nuvem onde queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opção crashkernel configurada se quiser. Observe que este parâmetro reduz a memória disponível na máquina virtual em 128 MB ou mais, o que pode ser um problema em máquinas virtuais menores.

  8. Depois de editar /etc/default/grub, execute o seguinte comando para recompilar a configuração do Grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    Observação

    Se estiver carregando uma VM habilitada para UEFI, o comando para atualizar o grub será grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg.

  9. Confira se o servidor SSH está instalado e configurado para iniciar no momento da inicialização, que geralmente é o padrão. Modifique o /etc/ssh/sshd_config para incluir a seguinte linha:

    ClientAliveInterval 180
    
  10. O pacote WALinuxAgent WALinuxAgent-<version> foi enviado para o repositório de extras do Red Hat. Habilite o repositório de extras para a VM executando o seguinte comando:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. Instale o agente Linux do Azure, o cloud-init e outros utilitários necessários executando o seguinte comando:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  12. Configurar o cloud-init para lidar com o provisionamento:

    1. Configurar waagent para o cloud-init:
    sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=auto/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    

    Observação

    Se você estiver migrando uma máquina virtual específica e não desejar criar uma imagem generalizada, defina Provisioning.Agent=disabled na configuração /etc/waagent.conf.

    1. Configurar montagens:
    sudo echo "Adding mounts and disk_setup to init stage"
    sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    1. Configurar datasource do Azure:
    sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
    sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    EOF
    
    1. Se estiver configurado, remova o arquivo de troca existente:
    if [[ -f /mnt/resource/swapfile ]]; then
    echo "Removing swapfile" #RHEL uses a swapfile by default
    swapoff /mnt/resource/swapfile
    rm /mnt/resource/swapfile -f
    fi
    
    1. Configurar o registro em log do cloud-init:
    sudo echo "Add console log file"
    sudo cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
    
    # This tells cloud-init to redirect its stdout and stderr to
    # 'tee -a /var/log/cloud-init-output.log' so the user can see output
    # there without needing to look on the console.
    output: {all: '| tee -a /var/log/cloud-init-output.log'}
    EOF
    
    
  13. Configuração de troca. Não crie o espaço de troca no disco do sistema operacional.

    Antes, o agente de Linux do Azure era usado para configurar automaticamente o espaço de troca usando o disco de recurso local anexado à máquina virtual, depois que esta era provisionada no Azure. No entanto, isso agora é tratado pelo cloud-init, você não deve usar o Agente Linux para formatar o disco de recursos criar o arquivo de permuta, modificar os seguintes parâmetros em /etc/waagent.conf apropriadamente:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    

    Se você quiser montar, formatar e criar a troca, você pode:

    • Passar isso como uma configuração de cloud-init toda vez que criar uma VM por meio de dados personalizados. Esse é o método recomendado.

    • Usar uma diretiva cloud-init inclusa na imagem que fará isso toda vez que a VM for criada.

      sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
      sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
      #cloud-config
      # Generated by Azure cloud image build
      disk_setup:
        ephemeral0:
          table_type: mbr
          layout: [66, [33, 82]]
          overwrite: True
      fs_setup:
        - device: ephemeral0.1
          filesystem: ext4
        - device: ephemeral0.2
          filesystem: swap
      mounts:
        - ["ephemeral0.1", "/mnt/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  14. Se você quiser cancelar o registro da assinatura, execute o seguinte comando:

    sudo subscription-manager unregister
    
  15. Desprovisionar

    Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

    Cuidado

    Se você estiver migrando uma máquina virtual específica e não desejar criar uma imagem generalizada, ignore a etapa de desprovisionamento. A execução do comando waagent -force -deprovision+user tornará o computador de origem inutilizável; esta etapa destina-se apenas a criar uma imagem generalizada.

    sudo rm -f /var/log/waagent.log
    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  16. Clique em Ação>Desligar no Gerenciador do Hyper-V. Agora, o VHD do Linux está pronto para ser carregado no Azure.

RHEL 8+ usando o Gerenciador do Hyper-V

  1. No Gerenciador do Hyper-V, selecione a máquina virtual.

  2. Clique em Conectar para abrir a janela do console para a máquina virtual.

  3. Certifique-se de que o serviço de rede será iniciado durante a inicialização executando o seguinte comando:

    sudo systemctl enable NetworkManager.service
    
  4. Configure a interface de rede para iniciar automaticamente na inicialização e usar DHCP:

    sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
    
  5. Registre a sua assinatura do Red Hat para habilitar a instalação de pacotes do repositório RHEL ao executar o seguinte comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  6. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de kernel para o Azure e habilitar o console serial.

    1. Remova os parâmetros GRUB atuais:
    sudo grub2-editenv - unset kernelopts
    
    1. Edite /etc/default/grub em um editor de texto e adicione o seguinte parâmetros:
    GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0"
    GRUB_TERMINAL_OUTPUT="serial console"
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    

    Isso garante que todas as mensagens do console sejam enviadas para a primeira porta serial e habilita a interação com o console serial, o que pode auxiliar o Suporte do Azure em problemas de depuração. Essa configuração também desliga as novas convenções de nomenclatura para NICs.

    1. Além dos itens acima, recomendamos remover os seguintes parâmetros:
    rhgb quiet crashkernel=auto
    

    Inicializações gráficas e silenciosas não são úteis em um ambiente de nuvem onde queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opção crashkernel configurada se quiser. Observe que este parâmetro reduz a memória disponível na máquina virtual em 128 MB ou mais, o que pode ser um problema em máquinas virtuais menores.

  7. Depois de editar /etc/default/grub, execute o comando a seguir para recompilar a configuração do grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    

    E para uma VM habilitada para UEFI, execute o seguinte comando:

    sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    
  8. Confira se o servidor SSH está instalado e configurado para iniciar no momento da inicialização, que geralmente é o padrão. Modifique o /etc/ssh/sshd_config para incluir a seguinte linha:

    ClientAliveInterval 180
    
  9. Instale o agente Linux do Azure, o cloud-init e outros utilitários necessários executando o seguinte comando:

    sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons
    sudo systemctl enable waagent.service
    sudo systemctl enable cloud-init.service
    
  10. Configurar o cloud-init para lidar com o provisionamento:

    1. Configurar waagent para o cloud-init:
    sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    

    Observação

    Se você estiver migrando uma máquina virtual específica e não desejar criar uma imagem generalizada, defina Provisioning.Agent=disabled na configuração /etc/waagent.conf.

    1. Configurar montagens:
    sudo echo "Adding mounts and disk_setup to init stage"
    sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    1. Configurar datasource do Azure:
    sudo echo "Allow only Azure datasource, disable fetching network setting via IMDS"
    sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    EOF
    
    1. Se estiver configurado, remova o arquivo de troca existente:
    if [[ -f /mnt/resource/swapfile ]]; then
    echo "Removing swapfile" #RHEL uses a swapfile by defaul
    swapoff /mnt/resource/swapfile
    rm /mnt/resource/swapfile -f
    fi
    
    1. Configurar o registro em log do cloud-init:
    sudo echo "Add console log file"
    sudo cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
    
    # This tells cloud-init to redirect its stdout and stderr to
    # 'tee -a /var/log/cloud-init-output.log' so the user can see output
    # there without needing to look on the console.
    output: {all: '| tee -a /var/log/cloud-init-output.log'}
    EOF
    
  11. Configuração de troca Não crie um espaço de troca no disco do sistema operacional.

    Antes, o agente de Linux do Azure era usado para configurar automaticamente o espaço de troca usando o disco de recurso local anexado à máquina virtual, depois que esta era provisionada no Azure. No entanto, isso agora é tratado pelo cloud-init, você não deve usar o Agente Linux para formatar o disco de recursos criar o arquivo de permuta, modificar os seguintes parâmetros em /etc/waagent.conf apropriadamente:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    
    • Passar isso como uma configuração de cloud-init toda vez que criar uma VM por meio de dados personalizados. Esse é o método recomendado.

    • Usar uma diretiva cloud-init inclusa na imagem que fará isso toda vez que a VM for criada.

      sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
      sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
      #cloud-config
      # Generated by Azure cloud image build
      disk_setup:
        ephemeral0:
          table_type: mbr
          layout: [66, [33, 82]]
          overwrite: True
      fs_setup:
        - device: ephemeral0.1
          filesystem: ext4
        - device: ephemeral0.2
          filesystem: swap
      mounts:
        - ["ephemeral0.1", "/mnt/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
      EOF
      
  12. Se você quiser cancelar o registro da assinatura, execute o seguinte comando:

    sudo subscription-manager unregister
    
  13. Desprovisionar

    Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

    sudo cloud-init clean
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo sudo rm -f /var/log/waagent.log
    sudo export HISTSIZE=0
    

    Cuidado

    Se você estiver migrando uma máquina virtual específica e não desejar criar uma imagem generalizada, ignore a etapa de desprovisionamento. A execução do comando waagent -force -deprovision+user tornará o computador de origem inutilizável; esta etapa destina-se apenas a criar uma imagem generalizada.

  14. Clique em Ação>Desligar no Gerenciador do Hyper-V. Agora, o VHD do Linux está pronto para ser carregado no Azure.

KVM

Esta seção mostra como usar o KVM para preparar um distribuição RHEL 6 ou RHEL 7 para carregamento no Azure.

RHEL 6 usando o KVM

Importante

Em 30 de novembro de 2020 foi encerrada a fase de manutenção do Red Hat Enterprise Linux 6. A fase de manutenção é seguida pela Fase de Ciclo de Vida Estendido. À medida que o Red Hat Enterprise Linux 6 sai das fases de manutenção completa, é altamente recomendável fazer upgrade para o Red Hat Enterprise Linux 7, 8 ou 9. Se os clientes precisarem permanecer no Red Hat Enterprise Linux 6, recomendamos adicionar o complemento Red Hat Enterprise Linux Extended Life Cycle Support (ELS).

  1. Baixe a imagem KVM do RHEL 6 no site do Red Hat.

  2. Definir uma senha raiz.

    Gere uma senha criptografada e copie a saída do comando:

    sudo openssl passwd -1 changeme
    

    Defina uma senha raiz com guestfish:

    sudo guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    Altere o segundo campo do usuário raiz de "!!" para a senha criptografada.

  3. Crie uma máquina virtual no KVM da imagem qcow2. Defina o tipo de disco como qcow2 e defina o modelo de dispositivo do adaptador de rede virtual para virtio. Em seguida, inicie a máquina virtual e faça logon como raiz.

  4. Crie ou edite o arquivo /etc/sysconfig/network e adicione o texto a seguir:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Crie ou edite o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 e adicione o texto a seguir:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Mova (ou remova) as regras de udev para evitar a geração de regras estáticas da interface Ethernet. Essas regras causam problemas ao clonar uma máquina virtual no Azure ou no Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

Observação

** Ao usar a Rede Acelerada (AN), a interface sintética criada deve ser configurada para não ser gerenciada usando uma regra udev. Isso impedirá que o NetworkManager atribua o mesmo IP a ele que a interface primária.

Para aplicá-lo:

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparently bonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. Certifique-se de que o serviço de rede será iniciado durante a inicialização executando o seguinte comando:

    sudo chkconfig network on
    
  2. Registre a sua assinatura do Red Hat para habilitar a instalação de pacotes do repositório RHEL ao executar o seguinte comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de kernel para o Azure. Para fazer esta configuração, abra /boot/grub/menu.lst em um editor de texto e verifique se o kernel padrão inclui os seguintes parâmetros:

    console=ttyS0 earlyprintk=ttyS0
    

    Isso garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, o que pode auxiliar o suporte do Azure com problemas de depuração.

    Além dos itens acima, recomendamos remover os seguintes parâmetros:

    rhgb quiet crashkernel=auto
    

    Inicializações gráficas e silenciosas não são úteis em um ambiente de nuvem onde queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opção crashkernel configurada se quiser. Observe que este parâmetro reduz a memória disponível na máquina virtual em 128 MB ou mais, o que pode ser um problema em máquinas virtuais menores.

  4. Adicione os módulos do Hyper-V em initramfs:

    Edite /etc/dracut.conf e adicione o seguinte conteúdo:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Recrie initramfs:

    sudo dracut -f -v
    
  5. Desinstale cloud-init:

    sudo yum remove cloud-init
    
  6. Verifique se o servidor SSH está instalado e configurado para começar na hora da inicialização:

    sudo chkconfig sshd on
    

    Modifique o /etc/ssh/sshd_config para incluir as seguintes linhas:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  7. O pacote WALinuxAgent WALinuxAgent-<version> foi enviado para o repositório de extras do Red Hat. Habilite o repositório de extras para a VM executando o seguinte comando:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  8. Instale o Agente Linux do Azure executando o seguinte comando:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  9. O agente de Linux do Azure pode configurar automaticamente o espaço de permuta usando o disco de recurso local anexado à máquina virtual, depois da mesma ser provisionada no Azure. É importante lembrar que o disco de recurso local é um disco temporário e pode ser esvaziado quando a máquina virtual for desprovisionada. Depois de instalar o agente de Linux do Azure na etapa anterior, modifique os seguintes parâmetros em /etc/waagent.conf:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  10. Cancele o registro da assinatura (se necessário) executando o seguinte comando:

    sudo subscription-manager unregister
    
  11. Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

    Observação

    Se você estiver migrando uma máquina virtual específica e não desejar criar uma imagem generalizada, ignore a etapa de desprovisionamento

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  12. Finalize a máquina virtual no KVM.

  13. Converta a imagem qcow2 para o formato VHD.

    Observação

    Há um bug conhecido nas versões qemu-img >=2.2.1 que causa a formatação incorreta de um VHD. O problema foi corrigido na versão QEMU 2.6. É recomendável usar o qemu-img 2.2.0 ou inferior, ou atualizar para a versão 2.6 ou posterior. Referência: https://bugs.launchpad.net/qemu/+bug/1490611.

    Primeiro, converta a imagem no formato bruto:

    sudo qemu-img convert -f qcow2 -O raw rhel-6.9.qcow2 rhel-6.9.raw
    

    Certifique-se de que o tamanho da imagem bruta é alinhado com 1 MB. Caso contrário, arredonde o tamanho para alinhar com 1 MB:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    Converta o disco bruto em um VHD de tamanho fixo:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    Ou então, com a versão de qemu 2.6 ou superior, inclui a opção force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
    

RHEL 7 usando o KVM

  1. Baixe a imagem KVM do RHEL 7 no site do Red Hat. Este procedimento usa o RHEL 7 como exemplo.

  2. Definir uma senha raiz.

    Gere uma senha criptografada e copie a saída do comando:

    sudo openssl passwd -1 changeme
    

    Defina uma senha raiz com guestfish:

    sudo  guestfish --rw -a <image-name>
    > <fs> run
    > <fs> list-filesystems
    > <fs> mount /dev/sda1 /
    > <fs> vi /etc/shadow
    > <fs> exit
    

    Altere o segundo campo do usuário raiz de "!!" para a senha criptografada.

  3. Crie uma máquina virtual no KVM da imagem qcow2. Defina o tipo de disco como qcow2 e defina o modelo de dispositivo do adaptador de rede virtual para virtio. Em seguida, inicie a máquina virtual e faça logon como raiz.

  4. Crie ou edite o arquivo /etc/sysconfig/network e adicione o texto a seguir:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Crie ou edite o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 e adicione o texto a seguir:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  6. Certifique-se de que o serviço de rede será iniciado durante a inicialização executando o seguinte comando:

    sudo systemctl enable network
    
  7. Registre a sua assinatura do Red Hat para habilitar a instalação de pacotes do repositório RHEL ao executar o seguinte comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  8. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de kernel para o Azure. Para fazer essa configuração, abra /etc/default/grub em um editor de texto e edite o parâmetro GRUB_CMDLINE_LINUX. Por exemplo:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Esse comando garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, o que pode auxiliar o suporte do Azure com problemas de depuração. O comando também desliga as novas convenções de nomenclatura do RHEL 7 para NICs. Além dos itens acima, recomendamos remover os seguintes parâmetros:

    rhgb quiet crashkernel=auto
    

    Inicializações gráficas e silenciosas não são úteis em um ambiente de nuvem onde queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opção crashkernel configurada se quiser. Observe que este parâmetro reduz a memória disponível na máquina virtual em 128 MB ou mais, o que pode ser um problema em máquinas virtuais menores.

  9. Depois de editar /etc/default/grub, execute o comando a seguir para recompilar a configuração do grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  10. Adicione os módulos do Hyper-V em initramfs.

    Edite /etc/dracut.conf e adicione o conteúdo:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Recrie initramfs:

    sudo dracut -f -v
    
  11. Desinstale cloud-init:

    sudo yum remove cloud-init
    
  12. Verifique se o servidor SSH está instalado e configurado para começar na hora da inicialização:

    sudo systemctl enable sshd
    

    Modifique o /etc/ssh/sshd_config para incluir as seguintes linhas:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. O pacote WALinuxAgent WALinuxAgent-<version> foi enviado para o repositório de extras do Red Hat. Habilite o repositório de extras para a VM executando o seguinte comando:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  14. Instale o Agente Linux do Azure executando o seguinte comando:

    sudo yum install WALinuxAgent
    

    Habilite o serviço de waagent:

    sudo systemctl enable waagent.service
    
  15. Instalar o cloud-init siga as etapas em "Preparar uma máquina virtual do RHEL 7 usando o Gerenciador do Hyper-V", etapa 12, "Instalar Cloud-init para lidar com o provisionamento".

  16. Configuração de troca

    Não crie o espaço de troca no disco do sistema operacional. Siga as etapas em”'Preparar uma máquina virtual RHEL 7 usando o Gerenciador do Hyper-V”, etapa 13, “Configuração de permuta”

  17. Cancele o registro da assinatura (se necessário) executando o seguinte comando:

    sudo subscription-manager unregister
    
  18. Desprovisionar

    Siga as etapas em ”Preparar uma máquina virtual RHEL 7 usando o Gerenciador do Hyper-V”, etapa 15, “Desprovisionamento”

  19. Finalize a máquina virtual no KVM.

  20. Converta a imagem qcow2 para o formato VHD.

    Observação

    Há um bug conhecido nas versões qemu-img >=2.2.1 que causa a formatação incorreta de um VHD. O problema foi corrigido na versão QEMU 2.6. É recomendável usar o qemu-img 2.2.0 ou inferior, ou atualizar para a versão 2.6 ou posterior. Referência: https://bugs.launchpad.net/qemu/+bug/1490611.

    Primeiro, converta a imagem no formato bruto:

    sudo qemu-img convert -f qcow2 -O raw rhel-7.4.qcow2 rhel-7.4.raw
    

    Certifique-se de que o tamanho da imagem bruta é alinhado com 1 MB. Caso contrário, arredonde o tamanho para alinhar com 1 MB:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    Converta o disco bruto em um VHD de tamanho fixo:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    Ou então, com a versão de qemu 2.6 ou superior, inclui a opção force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
    

VMware

Esta seção mostra como preparar um distribuição de RHEL 6 ou RHEL 7 a partir do VMware.

Pré-requisitos

Esta seção pressupõe que você já instalou uma máquina virtual RHEL no VMware. Para saber mais sobre como instalar um sistema operacional no VMware, confira Guia de instalação do sistema operacional convidado VMware.

  • Ao instalar o sistema operacional Linux, recomendamos usar partições-padrão em vez de LVM, que geralmente é o padrão para muitas instalações. Isso evitará conflitos de nome LVM entre a máquina virtual clonada, especialmente se um disco do sistema operacional precisar ser anexado a outra máquina virtual para solução de problemas. Se você preferir, é possível usar LVM ou RAID em discos de dados.
  • Não configure uma partição de troca no disco do sistema operacional. O agente Linux pode ser configurado para criar um arquivo de permuta no disco de recursos temporários. Confira as etapas a seguir para obter mais informações sobre esse assunto.
  • Ao criar o disco rígido virtual, escolha Armazenar disco virtual como um único arquivo.

RHEL 6 usando VMware

Importante

Em 30 de novembro de 2020 foi encerrada a fase de manutenção do Red Hat Enterprise Linux 6. A fase de manutenção é seguida pela Fase de Ciclo de Vida Estendido. Como o Red Hat Enterprise Linux 6 é uma versão transição das Fases de Manutenção/Completas, é altamente recomendável atualizar para o Red Hat Enterprise Linux 7, 8 ou 9. Se os clientes precisam continuar usando o Red Hat Enterprise Linux 6, é recomendável adicionar o Complemento de ELS (Suporte ao Ciclo de Vida Estendido) do Red Hat Enterprise Linux.

  1. No RHEL 6, NetworkManager pode interferir com o agente Linux do Azure. Desinstale este pacote ao executar o seguinte comando:

    sudo rpm -e --nodeps NetworkManager
    
  2. Crie um arquivo chamado network no diretório /etc/sysconfig/ que contém o seguinte texto:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  3. Crie ou edite o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 e adicione o texto a seguir:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  4. Mova (ou remova) as regras de udev para evitar a geração de regras estáticas da interface Ethernet. Essas regras causam problemas ao clonar uma máquina virtual no Azure ou no Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    

Observação

** Ao usar a Rede Acelerada (AN), a interface sintética criada deve ser configurada para não ser gerenciada usando uma regra udev. Isso impedirá que o NetworkManager atribua o mesmo IP a ele que a interface primária.

Para aplicá-lo:

sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules
# Accelerated Networking on Azure exposes a new SRIOV interface to the VM.
# This interface is transparently bonded to the synthetic interface,
# so NetworkManager should just ignore any SRIOV interfaces.
SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION=="add", ENV{NM_UNMANAGED}="1"
EOF
  1. Certifique-se de que o serviço de rede será iniciado durante a inicialização executando o seguinte comando:

    sudo chkconfig network on
    
  2. Registre a sua assinatura do Red Hat para habilitar a instalação de pacotes do repositório RHEL ao executar o seguinte comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. O pacote WALinuxAgent WALinuxAgent-<version> foi enviado para o repositório de extras do Red Hat. Habilite o repositório de extras para a VM executando o seguinte comando:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  4. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de kernel para o Azure. Para fazer isso, abra /etc/default/grub em um editor de texto e edite o parâmetro GRUB_CMDLINE_LINUX. Por exemplo:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
    

    Isso garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, o que pode auxiliar o suporte do Azure com problemas de depuração. Além dos itens acima, recomendamos remover os seguintes parâmetros:

    rhgb quiet crashkernel=auto
    

    Inicializações gráficas e silenciosas não são úteis em um ambiente de nuvem onde queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opção crashkernel configurada se quiser. Observe que este parâmetro reduz a memória disponível na máquina virtual em 128 MB ou mais, o que pode ser um problema em máquinas virtuais menores.

  5. Adicione os módulos do Hyper-V em initramfs:

    Edite /etc/dracut.conf e adicione o seguinte conteúdo:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Recrie initramfs:

    sudo dracut -f -v
    
  6. Confira se o servidor SSH está instalado e configurado para iniciar no momento da inicialização, que geralmente é o padrão. Modifique o /etc/ssh/sshd_config para incluir a seguinte linha:

    ClientAliveInterval 180
    
  7. Instale o Agente Linux do Azure executando o seguinte comando:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  8. Não crie o espaço de troca no disco do sistema operacional.

    O agente de Linux do Azure pode configurar automaticamente o espaço de permuta usando o disco de recurso local anexado à máquina virtual, depois da mesma ser provisionada no Azure. É importante lembrar que o disco de recurso local é um disco temporário e pode ser esvaziado quando a máquina virtual for desprovisionada. Depois de instalar o agente de Linux do Azure na etapa anterior, modifique os seguintes parâmetros em /etc/waagent.conf:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  9. Cancele o registro da assinatura (se necessário) executando o seguinte comando:

    sudo subscription-manager unregister
    
  10. Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

    Observação

    Se você estiver migrando uma máquina virtual específica e não desejar criar uma imagem generalizada, ignore a etapa de desprovisionamento.

    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision+user
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    
  11. Desligue a máquina virtual e, em seguida, converta o arquivo VMDK em um arquivo .vhd.

    Observação

    Há um bug conhecido nas versões qemu-img >=2.2.1 que causa a formatação incorreta de um VHD. O problema foi corrigido na versão QEMU 2.6. É recomendável usar o qemu-img 2.2.0 ou inferior, ou atualizar para a versão 2.6 ou posterior. Referência: https://bugs.launchpad.net/qemu/+bug/1490611.

    Primeiro, converta a imagem no formato bruto:

    sudo qemu-img convert -f vmdk -O raw rhel-6.9.vmdk rhel-6.9.raw
    

    Certifique-se de que o tamanho da imagem bruta é alinhado com 1 MB. Caso contrário, arredonde o tamanho para alinhar com 1 MB:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-6.9.raw $rounded_size
    

    Converta o disco bruto em um VHD de tamanho fixo:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
    

    Ou então, com a versão de qemu 2.6 ou superior, inclui a opção force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
    

RHEL 7 usando VMware

  1. Crie ou edite o arquivo /etc/sysconfig/network e adicione o texto a seguir:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  2. Crie ou edite o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0 e adicione o texto a seguir:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  3. Certifique-se de que o serviço de rede será iniciado durante a inicialização executando o seguinte comando:

    sudo systemctl enable network
    
  4. Registre a sua assinatura do Red Hat para habilitar a instalação de pacotes do repositório RHEL ao executar o seguinte comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  5. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir parâmetros adicionais de kernel para o Azure. Para fazer essa modificação, abra /etc/default/grub em um editor de texto e edite o parâmetro GRUB_CMDLINE_LINUX. Por exemplo:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    Essa configuração também garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, o que pode auxiliar o suporte do Azure com problemas de depuração. Ele também desativa novas convenções de nomenclatura do RHEL 7 para NICs. Além dos itens acima, recomendamos remover os seguintes parâmetros:

    rhgb quiet crashkernel=auto
    

    Inicializações gráficas e silenciosas não são úteis em um ambiente de nuvem onde queremos que todos os logs sejam enviados para a porta serial. Você pode deixar a opção crashkernel configurada se quiser. Observe que este parâmetro reduz a memória disponível na máquina virtual em 128 MB ou mais, o que pode ser um problema em máquinas virtuais menores.

  6. Depois de editar /etc/default/grub, execute o comando a seguir para recompilar a configuração do grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  7. Adicione os módulos do Hyper-V em initramfs.

    Edite /etc/dracut.confe adicione o conteúdo:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Recrie initramfs:

    sudo dracut -f -v
    
  8. Confira se o servidor SSH está instalado e configurado para iniciar no tempo de inicialização. Essa configuração geralmente é o padrão. Modifique o /etc/ssh/sshd_config para incluir a seguinte linha:

    ClientAliveInterval 180
    
  9. O pacote WALinuxAgent WALinuxAgent-<version> foi enviado para o repositório de extras do Red Hat. Habilite o repositório de extras para a VM executando o seguinte comando:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  10. Instale o Agente Linux do Azure executando o seguinte comando:

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent.service
    
  11. Instalar cloud-init

    Siga as etapas em "Preparar uma máquina virtual do RHEL 7 usando o Gerenciador do Hyper-V", etapa 12, "Instalar cloud-init para lidar com o provisionamento".

  12. Configuração de troca

    Não crie o espaço de troca no disco do sistema operacional. Siga as etapas em “Preparar uma máquina virtual RHEL 7 usando o Gerenciador do Hyper-V”, etapa 13, “Configuração de troca”

  13. Se você quiser cancelar o registro da assinatura, execute o seguinte comando:

    sudo subscription-manager unregister
    
  14. Desprovisionar

    Siga as etapas em ”Preparar uma máquina virtual RHEL 7 usando o Gerenciador do Hyper-V”, etapa 15, “Desprovisionamento”

  15. Desligue a máquina virtual e converta o arquivo VMDK para o formato VHD.

    Observação

    Há um bug conhecido nas versões qemu-img >=2.2.1 que causa a formatação incorreta de um VHD. O problema foi corrigido na versão QEMU 2.6. É recomendável usar o qemu-img 2.2.0 ou inferior, ou atualizar para a versão 2.6 ou posterior. Referência: https://bugs.launchpad.net/qemu/+bug/1490611.

    Primeiro, converta a imagem no formato bruto:

    sudo qemu-img convert -f vmdk -O raw rhel-7.4.vmdk rhel-7.4.raw
    

    Certifique-se de que o tamanho da imagem bruta é alinhado com 1 MB. Caso contrário, arredonde o tamanho para alinhar com 1 MB:

    MB=$((1024*1024))
    size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \
    gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
    rounded_size=$((($size/$MB + 1)*$MB))
    sudo qemu-img resize rhel-7.4.raw $rounded_size
    

    Converta o disco bruto em um VHD de tamanho fixo:

    sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
    

    Ou então, com a versão de qemu 2.6 ou superior, inclui a opção force_size:

    sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
    

Arquivo de início rápido

Esta seção mostra como preparar uma distribuição RHEL 7 a partir de um imagem ISO usando um arquivo início rápido.

RHEL 7 a partir de um arquivo de início rápido

  1. Crie um arquivo de início rápido que inclui o seguinte conteúdo e salve o arquivo. Para saber mais sobre a instalação de início rápido, consulte o Guia de instalação de início rápido.

    # Kickstart for provisioning a RHEL 7 Azure VM
    
    # System authorization information
      auth --enableshadow --passalgo=sha512
    
    # Use graphical install
    text
    
    # Don't run the Setup Agent on first boot
    firstboot --disable
    
    # Keyboard layouts
    keyboard --vckeymap=us --xlayouts='us'
    
    # System language
    lang en_US.UTF-8
    
    # Network information
    network  --bootproto=dhcp
    
    # Root password
    rootpw --plaintext "to_be_disabled"
    
    # System services
    services --enabled="sshd,waagent,NetworkManager"
    
    # System timezone
    timezone Etc/UTC --isUtc --ntpservers 0.rhel.pool.ntp.org,1.rhel.pool.ntp.org,2.rhel.pool.ntp.org,3.rhel.pool.ntp.org
    
    # Partition clearing information
    clearpart --all --initlabel
    
    # Clear the MBR
    zerombr
    
    # Disk partitioning information
    part /boot --fstype="xfs" --size=500
    part / --fstyp="xfs" --size=1 --grow --asprimary
    
    # System bootloader configuration
    bootloader --location=mbr
    
    # Firewall configuration
    firewall --disabled
    
    # Enable SELinux
    selinux --enforcing
    
    # Don't configure X
    skipx
    
    # Power down the machine after install
    poweroff
    
    %packages
    @base
    @console-internet
    chrony
    sudo
    parted
    -dracut-config-rescue
    
    %end
    
    %post --log=/var/log/anaconda/post-install.log
    
    #!/bin/bash
    
    # Register Red Hat Subscription
    subscription-manager register --username=XXX --password=XXX --auto-attach --force
    
    # Install latest repo update
    yum update -y
    
    # Enable extras repo
    subscription-manager repos --enable=rhel-7-server-extras-rpms
    
    # Install WALinuxAgent
    yum install -y WALinuxAgent
    
    # Unregister Red Hat subscription
    subscription-manager unregister
    
    # Enable waaagent at boot-up
    systemctl enable waagent
    
    # Install cloud-init
    yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
    # Configure waagent for cloud-init
    sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
    sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
    
    echo "Adding mounts and disk_setup to init stage"
    sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    # Disable the root account
    usermod root -p '!!'
    
    # Configure swap using cloud-init
    echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
    #cloud-config
    # Generated by Azure cloud image build
    disk_setup:
    ephemeral0:
        table_type: mbr
        layout: [66, [33, 82]]
        overwrite: True
    fs_setup:
    - device: ephemeral0.1
        filesystem: ext4
    - device: ephemeral0.2
        filesystem: swap
    mounts:
    - ["ephemeral0.1", "/mnt"]
    - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"]
    EOF
    
    # Set the cmdline
    sed -i 's/^\(GRUB_CMDLINE_LINUX\)=".*"$/\1="console=tty1 console=ttyS0 earlyprintk=ttyS0"/g' /etc/default/grub
    
    # Enable SSH keepalive
    sed -i 's/^#\(ClientAliveInterval\).*$/\1 180/g' /etc/ssh/sshd_config
    
    # Build the grub cfg
    grub2-mkconfig -o /boot/grub2/grub.cfg
    
    # Configure network
    cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    EOF
    
    # Deprovision and prepare for Azure if you are creating a generalized image
    sudo cloud-init clean --logs --seed
    sudo rm -rf /var/lib/cloud/
    sudo rm -rf /var/lib/waagent/
    sudo rm -f /var/log/waagent.log
    
    sudo waagent -force -deprovision+user
    rm -f ~/.bash_history
    export HISTSIZE=0
    
    %end
    
  2. Coloque o arquivo de início rápido onde o sistema de instalação pode acessá-lo.

  3. Crie uma nova máquina virtual no Gerenciador do Hyper-V. Na página Conectar Disco Rígido Virtual, selecione Anexar um disco rígido virtual posteriormente e conclua o Assistente de Nova Máquina Virtual.

  4. Abra as configurações da máquina virtual:

    1. Anexe um novo disco rígido virtual à máquina virtual. Selecione Formato VHD e Tamanho Fixo.

    2. Anexe o ISO de instalação à unidade de DVD.

    3. Configure o BIOS para inicializar do CD.

  5. Iniciar a máquina virtual. Quando o guia de instalação for exibida, pressione Tab para configurar as opções de inicialização.

  6. Insira inst.ks=<the location of the kickstart file> no final das opções de inicialização e pressione Enter.

  7. Aguarde a conclusão da instalação. Quando a instalação for concluída, a máquina virtual desligará automaticamente. Agora, seu VHD Linux está pronto para ser carregado no Azure.

Problemas conhecidos

O driver do Hyper-V não foi incluído no disco de RAM inicial ao usar um hipervisor não Hyper-V

Em alguns casos, os instaladores do Linux podem não incluir os drivers para Hyper-V no disco RAM inicial (initrd ou initramfs), a menos que ele detecte que está em execução em um ambiente Hyper-V.

Ao usar um sistema de virtualização diferente (como Virtualbox, Xen etc.) para preparar a imagem do Linux, talvez seja necessário recompilar o initrd para garantir que pelo menos os módulos kernel hv_vmbus e hv_storvsc estejam disponíveis no disco RAM inicial. Esse já é um problema conhecido em sistemas com base em distribuição no Red Hat em upstream.

Para resolver esse problema, adicione os módulos do Hyper-V nos initramfs e os recompile:

Edite /etc/dracut.conf e adicione o seguinte conteúdo:

add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "

Recrie initramfs:

sudo dracut -f -v

Para obter mais detalhes, consulte as informações sobre recriação de initramfs.

Próximas etapas

  • Agora, você está pronto para usar o disco rígido virtual Red Hat Enterprise Linux para criar novas máquinas virtuais no Azure. Se esta é a primeira vez que você está carregando o arquivo .vhd para o Azure, consulte Criar uma VM do Linux a partir de um disco personalizado.
  • Para obter mais detalhes sobre os hipervisores certificados para execução do Red Hat Enterprise Linux, visite o site da Red Hat.
  • Para saber mais sobre como usar imagens BYOS do RHEL prontas para produção, vá para a página de documentação do BYOS.