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

Aplica-se a: Linux VMs Conjuntos de escala flexíveis Aplica-se a: ✔️ ✔️ Conjuntos de escala uniforme ✔️

Em alguns casos, talvez você queira usar máquinas virtuais (VMs) personalizadas do SUSE Linux Enterprise Server ou 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 um 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 ficheiros .vhd. Por exemplo, você pode usar uma solução de virtualização como o Hyper-V. Para obter instruções, consulte 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 imagens do Linux para o Azure, consulte Notas gerais de instalação do Linux.
  • O Azure não suporta ficheiros de Imagem de Disco Rígido do Windows (.vhdx). Somente arquivos VHD (.vhd) são suportados fora das máquinas virtuais. Você pode converter o disco para o formato VHD usando o Gerenciador do Hyper-V ou o Convert-VHD cmdlet.
  • O Azure suporta máquinas virtuais Gen1 (inicialização BIOS) e Gen2 (inicialização UEFI).
  • O módulo do kernel da tabela de alocação de arquivos virtuais (VFAT) deve ser ativado no kernel.
  • Não configure uma partição swap no disco do SO. Você pode configurar o agente Linux para criar um arquivo de permuta no disco de recurso temporário. As etapas mais adiante neste artigo fornecem mais informações sobre como configurar o espaço de permuta.
  • Todos os VHDs no Azure devem ter um tamanho virtual alinhado a 1 MB. Ao converter de um disco bruto para VHD, verifique se o tamanho do disco bruto é um múltiplo de 1 MB antes da conversão. Para obter mais informações, consulte Notas gerais de instalação do Linux.

Nota

Cloud-init versão 21.2 ou posterior remove o requisito de função definida pelo usuário (UDF). Mas sem o módulo ativado, o udf CD-ROM não será montado durante o provisionamento, o que impede que os dados personalizados sejam aplicados. Uma solução alternativa é aplicar 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, consulte Formatos de dados do usuário na documentação cloud-init.

Usar o SUSE Studio

O SUSE Studio pode facilmente criar e gerenciar suas imagens SLES e openSUSE Leap para Azure e 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, a 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 Azure e Hyper-V, se necessário.

    Se o hipervisor de software não for Hyper-V, outros módulos precisarão ser adicionados ao disco RAM inicial (initramfs) para inicializar 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 para reconstruir o dracut arquivo initramfs:

    sudo dracut --verbose --force
    
  2. Configure 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 que ele baixe atualizações e instale pacotes.

  4. Atualize o sistema com os patches mais recentes:

    sudo zypper update
    
  5. Instale o Agente de VM 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 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 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 swap, uma opção é passar uma configuração cloud-init toda vez que criar uma VM.

    Outra opção é usar uma diretiva cloud-init na imagem para configurar o espaço de permuta 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. Anteriormente, o Agente Linux do Azure era usado para configurar automaticamente o espaço de permuta usando o disco de recurso local anexado à máquina virtual depois que a máquina virtual é provisionada no Azure. Como o cloud-init agora lida com essa etapa, você não deve usar o Agente Linux do Azure para formatar o disco de recursos ou criar o arquivo de permuta. Use estes comandos para modificar /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
    

    Nota

    Se estiver a utilizar uma versão cloud-init anterior à 21.2, certifique-se de que o udf módulo está ativado. Removê-lo ou desativá-lo causará uma falha de provisionamento ou inicialização. Cloud-init versão 21.2 ou posterior remove o requisito UDF.

  10. Certifique-se de que o arquivo /etc/fstab faça referência ao disco usando seu UUID (by-uuid).

  11. Remova as regras do 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 podem causar problemas quando você está clonando uma máquina virtual no Microsoft Azure ou 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. Recomendamos que você edite o arquivo /etc/sysconfig/network/dhcp e altere o parâmetro para o DHCLIENT_SET_HOSTNAME seguinte:

    DHCLIENT_SET_HOSTNAME="no"
    
  13. No arquivo /etc/sudoers, comente ou remova as seguintes linhas, se existirem:

    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. Verifique se o servidor Secure Shell (SSH) está instalado e configurado para iniciar no momento da inicialização:

    sudo systemctl enable sshd
    
  15. Limpe o estágio de inicialização da nuvem:

    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ê estiver migrando uma máquina virtual específica e não quiser 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. Em um 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 Ativados Atualizar
    1 Nuvem:Tools_15.2 Nuvem:Tools_15.2 Sim Sim
    2 openSUSE_15.2_OSS openSUSE_15.2_OSS Sim Sim
    3 openSUSE_15.2_Atualizações openSUSE_15.2_Atualizações Sim Sim

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

    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 o comando zypper lr novamente. Se um dos repositórios de atualização relevantes não estiver habilitado, habilite-o usando o seguinte comando:

    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 do GRUB para incluir outros parâmetros do kernel para o Azure. Para fazer isso, abra /boot/grub/menu.lst em um editor de texto e certifique-se de que o kernel padrão inclua os seguintes parâmetros:

     console=ttyS0 earlyprintk=ttyS0
    

    Essa opçã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 disso, remova os seguintes parâmetros da linha de inicialização do kernel, se existirem:

     libata.atapi_enabled=0 reserve=0x1f0,0x8
    
  7. Recomendamos que você edite o arquivo /etc/sysconfig/network/dhcp e altere o DHCLIENT_SET_HOSTNAMEparâmetro para a seguinte configuração:

     DHCLIENT_SET_HOSTNAME="no"
    
  8. No arquivo /etc/sudoers, comente ou remova as seguintes linhas, se existirem. Este é um passo 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. Certifique-se de que o servidor SSH está instalado e configurado para iniciar no momento da inicialização.

  10. Não crie espaço de permuta no disco do SO.

    O Agente Linux do Azure pode configurar automaticamente o espaço de permuta usando o disco de recurso local anexado à VM após o provisionamento no Azure. O disco de recurso local é um disco temporário e será esvaziado quando a VM for 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. Certifique-se de que o Agente Linux do Azure seja executado na 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ê estiver migrando uma máquina virtual específica e não quiser 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óximos passos

Agora você está pronto para usar seu VHD do SUSE Linux para criar novas máquinas virtuais no Azure. Se esta for a primeira vez que você está carregando o arquivo .vhd no Azure, consulte Criar uma VM Linux a partir de um disco personalizado.