Preparar uma máquina virtual Oracle Linux para o Azure

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

Este artigo assume que você já tenha instalado um sistema operacional Oracle Linux em um disco rígido virtual. Existem várias ferramentas para criar arquivos .vhd, por exemplo, uma solução de virtualização como o Hyper-V. Para obter instruções, consulte Instalar a função Hyper-V e configurar uma máquina Virtual.

Notas de instalação do Oracle Linux

  • Veja também as Notas de Instalação Geral do Linux para obter mais dicas sobre como preparar o Linux para o Azure.
  • O Hyper-V e o Azure dão suporte ao Oracle Linux com o UEK (Unbreakable Enterprise Kernel) ou o kernel compatível com o Red Hat.
  • O UEK2 da Oracle não é compatível com o Hyper-V e Azure, pois não inclui os drivers necessários.
  • O formato VHDX não tem suporte no Azure, somente o VHD fixo. Você pode converter o disco em formato VHD usando o Gerenciador do Hyper-V ou o cmdlet convert-vhd.
  • É necessário suporte a kernel para montar sistemas de arquivos UDF. Na primeira inicialização no Azure, a configuração de provisionamento é passada para a VM do Linux via mídia formatada em UDF que é anexada ao convidado. O agente de Linux do Azure deve ser capaz de montar o sistema de arquivos UDF para ler sua configuração e provisionar a VM.
  • Ao instalar o sistema Linux, recomendamos que você use partições padrão em vez do LVM (que costuma ser o padrão para muitas instalações). Estas partições-padrão evita conflitos de nome LVM com VMs clonadas, especialmente se um disco do sistema operacional precisar ser anexado a outra VM para solução de problemas. Se você preferir, é possível usar LVM ou RAID em discos de dados.
  • As versões do kernel do Linux anteriores à 2.6.37 não são suporte para NUMA no Hyper-V com tamanhos de VM maiores. Esse problema afeta principalmente distribuições mais antigas que usam o kernel do Red Hat 2.6.32 upstream e foi corrigido no Oracle Linux 6.6 e posterior.
  • Não configure uma partição de permuta no disco do sistema operacional.
  • 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. Consulte Notas de Instalação do Linux para obter mais informações.
  • Certifique-se de que o repositório Addons está habilitado. Edite o arquivo /etc/yum.repos.d/public-yum-ol6.repo(Oracle Linux 6) ou /etc/yum.repos.d/public-yum-ol7.repo(Oracle Linux 7) e altere a linha enabled=0 para enabled=1 em [ol6_addons] ou [ol7_addons] nesse arquivo.

Oracle Linux 6.x

Importante

Leve em conta o fato de que o Oracle Linux 6.x já tem uma EOL. O Oracle Linux versão 6.10 oferece suporte ao ELS, mas isto terminará em 07/2024.

Você deve concluir as etapas de configuração específicas do sistema operacional para que a máquina virtual seja executada no Azure.

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

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

  3. Desinstale o NetworkManager executando o seguinte comando:

    sudo rpm -e --nodeps NetworkManager
    

    Observação

    Se o pacote ainda não foi instalado, este comando falhará com uma mensagem de erro. Esta mensagem é esperada.

  4. Crie um arquivo chamado network in the /etc/sysconfig/ que contém o seguinte texto:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Crie um arquivo chamado ifcfg-eth0 in the /etc/sysconfig/network-scripts/ que contém o seguinte texto:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Modifique as regras de udev para evitar a geração de regras estáticas das interfaces Ethernet. Essas regras podem provocar 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
    
  7. Certifique-se de que o serviço de rede comece no momento da inicialização, executando o seguinte comando:

    sudo chkconfig network on
    
  8. Instale o python-pyasn1 executando o seguinte comando:

    sudo yum install python-pyasn1
    
  9. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir mais parâmetros do kernel para o Azure. Para fazer isso, abra "/boot/grub/menu.lst" em um editor de texto e verifique se o kernel inclui os seguintes parâmetros:

    console=ttyS0 earlyprintk=ttyS0
    

    Esta configuração garante que todas as mensagens do console sejam enviadas para a primeira porta serial, o que pode ajudar o Suporte do Azure com problemas de depuração.

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

    rhgb quiet crashkernel=auto
    

    As inicializações gráfica e silenciosa não são úteis em um ambiente de rede, quando queremos que todos os logs sejam enviados para a porta serial.

    A opção crashkernel pode ser configurada se desejado, mas observe que este parâmetro reduz a quantidade de memória disponível na VM em 128 MB ou mais, o que pode ser problemático nos tamanhos menores de VMs.

  10. Confira se o servidor SSH está instalado e configurado para iniciar no tempo de inicialização. Geralmente, esse é o padrão.

  11. Instale o Agente Linux do Azure executando o comando a seguir. A versão mais recente é 2.0.15.

    sudo yum install WALinuxAgent
    

    A instalação do pacote WALinuxAgent remove os pacotes NetworkManager e NetworkManager-gnome se eles ainda não foram removidos, como descrito na etapa 2.

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

    O Agente Linux do Azure pode configurar automaticamente o espaço de permuta usando o disco de recurso local que é anexado à VM após o provisionamento no Azure. O disco de recurso local é um disco temporário e pode ser esvaziado quando a VM é desprovisionada. Depois de instalar o Agente Linux do Azure (consulte a etapa anterior), modifique os seguintes parâmetros em /etc/waagent.conf de maneira apropriada:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  13. Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

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


Oracle Linux 7.0 e posterior

Alterações no Oracle Linux 7

A preparação de uma máquina virtual do Oracle Linux 7 para o Azure é semelhante à do Oracle Linux 6, mas existem várias diferenças importantes que vale a pena ressaltar:

  • O Azure dá suporte ao Oracle Linux com o UEK (Unbreakable Enterprise Kernel) ou o kernel compatível com o Red Hat. É recomendável o Oracle Linux com UEK.
  • O pacote do NetworkManager não entra mais em conflito com o agente Linux do Azure. Esse pacote é instalado por padrão e recomendamos que não seja removido.
  • O GRUB2 agora é usado como carregador de inicialização padrão. Com isso, o procedimento de edição de parâmetros do kernel mudou (confira abaixo).
  • O XFS agora é o sistema de arquivos padrão. Ainda é possível usar o sistema de arquivos ext4 se você preferir.

Etapas de configuração

  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 um arquivo chamado network in the /etc/sysconfig/ que contém o seguinte texto:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Crie um arquivo chamado ifcfg-eth0 in the /etc/sysconfig/network-scripts/ que contém o seguinte texto:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  5. Modifique as regras de udev para evitar a geração de regras estáticas das interfaces Ethernet. Essas regras podem provocar 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
    
  6. Certifique-se de que o serviço de rede comece no momento da inicialização, executando o seguinte comando:

    sudo chkconfig network on
    
  7. Execute o comando a seguir para instalar o pacote python-pyasn1:

    sudo yum install python3-pyasn1
    
  8. Execute o comando a seguir para limpar os metadados atuais do yum e instalar atualizações:

    sudo yum clean all
    sudo yum -y update
    
  9. Modifique a linha de inicialização do kernel em sua configuração de grub para incluir mais parâmetros do 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 net.ifnames=0"
    

    Isso também garantirá que todas as mensagens do console sejam enviadas para a primeira porta serial, que pode auxiliar o suporte do Azure com problemas de depuração. Ele também desativa as convenções de nomenclatura para NICs no Oracle Linux 7 com o Unbreakable Enterprise Kernel. Além disso, recomendamos que você remova os seguintes parâmetros:

       rhgb quiet crashkernel=auto
    

    As inicializações gráfica e silenciosa não são úteis em um ambiente de rede, quando queremos que todos os logs sejam enviados para a porta serial.

    A opção crashkernel pode ser configurada se desejado, mas observe que este parâmetro reduzirá a quantidade de memória disponível na VM em 128 MB ou mais, o que pode ser problemático em tamanhos menores de VMs.

  10. Uma vez terminada a edição do "/etc/default/grub" como mostramos acima, execute o seguinte comando para recompilar a configuração do grub:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  11. Confira se o servidor SSH está instalado e configurado para iniciar no tempo de inicialização. Geralmente, esse é o padrão.

  12. Instale o agente Linux do Azure e as dependências:

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent
    
  13. Instalar cloud-init para lidar com o provisionamento

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
  14. Configurar o waagent para o cloud-init

    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
    
    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
    
    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
    
    
    if [[ -f /mnt/resource/swapfile ]]; then
    echo Removing swapfile - Oracle Linux uses a swapfile by default
    swapoff /mnt/swapfile
    rm /mnt/swapfile -f
    fi
    
    echo "Add console log file"
    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
    
  15. Configuração de troca. Não crie o espaço de troca no disco do sistema operacional.

    Antes, o Agente Azure Linux era usado automaticamente para configurar o espaço de troca usando o recurso do disco local anexado à máquina virtual após a máquina virtual ser provisionada no Azure. No entanto, isso agora é tratado pelo cloud-init, então você não deve usar o Agente Linux para formatar o disco de recursos, criar o arquivo de swap ou modificar os parâmetros a seguir no /etc/waagent.conf apropriadamente:

    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
    

    Se quiser montar, formatar e criar o swap, você pode:

    • Passar isso como uma configuração de cloud-init toda vez que criar uma VM
    • Usar uma diretiva cloud-init inclusa na imagem que fará isso toda vez que a VM for criada:
    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/resource"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    
  16. Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure:

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

    Observação

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

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

Próximas etapas

Agora você está pronto para usar o .vhd Oracle 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.