Preparare una macchina virtuale basata su RedHat per Azure

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

Questo articolo illustra come preparare una macchina virtuale Red Hat Enterprise Linux (RHEL) da usare in Azure. Le versioni di RHEL descritte in questo articolo sono 6.X, 7.X e 8.X. Gli hypervisor per la preparazione illustrati in questo articolo sono Hyper-V, KVM (Kernel-based Virtual Machine) e VMware. Per altre informazioni sui requisiti di idoneità per partecipare al programma di accesso al cloud di Red Hat, vedere gli articoli relativi al sito web di accesso al cloud di Red Hat e all'esecuzione di RHEL in Azure. Per informazioni su come automatizzare la creazione di immagini RHEL, vedere Image Builder di Azure.

Nota

Tenere presente le versioni che sono End Of Life (EOL) e non sono più supportate da Redhat. Le immagini caricate che si trovano a o oltre EOL saranno supportate su base aziendale ragionevole. Collegamento al ciclo di vita del prodotto redhat

Console di gestione di Hyper-V

Questa sezione illustra come preparare una macchina virtuale RHEL 6, RHEL 7 o RHEL 8 usando la console di gestione di Hyper-V.

Prerequisiti

Questa sezione presuppone che sia già stato ottenuto un file ISO dal sito Web Red Hat e che l'immagine RHEL sia stata installata in un disco rigido virtuale (VHD). Per altri dettagli su come usare la console di gestione di Hyper-V per installare un'immagine del sistema operativo, vedere l'articolo su come installare il ruolo Hyper-V e configurare una macchina virtuale.

Note sull'installazione di RHEL

  • Azure non supporta il formato VHDX. Azure supporta solo dischi rigidi virtuali a dimensione fissa. È possibile usare la console di gestione di Hyper-V o il cmdlet convert-vhd per convertire il disco in formato VHD. Se si usa VirtualBox, durante la creazione del disco selezionare Fixed size (A dimensione fissa) anziché l'opzione predefinita di allocazione dinamica.

  • macchine virtuali supporto tecnico di Azure Gen1 (avvio BIOS) e Gen2 (avvio UEFI).

  • La dimensione massima consentita per il disco rigido virtuale è 1.023 GB.

  • Il modulo kernel vfat deve essere abilitato nel kernel.

  • LVM (Logical Volume Manager) è supportato e può essere usato nel disco del sistema operativo o nei dischi dati in macchine virtuali di Azure. Tuttavia, in generale, è consigliabile usare partizioni standard nel disco del sistema operativo anziché LVM. Questa procedura consentirà di evitare conflitti di nome LVM con le macchine virtuali clonate, in particolare se fosse eventualmente necessario collegare un disco del sistema operativo a un'altra macchina virtuale identica per la risoluzione dei problemi. Vedere la documentazione di LVM e RAID .

  • È necessario il supporto del kernel per il montaggio di file system UDF (Universal Disk Format). Al primo avvio in Azure, i supporti con formattazione UDF collegati al guest passano la configurazione di provisioning alla macchina virtuale Linux. L'agente Linux di Azure deve essere in grado di montare il file system UDF per leggerne la configurazione ed effettuare il provisioning della macchina virtuale, senza questo, il provisioning avrà esito negativo.

  • Non configurare una partizione di scambio sul disco del sistema operativo. Altre informazioni su questo argomento sono disponibili nei passaggi riportati di seguito.

  • Le dimensioni virtuali di tutti i dischi rigidi virtuali su 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. Altri dettagli sono disponibili nelle procedure seguenti. Per altre informazioni, vedere anche Note sull'installazione di Linux.

Nota

Cloud-init >= 21.2 rimuove il requisito della funzione definita dall'utente. Tuttavia, senza il modulo UDF abilitato, il cdrom non verrà montato durante il provisioning, impedendo l'applicazione di dati personalizzati. Una soluzione alternativa consiste nell'applicare dati personalizzati usando i dati utente. Tuttavia, a differenza dei dati personalizzati, i dati utente non vengono crittografati. https://cloudinit.readthedocs.io/en/latest/topics/format.html

RHEL 6 con la console di gestione di Hyper-V

Importante

A partire dal 30 novembre 2020, Red Hat Enterprise Linux 6 raggiungerà la fase di manutenzione. La fase di manutenzione è seguita dalla fase di durata estesa. Quando Red Hat Enterprise Linux 6 esce dalle fasi di manutenzione completa, è consigliabile eseguire l'aggiornamento a Red Hat Enterprise Linux 7, 8 o 9. Se i clienti devono rimanere in Red Hat Enterprise Linux 6, è consigliabile aggiungere il componente aggiuntivo Red Hat Enterprise Linux Extended Life Cycle Support (ELS).

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

  2. Fare clic su Connetti per aprire una finestra della console per la macchina virtuale.

  3. In RHEL 6, NetworkManager può interferire con l'agente Linux di Azure. Disinstallare il pacchetto eseguendo questo comando:

    sudo rpm -e --nodeps NetworkManager
    
  4. Creare o modificare il file /etc/sysconfig/network e aggiungere il testo seguente:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Creare o modificare il file /etc/sysconfig/network-scripts/ifcfg-eth0 e aggiungere il testo seguente:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Spostare o eliminare le regole udev per evitare la generazione di regole statiche per l'interfaccia Ethernet. Le regole seguenti provocano problemi quando si clona una macchina virtuale in Microsoft 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
    

Nota

** Quando si usa la rete accelerata (AN) l'interfaccia sintetica creata deve essere configurata per essere non gestita usando una regola udev. Ciò impedirà a NetworkManager di assegnare lo stesso ip all'interfaccia primaria.

Per applicarlo:

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. Assicurarsi che il servizio di rete venga eseguito all'avvio attivando il comando seguente:

    sudo chkconfig network on
    
  2. Registrare la propria sottoscrizione Red Hat per abilitare l'installazione dei pacchetti dall'archivio RHEL eseguendo questo comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. È stato effettuato il push del pacchetto WALinuxAgent WALinuxAgent-<version> nel repository di funzionalità aggiuntive di Red Hat. Abilitare il repository di funzionalità aggiuntive eseguendo questo comando:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  4. Modificare la riga di avvio del kernel nella configurazione GRUB per includere ulteriori parametri del kernel per Azure. Per eseguire questa modifica, aprire /boot/grub/menu.lst in un editor di testo e verificare che il kernel predefinito includa i parametri seguenti:

    console=ttyS0 earlyprintk=ttyS0
    

    In questo modo si garantisce inoltre che tutti i messaggi della console vengano inviati alla prima porta seriale, agevolando così il supporto di Azure nella risoluzione dei problemi di debug.

    È consigliabile anche rimuovere i parametri seguenti:

    rhgb quiet crashkernel=auto
    

    Gli avvio grafici e non silenziosi non sono utili in un ambiente cloud in cui tutti i log devono essere inviati alla porta seriale. È possibile mantenere l'opzione crashkernel configurata, se necessario. Si noti che questo parametro riduce la quantità di memoria disponibile nella macchina virtuale di almeno 128 MB. Questa configurazione potrebbe causare problemi in macchine virtuali di dimensioni inferiori.

  5. Verificare che il server SSH (Secure Shell) sia installato e configurato per l'esecuzione all'avvio, che è in genere l'impostazione predefinita. Modificare /etc/ssh/sshd_config per includere la riga seguente:

    ClientAliveInterval 180
    
  6. Installare l'agente Linux di Azure eseguendo il comando seguente:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    

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

  7. Non creare spazio di scambio 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 della macchina virtuale in Azure. Si noti che il disco di risorse locale è un disco temporaneo e che potrebbe essere svuotato se la macchina virtuale viene deprovisionata. Dopo aver installato l'agente Linux di Azure nel passaggio precedente, modificare nel modo appropriato i parametri seguenti in /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. Annullare la sottoscrizione (se necessario) eseguendo il comando seguente:

    sudo subscription-manager unregister
    
  9. Eseguire i comandi seguenti per effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in Azure:

Nota

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

    sudo waagent -force -deprovision
    sudo export HISTSIZE=0
  1. Fare clic su Azione>Arresta nella console di gestione di Hyper-V. Il disco rigido virtuale Linux è ora pronto per essere caricato in Azure.

RHEL 7 con la console di gestione di Hyper-V

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

  2. Fare clic su Connetti per aprire una finestra della console per la macchina virtuale.

  3. Creare o modificare il file /etc/sysconfig/network e aggiungere il testo seguente:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. Creare o modificare il file /etc/sysconfig/network-scripts/ifcfg-eth0 e aggiungere il testo seguente:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  5. Assicurarsi che il servizio di rete venga eseguito all'avvio attivando il comando seguente:

    sudo systemctl enable network
    
  6. Registrare la propria sottoscrizione Red Hat per abilitare l'installazione dei pacchetti dall'archivio RHEL eseguendo questo comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. Modificare la riga di avvio del kernel nella configurazione GRUB per includere ulteriori parametri del kernel per Azure. Per eseguire questa modifica, aprire /etc/default/grub in un editor di testo e modificare il GRUB_CMDLINE_LINUX parametro . Ad esempio:

    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"
    

    Ciò garantisce inoltre che tutti i messaggi della console vengano inviati alla prima porta seriale e abilitino l'interazione con la console seriale, che può aiutare supporto tecnico di Azure con i problemi di debug. Questa configurazione disattiva anche le nuove convenzioni di denominazione di RHEL 7 per le schede di interfaccia di rete.

    rhgb quiet crashkernel=auto
    

    Gli avvio grafici e non silenziosi non sono utili in un ambiente cloud in cui tutti i log devono essere inviati alla porta seriale. È possibile mantenere l'opzione crashkernel configurata, se necessario. Si noti che 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.

  8. Dopo aver completato la modifica /etc/default/grub, eseguire il comando seguente per ricompilare la configurazione grub:

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

    Nota

    Se si carica una macchina virtuale abilitata per UEFI, il comando per aggiornare grub è grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg.

  9. Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio, che è in genere l'impostazione predefinita. Modificare /etc/ssh/sshd_config per poter includere la riga seguente:

    ClientAliveInterval 180
    
  10. È stato effettuato il push del pacchetto WALinuxAgent WALinuxAgent-<version> nel repository di funzionalità aggiuntive di Red Hat. Abilitare il repository di funzionalità aggiuntive eseguendo questo comando:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. Installare l'agente Linux di Azure, cloud-init e altre utilità necessarie eseguendo il comando seguente:

    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. Configurare cloud-init per gestire il provisioning:

    1. Configurare waagent per 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
    

    Nota

    Se si esegue la migrazione di una macchina virtuale specifica e non si vuole creare un'immagine generalizzata, impostare Provisioning.Agent=disabled sulla /etc/waagent.conf configurazione.

    1. Configurare i montaggi:
    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. Configurare l'origine dati di 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 configurata, rimuovere lo swapfile esistente:
    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. Configurare la registrazione 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. Scambiare la configurazione. Non creare spazio di scambio sul disco del sistema operativo.

    In precedenza, l'agente Linux di Azure veniva usato per configurare automaticamente lo spazio di scambio usando il disco delle risorse locale collegato alla macchina virtuale dopo il provisioning della macchina virtuale in Azure. Tuttavia, questa operazione è ora gestita da cloud-init, non è necessario usare l'agente Linux per formattare il disco delle risorse per creare il file di scambio, modificare i parametri seguenti in /etc/waagent.conf modo appropriato:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    

    Se si desidera montare, formattare e creare lo scambio, è possibile:

    • Passalo come configurazione cloud-init ogni volta che crei una macchina virtuale tramite customdata. Questo è il metodo consigliato.

    • Usare una direttiva cloud-init inserita nell'immagine che eseguirà questa operazione ogni volta che viene creata la macchina virtuale.

      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 si vuole annullare la registrazione della sottoscrizione, eseguire il comando seguente:

    sudo subscription-manager unregister
    
  15. Effettuare il deprovisioning

    Eseguire i comandi seguenti per effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in Azure:

    Attenzione

    Se si esegue la migrazione di una macchina virtuale specifica e non si vuole creare un'immagine generalizzata, ignorare il passaggio di deprovisioning. L'esecuzione del comando waagent -force -deprovision+user consente di rendere inutilizzabile il computer di origine. Questo passaggio è destinato solo a creare un'immagine generalizzata.

    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. Fare clic su Azione>Arresta nella console di gestione di Hyper-V. Il disco rigido virtuale Linux è ora pronto per essere caricato in Azure.

RHEL 8 con la console di gestione di Hyper-V

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

  2. Fare clic su Connetti per aprire una finestra della console per la macchina virtuale.

  3. Assicurarsi che il servizio Network Manager venga avviato all'avvio eseguendo il comando seguente:

    sudo systemctl enable NetworkManager.service
    
  4. Configurare l'interfaccia di rete per l'avvio automatico e usare DHCP:

    sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
    
  5. Registrare la propria sottoscrizione Red Hat per abilitare l'installazione dei pacchetti dall'archivio RHEL eseguendo questo comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  6. Modificare la riga di avvio del kernel nella configurazione grub per includere parametri del kernel aggiuntivi per Azure e abilitare la console seriale.

    1. Rimuovere i parametri GRUB correnti:
    sudo grub2-editenv - unset kernelopts
    
    1. Modificare /etc/default/grub in un editor di testo e aggiungere i parametri seguenti:
    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"
    

    Ciò garantisce inoltre che tutti i messaggi della console vengano inviati alla prima porta seriale e abilitino l'interazione con la console seriale, che può aiutare supporto tecnico di Azure con i problemi di debug. Questa configurazione disattiva anche le nuove convenzioni di denominazione per le schede di interfaccia di rete.

    1. È inoltre consigliabile rimuovere i parametri seguenti:
    rhgb quiet crashkernel=auto
    

    Gli avvio grafici e non silenziosi non sono utili in un ambiente cloud in cui tutti i log devono essere inviati alla porta seriale. È possibile mantenere l'opzione crashkernel configurata, se necessario. Si noti che 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.

  7. Dopo aver terminato di modificare /etc/default/grub, eseguire questo comando per ricompilare la configurazione GRUB:

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

    Per una macchina virtuale abilitata per UEFI, eseguire il comando seguente:

    sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    
  8. Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio, che è in genere l'impostazione predefinita. Modificare /etc/ssh/sshd_config per poter includere la riga seguente:

    ClientAliveInterval 180
    
  9. Installare l'agente Linux di Azure, cloud-init e altre utilità necessarie eseguendo il comando seguente:

    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. Configurare cloud-init per gestire il provisioning:

    1. Configurare waagent per 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
    

    Nota

    Se si esegue la migrazione di una macchina virtuale specifica e non si vuole creare un'immagine generalizzata, impostare Provisioning.Agent=disabled nella /etc/waagent.conf configurazione.

    1. Configurare i montaggi:
    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. Configurare l'origine dati di 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 configurata, rimuovere lo swapfile esistente:
    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. Configurare la registrazione 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. Scambia configurazione Non creare spazio di scambio sul disco del sistema operativo.

    In precedenza, l'agente Linux di Azure veniva usato per configurare automaticamente lo spazio di scambio usando il disco delle risorse locale collegato alla macchina virtuale dopo il provisioning della macchina virtuale in Azure. Tuttavia, questa operazione è ora gestita da cloud-init, non è necessario usare l'agente Linux per formattare il disco delle risorse per creare il file di scambio, modificare i parametri seguenti in /etc/waagent.conf modo appropriato:

    ResourceDisk.Format=n
    ResourceDisk.EnableSwap=n
    
    • Passalo come configurazione cloud-init ogni volta che crei una macchina virtuale tramite customdata. Questo è il metodo consigliato.

    • Usare una direttiva cloud-init inserita nell'immagine che eseguirà questa operazione ogni volta che viene creata la macchina virtuale.

      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 si vuole annullare la registrazione della sottoscrizione, eseguire il comando seguente:

    sudo subscription-manager unregister
    
  13. Effettuare il deprovisioning

    Eseguire i comandi seguenti per effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in 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
    

    Attenzione

    Se si esegue la migrazione di una macchina virtuale specifica e non si vuole creare un'immagine generalizzata, ignorare il passaggio di deprovisioning. L'esecuzione del comando waagent -force -deprovision+user consente di rendere inutilizzabile il computer di origine. Questo passaggio è destinato solo a creare un'immagine generalizzata.

  14. Fare clic su Azione>Arresta nella console di gestione di Hyper-V. Il disco rigido virtuale Linux è ora pronto per essere caricato in Azure.

KVM

Questa sezione illustra come usare KVM per preparare una distribuzione RHEL 6 o RHEL 7 da caricare in Azure.

RHEL 6 con KVM

Importante

A partire dal 30 novembre 2020, Red Hat Enterprise Linux 6 raggiungerà la fase di manutenzione. La fase di manutenzione è seguita dalla fase di durata estesa. Quando Red Hat Enterprise Linux 6 esce dalle fasi di manutenzione completa, è consigliabile eseguire l'aggiornamento a Red Hat Enterprise Linux 7, 8 o 9. Se i clienti devono rimanere in Red Hat Enterprise Linux 6, è consigliabile aggiungere il componente aggiuntivo Red Hat Enterprise Linux Extended Life Cycle Support (ELS).

  1. Scaricare l'immagine KVM di RHEL 6 dal sito Web Red Hat.

  2. Impostare una password radice.

    Generare una password crittografata e copiare l'output del comando:

    sudo openssl passwd -1 changeme
    

    Impostare una password radice con guestfish:

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

    Modificare il secondo campo dell'utente radice da "!!" alla password crittografata.

  3. Creare una macchina virtuale in KVM dall'immagine qcow2. Impostare il tipo di disco su qcow2 e il modello del dispositivo di interfaccia di rete virtuale su virtio. Avviare quindi la macchina virtuale e accedere come utente ROOT.

  4. Creare o modificare il file /etc/sysconfig/network e aggiungere il testo seguente:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Creare o modificare il file /etc/sysconfig/network-scripts/ifcfg-eth0 e aggiungere il testo seguente:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. Spostare o eliminare le regole udev per evitare la generazione di regole statiche per l'interfaccia Ethernet. Le regole seguenti causano 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
    

Nota

** Quando si usa la rete accelerata (AN) l'interfaccia sintetica creata deve essere configurata per essere non gestita usando una regola udev. Ciò impedirà a NetworkManager di assegnare lo stesso ip all'interfaccia primaria.

Per applicarlo:

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. Assicurarsi che il servizio di rete venga eseguito all'avvio attivando il comando seguente:

    sudo chkconfig network on
    
  2. Registrare la propria sottoscrizione Red Hat per abilitare l'installazione dei pacchetti dall'archivio RHEL eseguendo questo comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. Modificare la riga di avvio del kernel nella configurazione GRUB per includere ulteriori parametri del kernel per Azure. Per eseguire questa configurazione, aprire /boot/grub/menu.lst in un editor di testo e verificare che il kernel predefinito includa i parametri seguenti:

    console=ttyS0 earlyprintk=ttyS0
    

    In questo modo si garantisce inoltre che tutti i messaggi della console vengano inviati alla prima porta seriale, agevolando così il supporto di Azure nella risoluzione dei problemi di debug.

    È consigliabile anche rimuovere i parametri seguenti:

    rhgb quiet crashkernel=auto
    

    Gli avvio grafici e non silenziosi non sono utili in un ambiente cloud in cui tutti i log devono essere inviati alla porta seriale. È possibile mantenere l'opzione crashkernel configurata, se necessario. Si noti che 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.

  4. Aggiungere i moduli Hyper-V a initramfs:

    Modificare /etc/dracut.conf e aggiungere il contenuto seguente:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Ricompilare initramfs:

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

    sudo yum remove cloud-init
    
  6. Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio:

    sudo chkconfig sshd on
    

    Modificare /etc/ssh/sshd_config per includere le righe seguenti:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  7. È stato effettuato il push del pacchetto WALinuxAgent WALinuxAgent-<version> nel repository di funzionalità aggiuntive di Red Hat. Abilitare il repository di funzionalità aggiuntive eseguendo questo comando:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  8. Installare l'agente Linux di Azure eseguendo il comando seguente:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  9. L'agente Linux di Azure può configurare automaticamente lo spazio di swapping usando il disco risorse locale collegato alla macchina virtuale dopo il provisioning della macchina virtuale in Azure. Si noti che il disco di risorse locale è un disco temporaneo e potrebbe essere svuotato se la macchina virtuale viene deprovisionata. Dopo aver installato l'agente Linux di Azure nel passaggio precedente, modificare nel modo appropriato i parametri seguenti in /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. Annullare la sottoscrizione (se necessario) eseguendo il comando seguente:

    sudo subscription-manager unregister
    
  11. Eseguire i comandi seguenti per effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in Azure:

    Nota

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

    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. Arrestare la macchina virtuale in KVM.

  13. Convertire l'immagine qcow2 nel formato VHD.

    Nota

    C'è un bug noto nelle versioni >qemu-img =2.2.1 che genera un disco rigido virtuale formattato in modo non corretto. Il problema è stato risolto in QEMU 2.6. Si consiglia di usare qemu-img 2.2.0 o versione precedente oppure di eseguire l'aggiornamento alla versione 2.6 o successiva. Riferimento: https://bugs.launchpad.net/qemu/+bug/1490611.

    Convertire innanzitutto l'immagine in formato non elaborato:

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

    Verificare che le dimensioni dell'immagine non elaborata siano pari a 1 MB. In caso contrario, arrotondare le dimensioni a 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
    

    Convertire il disco non formattato in un disco rigido virtuale a dimensione fissa:

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

    Oppure, con qemu versione 2.6+ includere l'opzione 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 con KVM

  1. Scaricare l'immagine KVM di RHEL 7 dal sito Web di Red Hat. Questa procedura usa RHEL 7 come esempio.

  2. Impostare una password radice.

    Generare una password crittografata e copiare l'output del comando:

    sudo openssl passwd -1 changeme
    

    Impostare una password radice con guestfish:

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

    Modificare il secondo campo dell'utente radice da "!!" alla password crittografata.

  3. Creare una macchina virtuale in KVM dall'immagine qcow2. Impostare il tipo di disco su qcow2 e il modello del dispositivo di interfaccia di rete virtuale su virtio. Avviare quindi la macchina virtuale e accedere come utente ROOT.

  4. Creare o modificare il file /etc/sysconfig/network e aggiungere il testo seguente:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. Creare o modificare il file /etc/sysconfig/network-scripts/ifcfg-eth0 e aggiungere il testo seguente:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  6. Assicurarsi che il servizio di rete venga eseguito all'avvio attivando il comando seguente:

    sudo systemctl enable network
    
  7. Registrare la propria sottoscrizione Red Hat per abilitare l’installazione dei pacchetti dall’archivio RHEL eseguendo il seguente comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  8. Modificare la riga di avvio del kernel nella configurazione GRUB per includere ulteriori parametri del kernel per Azure. A tale scopo, aprire /etc/default/grub in un editor di testo e modificare il GRUB_CMDLINE_LINUX parametro . Ad esempio:

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

    Questo comando, inoltre, 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. Il comando disattiva anche le nuove convenzioni di denominazione di RHEL 7 per le schede di interfaccia di rete. È consigliabile anche rimuovere i parametri seguenti:

    rhgb quiet crashkernel=auto
    

    Gli avvio grafici e non silenziosi non sono utili in un ambiente cloud in cui tutti i log devono essere inviati alla porta seriale. È possibile mantenere l'opzione crashkernel configurata, se necessario. Si noti che 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.

  9. Dopo aver terminato di modificare /etc/default/grub, eseguire questo comando per ricompilare la configurazione GRUB:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  10. Aggiungere i moduli Hyper-V in initramfs.

    Modificare /etc/dracut.conf e aggiungere il contenuto:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Ricompilare initramfs:

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

    sudo yum remove cloud-init
    
  12. Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio:

    sudo systemctl enable sshd
    

    Modificare /etc/ssh/sshd_config per includere le righe seguenti:

    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. È stato effettuato il push del pacchetto WALinuxAgent WALinuxAgent-<version> nel repository di funzionalità aggiuntive di Red Hat. Abilitare il repository di funzionalità aggiuntive eseguendo questo comando:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  14. Installare l'agente Linux di Azure eseguendo il comando seguente:

    sudo yum install WALinuxAgent
    

    Abilitare il servizio waagent:

    sudo systemctl enable waagent.service
    
  15. Installare cloud-init Seguire la procedura descritta in "Preparare una macchina virtuale RHEL 7 dalla console di gestione di Hyper-V", passaggio 12, "Installare cloud-init per gestire il provisioning".

  16. Configurazione di scambio

    Non creare spazio di scambio sul disco del sistema operativo. Seguire la procedura descritta in "Preparare una macchina virtuale RHEL 7 dalla console di gestione di Hyper-V", passaggio 13, "Scambia configurazione"

  17. Annullare la sottoscrizione (se necessario) eseguendo il comando seguente:

    sudo subscription-manager unregister
    
  18. Effettuare il deprovisioning

    Seguire i passaggi descritti in "Preparare una macchina virtuale RHEL 7 dalla console di gestione di Hyper-V", passaggio 15, "Deprovision"

  19. Arrestare la macchina virtuale in KVM.

  20. Convertire l'immagine qcow2 nel formato VHD.

    Nota

    C'è un bug noto nelle versioni >qemu-img =2.2.1 che genera un disco rigido virtuale formattato in modo non corretto. Il problema è stato risolto in QEMU 2.6. Si consiglia di usare qemu-img 2.2.0 o versione precedente oppure di eseguire l'aggiornamento alla versione 2.6 o successiva. Riferimento: https://bugs.launchpad.net/qemu/+bug/1490611.

    Convertire innanzitutto l'immagine in formato non elaborato:

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

    Verificare che le dimensioni dell'immagine non elaborata siano pari a 1 MB. In caso contrario, arrotondare le dimensioni a 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
    

    Convertire il disco non formattato in un disco rigido virtuale a dimensione fissa:

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

    Oppure, con qemu versione 2.6+ includere l'opzione force_size:

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

VMware

Questa sezione illustra come preparare una distribuzione di RHEL 6 o RHEL 7 da VMware.

Prerequisiti

In questa sezione si presuppone che una macchina virtuale RHEL sia già stata installata in VMware. Per informazioni dettagliate su come installare un sistema operativo in VMware, vedere la guida all'installazione del sistema operativo guest VMware.

  • Quando si installa il sistema operativo Linux è consigliabile usare partizioni standard anziché LVM, che è spesso l'impostazione predefinita per numerose installazioni. Questo consentirà di evitare conflitti di nome LVM con la macchina virtuale clonata, in particolare se fosse eventualmente necessario collegare un disco del sistema operativo a un'altra macchina virtuale per la risoluzione dei problemi. Se si preferisce, su dischi di dati si può usare LVM o RAID.
  • Non configurare una partizione di scambio sul disco del sistema operativo. È possibile configurare l'agente Linux per poter creare un file di scambio sul disco temporaneo delle risorse. Altre informazioni su questo argomento sono disponibili nei passaggi riportati di seguito.
  • Quando si crea il disco rigido virtuale, selezionare Store virtual disk as a single file(Archivia disco virtuale come singolo file).

RHEL 6 con VMware

Importante

A partire dal 30 novembre 2020, Red Hat Enterprise Linux 6 raggiungerà la fase di manutenzione. La fase di manutenzione è seguita dalla fase di durata estesa. Poiché Red Hat Enterprise Linux 6 esce dalle fasi di manutenzione completa, è consigliabile eseguire l'aggiornamento a Red Hat Enterprise Linux 7 o 8 o 9. Se i clienti devono rimanere in Red Hat Enterprise Linux 6, è consigliabile aggiungere il componente aggiuntivo Red Hat Enterprise Linux Extended Life Cycle Support (ELS).

  1. In RHEL 6, NetworkManager può interferire con l'agente Linux di Azure. Disinstallare il pacchetto eseguendo questo comando:

    sudo rpm -e --nodeps NetworkManager
    
  2. Creare nella directory /etc/sysconfig/ un file denominato network contenente il testo seguente:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  3. Creare o modificare il file /etc/sysconfig/network-scripts/ifcfg-eth0 e aggiungere il testo seguente:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  4. Spostare o eliminare le regole udev per evitare la generazione di regole statiche per l'interfaccia Ethernet. Le regole seguenti causano 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
    

Nota

** Quando si usa la rete accelerata (AN) l'interfaccia sintetica creata deve essere configurata per essere non gestita usando una regola udev. Ciò impedirà a NetworkManager di assegnare lo stesso ip all'interfaccia primaria.

Per applicarlo:

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. Assicurarsi che il servizio di rete venga eseguito all'avvio attivando il comando seguente:

    sudo chkconfig network on
    
  2. Registrare la propria sottoscrizione Red Hat per abilitare l'installazione dei pacchetti dall'archivio RHEL eseguendo questo comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  3. È stato effettuato il push del pacchetto WALinuxAgent WALinuxAgent-<version> nel repository di funzionalità aggiuntive di Red Hat. Abilitare il repository di funzionalità aggiuntive eseguendo questo comando:

    sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  4. Modificare la riga di avvio del kernel nella configurazione GRUB per includere ulteriori parametri del kernel per Azure. A tale scopo, aprire /etc/default/grub in un editor di testo e modificare il GRUB_CMDLINE_LINUX parametro . Ad esempio:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
    

    In questo modo si garantisce inoltre che tutti i messaggi della console vengano inviati alla prima porta seriale, agevolando così il supporto di Azure nella risoluzione dei problemi di debug. È consigliabile anche rimuovere i parametri seguenti:

    rhgb quiet crashkernel=auto
    

    Gli avvio grafici e non silenziosi non sono utili in un ambiente cloud in cui tutti i log devono essere inviati alla porta seriale. È possibile mantenere l'opzione crashkernel configurata, se necessario. Si noti che 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.

  5. Aggiungere i moduli Hyper-V a initramfs:

    Modificare /etc/dracut.conf e aggiungere il contenuto seguente:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Ricompilare initramfs:

    sudo dracut -f -v
    
  6. Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio, che è in genere l'impostazione predefinita. Modificare /etc/ssh/sshd_config per poter includere la riga seguente:

    ClientAliveInterval 180
    
  7. Installare l'agente Linux di Azure eseguendo il comando seguente:

    sudo yum install WALinuxAgent
    sudo chkconfig waagent on
    
  8. Non creare spazio di scambio 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 della macchina virtuale in Azure. Si noti che il disco di risorse locale è un disco temporaneo e potrebbe essere svuotato se la macchina virtuale viene deprovisionata. Dopo aver installato l'agente Linux di Azure nel passaggio precedente, modificare nel modo appropriato i parametri seguenti in /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. Annullare la sottoscrizione (se necessario) eseguendo il comando seguente:

    sudo subscription-manager unregister
    
  10. Eseguire i comandi seguenti per effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in Azure:

    Nota

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

    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. Arrestare la macchina virtuale e convertire il file VMDK in un file con estensione vhd.

    Nota

    C'è un bug noto nelle versioni >qemu-img =2.2.1 che genera un disco rigido virtuale formattato in modo non corretto. Il problema è stato risolto in QEMU 2.6. Si consiglia di usare qemu-img 2.2.0 o versione precedente oppure di eseguire l'aggiornamento alla versione 2.6 o successiva. Riferimento: https://bugs.launchpad.net/qemu/+bug/1490611.

    Convertire innanzitutto l'immagine in formato non elaborato:

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

    Verificare che le dimensioni dell'immagine non elaborata siano pari a 1 MB. In caso contrario, arrotondare le dimensioni a 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
    

    Convertire il disco non formattato in un disco rigido virtuale a dimensione fissa:

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

    Oppure, con qemu versione 2.6+ includere l'opzione 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 con VMware

  1. Creare o modificare il file /etc/sysconfig/network e aggiungere il testo seguente:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  2. Creare o modificare il file /etc/sysconfig/network-scripts/ifcfg-eth0 e aggiungere il testo seguente:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    PERSISTENT_DHCLIENT=yes
    NM_CONTROLLED=yes
    
  3. Assicurarsi che il servizio di rete venga eseguito all'avvio attivando il comando seguente:

    sudo systemctl enable network
    
  4. Registrare la propria sottoscrizione Red Hat per abilitare l'installazione dei pacchetti dall'archivio RHEL eseguendo questo comando:

    sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  5. Modificare la riga di avvio del kernel nella configurazione GRUB per includere ulteriori parametri del kernel per Azure. Per eseguire questa modifica, aprire /etc/default/grub in un editor di testo e modificare il GRUB_CMDLINE_LINUX parametro . Ad esempio:

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

    Questa configurazione, inoltre, 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. Disattiva anche le nuove convenzioni di denominazione RHEL 7 per le schede di interfaccia di rete. È consigliabile anche rimuovere i parametri seguenti:

    rhgb quiet crashkernel=auto
    

    Gli avvio grafici e non silenziosi non sono utili in un ambiente cloud in cui tutti i log devono essere inviati alla porta seriale. È possibile mantenere l'opzione crashkernel configurata, se necessario. Si noti che 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.

  6. Dopo aver terminato di modificare /etc/default/grub, eseguire questo comando per ricompilare la configurazione GRUB:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  7. Aggiungere i moduli Hyper-V a initramfs.

    Modificare /etc/dracut.confe aggiungere il contenuto:

    add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
    

    Ricompilare initramfs:

    sudo dracut -f -v
    
  8. Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio. Questa è in genere l'impostazione predefinita. Modificare /etc/ssh/sshd_config per poter includere la riga seguente:

    ClientAliveInterval 180
    
  9. È stato effettuato il push del pacchetto WALinuxAgent WALinuxAgent-<version> nel repository di funzionalità aggiuntive di Red Hat. Abilitare il repository di funzionalità aggiuntive eseguendo questo comando:

    sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  10. Installare l'agente Linux di Azure eseguendo il comando seguente:

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

    Seguire i passaggi descritti in "Preparare una macchina virtuale RHEL 7 dalla console di gestione di Hyper-V", passaggio 12, "Installare cloud-init per gestire il provisioning".

  12. Configurazione di scambio

    Non creare spazio di scambio sul disco del sistema operativo. Seguire la procedura descritta in "Preparare una macchina virtuale RHEL 7 dalla console di gestione di Hyper-V", passaggio 13, "Scambia configurazione"

  13. Se si vuole annullare la registrazione della sottoscrizione, eseguire il comando seguente:

    sudo subscription-manager unregister
    
  14. Effettuare il deprovisioning

    Seguire i passaggi descritti in "Preparare una macchina virtuale RHEL 7 dalla console di gestione di Hyper-V", passaggio 15, "Deprovision"

  15. Arrestare la macchina virtuale e convertire il file VMDK nel formato VHD.

    Nota

    C'è un bug noto nelle versioni >qemu-img =2.2.1 che genera un disco rigido virtuale formattato in modo non corretto. Il problema è stato risolto in QEMU 2.6. Si consiglia di usare qemu-img 2.2.0 o versione precedente oppure di eseguire l'aggiornamento alla versione 2.6 o successiva. Riferimento: https://bugs.launchpad.net/qemu/+bug/1490611.

    Convertire innanzitutto l'immagine in formato non elaborato:

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

    Verificare che le dimensioni dell'immagine non elaborata siano pari a 1 MB. In caso contrario, arrotondare le dimensioni a 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
    

    Convertire il disco non formattato in un disco rigido virtuale a dimensione fissa:

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

    Oppure, con qemu versione 2.6+ includere l'opzione force_size:

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

File Kickstart

Questa sezione illustra come preparare una distribuzione RHEL 7 da un ISO usando un file kickstart.

RHEL 7 da un file kickstart

  1. Creare un file kickstart che include il contenuto seguente e salvare il file. Per informazioni dettagliate sull'installazione di kickstart, vedere la guida all'installazione di kickstart.

    # 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. Posizionare il file kickstart in un percorso in cui sia accessibile per il sistema di installazione.

  3. Creare una nuova macchina virtuale nella console di gestione di Hyper-V. Nella pagina Connessione disco rigido virtuale selezionare Connetti un disco rigido virtuale successivamente e completare la creazione guidata della macchina virtuale.

  4. Aprire le impostazioni della macchina virtuale:

    1. Collegare un nuovo disco rigido virtuale alla macchina virtuale. Accertarsi di selezionare Formato VHD e A dimensione fissa.

    2. Collegare l'ISO di installazione all'unità DVD.

    3. Impostare il BIOS per l'avvio da CD.

  5. Avviare la macchina virtuale. Quando viene visualizzata la guida all'installazione, premere Tab per configurare le opzioni di avvio.

  6. Inserire inst.ks=<the location of the kickstart file> alla fine di opzioni di avvio e premere Invio.

  7. Attendere la fine dell'installazione. Al termine, la macchina virtuale verrà arrestata automaticamente. Il file VHD Linux è ora pronto per il caricamento in Azure.

Problemi noti

Non è stato possibile includere il driver Hyper-V nel disco RAM iniziale quando si usa un hypervisor non Hyper-V

In alcuni casi, i programmi di installazione di Linux potrebbero non includere i driver per Hyper-V nel disco RAM iniziale (initrd o initramfs), a meno che Linux non rilevi di essere in esecuzione in un ambiente Hyper-V.

Quando si usa un sistema di virtualizzazione diverso, ovvero VirtualBox, Xen e così via, per preparare l'immagine Linux, potrebbe essere necessario ricompilare initrd per assicurarsi che almeno i moduli kernel hv_vmbus e hv_storvsc siano disponibili nel disco RAM iniziale. Questo è un problema noto, almeno nei sistemi basati sulla distribuzione upstream di Red Hat.

Per risolvere questo problema, aggiungere i moduli Hyper-V a initramfs e ricompilarlo:

Modificare /etc/dracut.conf e aggiungere il contenuto seguente:

add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "

Ricompilare initramfs:

sudo dracut -f -v

Per altri dettagli, vedere le informazioni sulla ricompilazione di initramfs.

Passaggi successivi

  • È ora possibile usare il disco rigido virtuale Red Hat Enterprise 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.
  • Per altre informazioni sugli hypervisor certificati per l'esecuzione di Red Hat Enterprise Linux, visitare il sito Web di Red Hat.
  • Per altre informazioni sull'uso di immagini RHEL BYOS pronte per la produzione, passare alla pagina della documentazione per BYOS.