Preparar uma máquina virtual do SLES ou openSUSE para o Azure

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

Em alguns casos, talvez você queira usar o SUSE Linux Enterprise Server (SLES) personalizado ou VMs (máquinas virtuais) openSUSE Leap Linux em seu ambiente do Azure e ser capaz de criar esses tipos de VMs por meio da automação. Este artigo demonstra como criar e carregar um disco rígido virtual (VHD) personalizado do Azure que contém o sistema operacional SUSE Linux.

Pré-requisitos

Este artigo pressupõe que você já instalou um sistema operacional SLES ou openSUSE Leap Linux em um disco rígido virtual. Existem várias ferramentas para criar arquivos .vhd. Por exemplo, você pode usar uma solução de virtualização, como o Hyper-V. Para obter instruções, veja Instalar o Hyper-V e criar uma máquina virtual.

Notas de instalação do SLES/openSUSE Leap

  • Para obter mais dicas sobre como preparar o Linux para o Azure, veja também as Notas de Instalação Geral do Linux.
  • O Azure não dá suporte a arquivos de Imagem de Disco Rígido do Windows (.vhdx). Somente arquivos VHD (.vhd) têm suporte fora das máquinas virtuais. Você pode converter o disco em formato VHD usando o Gerenciador do Hyper-V ou o cmdlet Convert-VHD.
  • O Azure dá suporte a máquinas virtuais Gen1 (inicialização do BIOS) e Gen2 (inicialização de UEFI).
  • O módulo de kernel da tabela de alocação de arquivo virtual (VFAT) deve estar habilitado no kernel.
  • Não configure uma partição de permuta no disco do sistema operacional. O agente Linux pode ser configurado para criar um arquivo de permuta no disco de recursos temporários. As etapas posteriores neste artigo fornecem mais informações sobre como configurar o espaço de troca.
  • 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. Para obter mais informações, consulte Notas gerais de Instalação do Linux.

Observação

A versão 21.2 ou posterior do cloud-init remove o requisito de UDF (função definida pelo usuário). Mas sem o módulo udf habilitado, o CD-ROM não será montado durante o provisionamento, o que impede que os dados personalizados sejam aplicados. Uma solução alternativa é aplicar os dados do usuário. No entanto, ao contrário dos dados personalizados, os dados do usuário não são criptografados. Para obter mais informações, confira Formatos de dados do usuário na documentação do cloud-init.

Use o SUSE Studio

SUSE Studio pode criar e gerenciar facilmente suas imagens SLES e openSUSE Leap no Azure e no Hyper-V. O SUSE Studio é a abordagem recomendada para personalizar suas próprias imagens SLES e openSUSE Leap.

Como alternativa à criação de seu próprio VHD, o SUSE também publica imagens BYOS (traga sua própria assinatura) para SLES no VM Depot.

Preparar o SLES para o Azure

  1. Configure os módulos do Azure e do Hyper-V, se necessário.

    Se o hipervisor de software não for Hyper-V, outros módulos precisarão ser adicionados ao disco de RAM inicial (initramfs) para serem inicializados com êxito no Azure.

    Edite o arquivo /etc/dracut.conf e adicione a seguinte linha ao arquivo:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Execute o comando dracut para recompilar o arquivo initramfs:

    sudo dracut --verbose --force
    
  2. Habilitar o console serial.

    Para trabalhar com êxito com o console serial, você deve configurar várias variáveis no arquivo /etc/defaults/grub e recriar o GRUB no servidor:

    # Add console=ttyS0 and earlyprintk=ttS0 to the variable.
    # Remove "splash=silent" and "quiet" options.
    GRUB_CMDLINE_LINUX_DEFAULT="audit=1 no-scroll fbcon=scrollback:0 mitigations=auto security=apparmor crashkernel=228M,high crashkernel=72M,low console=ttyS0 earlyprintk=ttyS0"
    
    # Add "console serial" to GRUB_TERMINAL.
    GRUB_TERMINAL="console serial"
    
    # Set the GRUB_SERIAL_COMMAND variable.
    
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
    
    /usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
    
  3. Registre seu sistema SUSE Linux Enterprise para permitir baixar atualizações e instalar pacotes.

  4. Atualize o sistema com os patches mais recentes:

    sudo zypper update
    
  5. Instale o Agente de VM do Linux do Azure (waagent) e o cloud-init:

    sudo SUSEConnect -p sle-module-public-cloud/15.2/x86_64  (SLES 15 SP2)
    sudo zypper refresh
    sudo zypper install python-azure-agent
    sudo zypper install cloud-init
    
  6. Habilite waagent e o cloud-init para iniciar na inicialização:

    sudo systemctl enable  waagent
    sudo systemctl enable cloud-init-local.service
    sudo systemctl enable cloud-init.service
    sudo systemctl enable cloud-config.service
    sudo systemctl enable cloud-final.service
    sudo systemctl daemon-reload
    sudo cloud-init clean
    
  7. Atualize a configuração do cloud-init:

    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    
    EOF
    
    sudo cat <<EOF | sudo tee  /etc/cloud/cloud.cfg.d/05_logging.cfg
    # 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
    
    # Make sure mounts and disk_setup are in the init stage:
    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
    
  8. Se você quiser montar, formatar e criar uma partição de troca, uma opção é passar uma configuração do cloud-init sempre que você criar uma VM.

    Outra opção é usar uma diretiva do cloud-init na imagem para configurar o espaço de troca sempre que a VM for criada:

    cat  <<EOF | sudo tee -a /etc/systemd/system.conf
    'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"'
    EOF
    
    cat <<EOF | sudo tee /etc/cloud/cloud.cfg.d/00-azure-swap.cfg
    #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.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    
  9. Antes, o Agente 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. Como essa etapa agora é tratada pelo cloud-init, você não deve usar Agente Linux do Azure para formatar o disco de recursos ou criar o arquivo de troca. Use estes comandos para modificar o arquivo /etc/waagent.conf adequadamente:

    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=auto/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/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 usando uma versão do cloud-init anterior à 21.2, verifique se o módulo udf está habilitado. Remover ou desabilitar causará uma falha de provisionamento ou inicialização. O cloud-init versão 21.2 ou posterior remove o requisito da UDF.

  10. Verifique se o arquivo /etc/fstab faz referência ao disco usando seu UUID (by-uuid).

  11. Remova as regras de udev e os arquivos de configuração do adaptador de rede para evitar a geração de regras estáticas para as interfaces Ethernet. Essas regras provocam problemas ao clonar uma máquina virtual no Microsoft Azure ou no Hyper-V.

    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    sudo rm -f /etc/udev/rules.d/85-persistent-net-cloud-init.rules
    sudo rm -f /etc/sysconfig/network/ifcfg-eth*
    
  12. É recomendável editar o arquivo /etc/sysconfig/network/dhcp e alterar o parâmetro DHCLIENT_SET_HOSTNAME para o seguinte:

    DHCLIENT_SET_HOSTNAME="no"
    
  13. No arquivo /etc/sudoers, exclua o comentário ou remova as seguintes linhas, se estiverem presentes:

    Defaults targetpw   # Ask for the password of the target user i.e. root
    ALL    ALL=(ALL) ALL   # WARNING! Only use this setting together with 'Defaults targetpw'!
    
  14. Certifique-se de que o servidor SSH está instalado e configurado para iniciar no tempo de inicialização:

    sudo systemctl enable sshd
    
  15. Limpe a fase de cloud-init:

    sudo cloud-init clean --seed --logs
    
  16. Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure.

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

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

Preparar o openSUSE 15.2+

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

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

  3. No terminal, execute o comando zypper lr. Se esse comando retornar uma saída semelhante ao exemplo a seguir, os repositórios serão configurados conforme o esperado e nenhum ajuste será necessário. (Os números de versão podem variar.)

    # Alias Nome habilitado Atualizar
    1 Cloud:Tools_15.2 Cloud:Tools_15.2 Sim Sim
    2 openSUSE_15.2_OSS openSUSE_15.2_OSS Sim Sim
    3 openSUSE_15.2_Updates openSUSE_15.2_Updates Sim Yes

    Se o comando retornar "Nenhum repositório definido", use os seguintes comandos para adicionar esses repositórios:

    sudo zypper ar -f http://download.opensuse.org/repositories/Cloud:Tools/openSUSE_15.2 Cloud:Tools_15.2
    sudo zypper ar -f https://download.opensuse.org/distribution/15.2/repo/oss openSUSE_15.2_OSS
    sudo zypper ar -f http://download.opensuse.org/update/15.2 openSUSE_15.2_Updates
    

    Em seguida, você pode verificar se os repositórios foram adicionados executando novamente o comando zypper lr. Se um dos repositórios de atualização relevantes não estiver habilitado, habilite-o com o comando a seguir:

    sudo zypper mr -e [NUMBER OF REPOSITORY]
    
  4. Atualize o kernel para a versão mais recente disponível:

    sudo zypper up kernel-default
    

    Ou atualize o sistema operacional com todos os patches mais recentes:

    sudo zypper update
    
  5. Instale o Agente Linux do Azure:

    sudo zypper install WALinuxAgent
    
  6. 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 padrão inclui os seguintes parâmetros:

     console=ttyS0 earlyprintk=ttyS0
    

    Isto também garante 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, remova os seguintes parâmetros da linha de inicialização do kernel, se existirem:

     libata.atapi_enabled=0 reserve=0x1f0,0x8
    
  7. É recomendável editar o arquivo /etc/sysconfig/network/dhcp e alterar o parâmetro DHCLIENT_SET_HOSTNAME para a seguinte configuração:

     DHCLIENT_SET_HOSTNAME="no"
    
  8. No arquivo /etc/sudoers, exclua o comentário ou remova as seguintes linhas, se estiverem presentes. Esta é uma etapa importante.

    Defaults targetpw   # ask for the password of the target user i.e. root
    ALL    ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!
    
  9. Confira se o servidor SSH está instalado e configurado para iniciar no tempo de inicialização.

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

    O Agente Linux do Azure pode configurar automaticamente o espaço de troca 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 será esvaziado quando a VM é desprovisionada.

    Depois de instalar o Agente Linux do Azure, modifique os parâmetros em /etc/waagent.conf da seguinte maneira:

    ResourceDisk.Format=n
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt/resource
    ResourceDisk.EnableSwap=n
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set the size to whatever you need it to be.
    
  11. Verifique se o Agente Linux do Azure é executado durante a inicialização:

    sudo systemctl enable waagent.service
    
  12. Execute os comandos a seguir para desprovisionar a máquina virtual e prepará-la para provisionamento no Azure.

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

        sudo rm -f ~/.bash_history # Remove current user history
        sudo rm -rf /var/lib/waagent/
        sudo rm -f /var/log/waagent.log
        sudo waagent -force -deprovision+user
        sudo rm -f ~/.bash_history # Remove root user history
        sudo export HISTSIZE=0
    
  13. Selecione Ação>Desligar no Gerenciador do Hyper-V.

Próximas etapas

Agora você está pronto para usar o VHD do SUSE 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.