Preparare una macchina virtuale Oracle Linux per Azure

Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili

In questo articolo si presuppone che l'utente abbia già installato un sistema operativo Oracle Linux in un disco rigido virtuale. Sono disponibili vari strumenti per la creazione di file VHD. Un esempio è una soluzione di virtualizzazione come Hyper-V. Per istruzioni, vedere Installare il ruolo Hyper-V e configurare una macchina virtuale.

Note generali sull'installazione di Oracle Linux

  • Per altri suggerimenti sulla preparazione di Linux per Azure, vedere Note generali sull'installazione di Linux.
  • Hyper-V e il supporto di Azure Oracle Linux con il kernel UEK (Unbreakable Enterprise kernel) o con il kernel compatibile Red Hat.
  • UEK2 di Oracle non è supportato su Hyper-V e Azure perché non include i driver necessari.
  • Il formato VHDX non è supportato in Azure, solo nei VHD fissi. È possibile convertire il disco in formato VHD tramite la console di gestione di Hyper-V o il cmdlet convert-vhd.
  • Per il montaggio di file system UDF, è necessario il supporto del kernel. Al primo avvio in Azure la configurazione del provisioning viene passata alla macchina virtuale Linux tramite supporti di memorizzazione formattati con UDF, collegati al guest. È necessario che l'agente Linux di Azure possa montare il file system UDF per leggere la relativa configurazione ed eseguire il provisioning della macchina virtuale.
  • Quando si installa il sistema Linux è consigliabile usare partizioni standard anziché LVM (Logical Volume Manager), che è spesso l'impostazione predefinita per numerose installazioni. Queste partizioni standard consentono di evitare conflitti di nome LVM con le macchine virtuali clonate, in particolare se fosse necessario collegare un disco del sistema operativo a un'altra macchina virtuale per la risoluzione dei problemi. È possibile usare LVM o RAID anche su dischi di dati.
  • I kernel Linux con versione precedente a 2.6.37 non supportano NUMA in Hyper-V con macchine virtuali di dimensioni maggiori. Questo problema incide principalmente sulle distribuzioni precedenti che usavano il kernel upstream Red Hat 2.6.32 ed è stato risolto in Oracle Linux 6.6 e versioni successive.
  • Non configurare una partizione swap nel disco del sistema operativo.
  • Le dimensioni di tutti i dischi rigidi virtuali in Azure devono essere allineate a 1 MB. Quando si converte un disco non formattato in un disco rigido virtuale, prima della conversione è necessario assicurarsi che le dimensioni del disco non formattato siano un multiplo di 1 MB. Per altre informazioni, vedere Note sull'installazione di Linux.
  • Verificare che il repository Addons sia abilitato. Modificare il file /etc/yum.repos.d/public-yum-ol6.repo(Oracle Linux 6) o /etc/yum.repos.d/public-yum-ol7.repo(Oracle Linux 7). Modificare la riga enabled=0 in enabled=1 in [ol6_addons] o [ol7_addons] in questo file.

Oracle Linux 6.X

Importante

Tenere presente che Oracle Linux 6.x è già alla fine del ciclo di vita. Oracle Linux versione 6.10 dispone dell'Extended Lifecycle Support, che termina a luglio 2024.

Per l'esecuzione della macchina virtuale in Azure è necessario eseguire specifici passaggi di configurazione nel sistema operativo.

  1. Nel riquadro centrale della console di gestione di Hyper-V selezionare la macchina virtuale.

  2. Selezionare Connetti per aprire la finestra per la macchina virtuale.

  3. Disinstallare NetworkManager:

    sudo rpm -e --nodeps NetworkManager
    

    Nota

    Se il pacchetto non è già installato, questo comando avrà esito negativo e verrà visualizzato un messaggio di errore. Questo messaggio è previsto.

  4. Creare un file denominato network in the /etc/sysconfig/ contenente il testo seguente:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Creare un file denominato ifcfg-eth0 in the /etc/sysconfig/network-scripts/ contenente il testo seguente:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Modificare le regole udev per evitare la generazione di regole statiche per le interfacce Ethernet. Le regole seguenti possono causare problemi quando si clona una macchina virtuale in Azure o 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. Assicurarsi che il servizio di rete venga avviato all'avvio:

    sudo chkconfig network on
    
  8. Installare python-pyasn1:

    sudo yum install python-pyasn1
    
  9. Modificare la riga di avvio del kernel nella configurazione GRUB per includere altri parametri del kernel per Azure. Per eseguire questo passaggio, aprire /boot/grub/menu.lst in un editor di testo e verificare che il kernel includa i parametri seguenti:

    console=ttyS0 earlyprintk=ttyS0
    

    Questa impostazione garantisce che tutti i messaggi della console vengano inviati alla prima porta seriale, agevolando così il supporto di Azure nella risoluzione dei problemi di debug.

    Oltre ai passaggi precedenti, è consigliabile rimuovere i parametri seguenti:

    rhgb quiet crashkernel=auto
    

    L'avvio grafico e l'avvio silenzioso non sono utili in un ambiente cloud se tutti i log devono essere inviati alla porta seriale.

    L'opzione crashkernel può essere lasciata configurata se si desidera. Questo parametro riduce la quantità di memoria disponibile nella macchina virtuale di almeno 128 MB e questo potrebbe causare problemi in macchine virtuali di dimensioni inferiori.

  10. Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio. Questa è in genere l'impostazione predefinita.

  11. Installare l'agente Linux di Azure eseguendo il comando seguente. La versione più recente è la 2.0.15.

    sudo yum install WALinuxAgent
    

    L'installazione del pacchetto WALinuxAgent rimuove i pacchetti NetworkManager e NetworkManager-gnome se non sono già stati rimossi, come descritto nel passaggio 2.

  12. Non creare l'area di swap sul disco del sistema operativo.

    L'agente Linux di Azure può configurare automaticamente lo spazio di swapping usando il disco risorse locale collegato alla macchina virtuale dopo il provisioning in Azure. Il disco risorse locale è un disco temporaneo e potrebbe essere svuotato in seguito al deprovisioning della macchina virtuale. Dopo aver installato l'agente Linux di Azure come illustrato nel passaggio precedente, modificare i parametri seguenti in /etc/waagent.conf in modo appropriato:

    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. Effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in Azure:

    sudo waagent -force -deprovision
    sudo export HISTSIZE=0
    sudo logout
    
  14. Selezionare Azione>Arresta nella console di gestione di Hyper-V. Il file VHD Linux è ora pronto per il caricamento in Azure.


Oracle Linux 7.0 e successive

Seguire i passaggi nelle sezioni successive se si usa Oracle Linux 7.0 o versioni successive.

Modifiche in Oracle Linux 7

La preparazione di una macchina virtuale Oracle Linux 7 per Azure è simile a Oracle Linux 6, ma sono da notare diverse differenze:

  • Il supporto di Azure Oracle Linux con il kernel UEK (Unbreakable Enterprise kernel) o con il kernel compatibile Red Hat. È consigliabile usare Oracle Linux con UEK.
  • Il pacchetto NetworkManager e l'agente Linux di Azure non sono più in conflitto. Questo pacchetto viene installato per impostazione predefinita ed è consigliabile non rimuoverlo.
  • GRUB2 viene ora usato come bootloader predefinito, quindi la procedura per la modifica dei parametri del kernel è cambiata. Vedere la sezione "Passaggi di configurazione".
  • XFS è ora il file system predefinito. Se si vuole, è ancora possibile usare il file system ext4.

Passaggi di configurazione

  1. Nella console di gestione di Hyper-V selezionare la macchina virtuale.

  2. Selezionare Connetti per aprire una finestra della console per la macchina virtuale.

  3. Creare un file denominato network in the /etc/sysconfig/ contenente il testo seguente:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Creare un file denominato ifcfg-eth0 in the /etc/sysconfig/network-scripts/ contenente il testo seguente:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  5. Modificare le regole udev per evitare la generazione di regole statiche per le interfacce Ethernet. Le regole seguenti possono causare problemi quando si clona una macchina virtuale in Azure o Hyper-V:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. Assicurarsi che il servizio di rete venga avviato all'avvio:

    sudo chkconfig network on
    
  7. Installare il pacchetto python-pyasn1:

    sudo yum install python3-pyasn1
    
  8. Cancellare i metadati yum correnti e installare eventuali aggiornamenti:

    sudo yum clean all
    sudo yum -y update
    
  9. Modificare la riga di avvio del kernel nella configurazione GRUB per includere altri parametri del kernel per Azure. Per eseguire il passaggio, aprire /etc/default/grub in un editor di testo e modificare il parametro GRUB_CMDLINE_LINUX. Ad esempio:

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

    Questa modifica, inoltre, garantisce che tutti i messaggi della console vengano inviati alla prima porta seriale, agevolando così il supporto tecnico di Azure nella risoluzione dei problemi di debug. Disattiva inoltre le convenzioni di denominazione per le schede di interfaccia di rete in Oracle Linux 7 con il kernel UEK. È consigliabile anche rimuovere i parametri seguenti:

       rhgb quiet crashkernel=auto
    

    L'avvio grafico e l'avvio silenzioso non sono utili in un ambiente cloud se tutti i log devono essere inviati alla porta seriale.

    L'opzione crashkernel può essere lasciata configurata se si desidera. Questo parametro riduce la quantità di memoria disponibile nella macchina virtuale di almeno 128 MB e questo potrebbe causare problemi in macchine virtuali di dimensioni inferiori.

  10. Dopo aver terminato di modificare /etc/default/grub, ricompilare la configurazione GRUB:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  11. Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio. Questa è in genere l'impostazione predefinita.

  12. Installare l'agente Linux di Azure e le dipendenze:

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent
    
  13. Installare cloud-init per gestire il provisioning:

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
  14. Configurare waagent per 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. Configurazione dello swapping:

    1. Non creare lo spazio di swapping sul disco del sistema operativo.

      In precedenza, l'agente Linux di Azure era usato per configurare automaticamente lo spazio di swapping usando il disco risorse locale collegato alla macchina virtuale dopo il provisioning della macchina virtuale in Azure. Tuttavia, ora è cloud-init a gestire questo passaggio. Non bisogna usare l'agente Linux per formattare il disco delle risorse per creare il file di scambio. Modificare appropriatamente i parametri seguenti in /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
      
    2. Se si vuole montare, formattare e creare il file di scambio, è possibile:

      • Passare questo codice come configurazione cloud-init ogni volta che si crea una macchina virtuale.
      • Usare una direttiva cloud-init integrata nell'immagine per eseguire questo passaggio ogni volta che viene creata la macchina virtuale:
      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. Effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in 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
    

    Nota

    Se si esegue la migrazione di una macchina virtuale specifica e non si vuole creare un'immagine generalizzata, ignorare il passaggio di deprovisioning.

  17. Selezionare Azione>Arresta nella Console di gestione di Hyper-V. Il file VHD Linux è ora pronto per il caricamento in Azure.

È ora possibile usare il file del disco rigido virtuale di Oracle Linux per creare nuove macchine virtuali in Azure. Se è la prima volta che si carica il file VHD in Azure, vedere Creare una macchina virtuale Linux da un disco personalizzato.