Preparare una macchina virtuale Oracle Linux per Azure
Si applica a: ✔️ Set di scalabilità flessibili di macchine virtuali ✔️ Linux
Questo articolo presuppone che sia già stato installato un sistema operativo Oracle Linux in un disco rigido virtuale. Sono disponibili vari strumenti per creare file con estensione vhd, ad 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
- Vedere anche Note generali sull'installazione di Linux per altri suggerimenti sulla preparazione di Linux per Azure.
- 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 in 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 l'installazione di file system UDF è necessario il supporto di kernel. Al primo avvio in Azure, la configurazione del provisioning viene passata alla macchina virtuale Linux tramite supporti in formato 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 (spesso l'impostazione predefinita per molte installazioni). Queste partizioni standard evitano conflitti di nome LVM con macchine virtuali clonate, in particolare se un disco del sistema operativo deve essere collegato a un'altra macchina virtuale per la risoluzione dei problemi. Se si preferisce, su dischi di dati si può usare LVM o RAID.
- I kernel Linux con versione precedente a 2.6.37 non supportano NUMA in Hyper-V con macchine virtuali di dimensioni maggiori. Questo problema influisce principalmente sulle distribuzioni precedenti usando 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 esegue la conversione da un disco non elaborato a un disco rigido virtuale, è necessario assicurarsi che le dimensioni del disco non elaborato siano multiple di 1 MB prima della conversione. 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) e modificare la rigaenabled=0
inenabled=1
in [ol6_addons] o [ol7_addons] in questo file.
Oracle Linux 6.X
Importante
Tenere presente che Oracle Linux 6.x è già EOL. Oracle Linux versione 6.10 include il supporto ELS disponibile, che terminerà il 07/2024.
Per l'esecuzione della macchina virtuale in Azure è necessario eseguire specifici passaggi di configurazione nel sistema operativo.
Nel riquadro centrale della console di gestione di Hyper-V selezionare la macchina virtuale.
Fare clic su Connect per aprire la finestra della macchina virtuale.
Disinstallare NetworkManager attivando il seguente comando:
sudo rpm -e --nodeps NetworkManager
Nota
Se il pacchetto non è già installato, questo comando non riesce con un messaggio di errore. Questi messaggi sono previsti.
Creare un file denominato network in the
/etc/sysconfig/
contenente il testo seguente:NETWORKING=yes HOSTNAME=localhost.localdomain
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
Modificare le regole udev per evitare la generazione di regole statiche per l'interfaccia Ethernet. Le regole seguenti possono provocare 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
Verificare che il servizio di rete venga avviato in fase di avvio eseguendo il comando seguente:
sudo chkconfig network on
Installare python-pyasn1 eseguendo il comando seguente:
sudo yum install python-pyasn1
Modificare la riga di avvio del kernel nella configurazione grub per includere più parametri del kernel per Azure. A questo scopo, 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, che consente di supporto tecnico di Azure con problemi di debug.
Oltre a quanto sopra, è consigliabile rimuovere i parametri seguenti:
rhgb quiet crashkernel=auto
L'avvio grafico e non silenzioso non è utile in un ambiente cloud in cui si vogliono inviare tutti i log alla porta seriale.
L'opzione
crashkernel
può essere lasciata configurata se necessario, ma si noti che questo parametro riduce la quantità di memoria disponibile nella macchina virtuale di 128 MB o più, che può essere problematica nelle dimensioni di macchina virtuale più piccole.Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio. Questo è in genere il valore predefinito.
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.
Non creare l'area di swap sul disco del sistema operativo.
L'agente Linux di Azure può configurare automaticamente l'area di swap utilizzando il disco risorse locale collegato alla VM dopo il provisioning in Azure. Il disco della risorsa locale è un disco temporaneo e potrebbe essere svuotato quando viene eseguito il 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.
Eseguire i comandi seguenti per effettuare il deprovisioning della macchina virtuale e prepararla per il provisioning in Azure:
sudo waagent -force -deprovision sudo export HISTSIZE=0 sudo logout
Fare clic su Azione> Arresta nella console di gestione di Hyper-V. Il disco rigido virtuale Linux è ora pronto per essere caricato in Azure.
Oracle Linux 7.0 e successive
Modifiche in Oracle Linux 7
La preparazione di una macchina virtuale Oracle Linux 7 per Azure è simile a Oracle Linux 6, ma esistono diverse differenze significative che vale la pena notare:
- Il supporto di Azure Oracle Linux con il kernel UEK (Unbreakable Enterprise kernel) o con il kernel compatibile Red Hat. È consigliabile 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 e si consiglia di non rimuoverlo.
- GRUB2 viene ora usato come bootloader predefinito, quindi la procedura per la modifica dei parametri kernel è cambiata (vedere di seguito).
- XFS è ora il file system predefinito. Se si vuole, è ancora possibile usare il file system ext4.
Passaggi di configurazione
Nella console di gestione di Hyper-V selezionare la macchina virtuale.
Fare clic su Connetti per aprire una finestra della console per la macchina virtuale.
Creare un file denominato network in the
/etc/sysconfig/
contenente il testo seguente:NETWORKING=yes HOSTNAME=localhost.localdomain
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
Modificare le regole udev per evitare la generazione di regole statiche per l'interfaccia Ethernet. Le regole seguenti possono provocare 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
Verificare che il servizio di rete venga avviato in fase di avvio eseguendo il comando seguente:
sudo chkconfig network on
Installare il pacchetto python-pyasn1 eseguendo il comando seguente:
sudo yum install python3-pyasn1
Eseguire il comando seguente per cancellare i metadati yum correnti e installare eventuali aggiornamenti:
sudo yum clean all sudo yum -y update
Modificare la riga di avvio del kernel nella configurazione grub per includere più parametri del kernel per Azure. A tale scopo, 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"
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. Disattiva inoltre le convenzioni di denominazione per le schede di rete in Oracle Linux 7 con il kernel Enterprise Unbreakable. Inoltre, è consigliabile rimuovere i parametri seguenti:
rhgb quiet crashkernel=auto
L'avvio grafico e non silenzioso non è utile in un ambiente cloud in cui si vogliono inviare tutti i log alla porta seriale.
L'opzione
crashkernel
può essere lasciata configurata se necessario, ma si noti che questo parametro ridurrà la quantità di memoria disponibile nella macchina virtuale di 128 MB o più, che potrebbe essere problematica nelle dimensioni di vm più piccole.Dopo aver completato la modifica di "/etc/default/grub" in precedenza, eseguire il comando seguente per ricompilare la configurazione grub:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Verificare che il server SSH sia installato e configurato per l'esecuzione all'avvio. Questo è in genere il valore predefinito.
Installare l'agente Linux di Azure e le dipendenze:
sudo yum install WALinuxAgent sudo systemctl enable waagent
Installare cloud-init per gestire il provisioning
sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
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
Scambiare la configurazione. Non creare spazio di scambio sul disco del sistema operativo.
In precedenza, l'agente Linux di Azure veniva usato automaticamente per configurare 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:sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
Se si desidera montare, formattare e creare lo scambio, è possibile:
- Passare questa opzione come configurazione cloud-init ogni volta che si crea una macchina virtuale
- Usare una direttiva cloud-init inserita nell'immagine che eseguirà questa operazione 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
Eseguire i comandi seguenti per 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.
Fare clic su Azione> Arresta nella console di gestione di Hyper-V. Il disco rigido virtuale Linux è ora pronto per essere caricato in Azure.
Passaggi successivi
È ora possibile usare il file con estensione vhd 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.