Aggiornamenti del kernel del sistema operativo per istanze Linux precedenti

Nota

Questo argomento si applica solo alle istanze Linux avviate prima del 15 febbraio 2017. Le istanze Linux avviate il 15 febbraio 2017 o successivamente, vengono avviate direttamente dall'immagine e non richiedono ulteriori azioni per gli aggiornamenti del kernel.

Oracle Cloud Infrastructure esegue il boot di ogni istanza da un'unità di rete. Questa configurazione richiede azioni aggiuntive quando si aggiorna il kernel del sistema operativo.

Oracle Cloud Infrastructure utilizza il firmware UEFI (Unified Extensible Firmware Interface) e un'interfaccia PXE (Preboot eXecution Environment) sul server host per caricare iPXE da un server TFTP (Trivial File Transfer Protocol). L'implementazione iPXE esegue uno script per avviare Oracle Linux. Durante il processo di boot, il sistema scarica il kernel, il file initrd e i parametri di boot del kernel dalla rete. L'istanza non utilizza il boot loader GRUB dell'host.

In genere il comando yum update kernel-uek modifica il file di configurazione di GRUB, grub.cfg o grub.conf, per configurare il boot successivo. Poiché le istanze Bare Metal non utilizzano il boot loader GRUB, le modifiche al file di configurazione di GRUB non vengono implementate. Quando si aggiorna il kernel nell'istanza, è inoltre necessario caricare l'aggiornamento nella rete per garantire la corretta esecuzione del processo di avvio. I seguenti approcci rispondono a questa esigenza:

  • Le istanze avviate dalle immagini della piattaforma includono un plugin Oracle yum che gestisce senza problemi il caricamento quando si esegue il comando yum update kernel-uek.
  • Se si utilizza un'immagine personalizzata basata su un'immagine di piattaforma, il plugin yum incluso continuerà a funzionare, salvo modifiche straordinarie.
  • Se si installa il proprio gestore di pacchetti, è necessario scrivere il proprio plugin o caricare manualmente i parametri di boot kernel, initrd e kernel.

Plugin Oracle Yum

Nelle istanze avviate con un'immagine della piattaforma, è possibile trovare il plugin Oracle yum all'indirizzo:

/usr/share/yum-plugins/kernel-update-handler.py

La configurazione del plugin si trova in:

/etc/yum/pluginconf.d

Il plugin cerca due variabili nel file /etc/sysconfig/kernel, UPDATEDEFAULT e DEFAULTKERNEL. Raccoglie gli aggiornamenti solo quando la prima variabile è impostata su "sì" e il valore DEFAULTKERNEL corrisponde al kernel in fase di aggiornamento. Ad esempio:

# UPDATEDEFAULT specifies if new-kernel-pkg should make
# new kernels the default
UPDATEDEFAULT=yes

# DEFAULTKERNEL specifies the default kernel package type
DEFAULTKERNEL=kernel-uek

Le immagini della piattaforma incorporano Unbreakable Enterprise Kernel (UEK). Se si desidera passare a un kernel non EUK, è necessario aggiornare il valore DEFAULTKERNEL in "kernel" prima di eseguire yum update kernel.

Aggiornamenti manuali

Suggerimento

Oracle consiglia di utilizzare il plugin Oracle yum per aggiornare il kernel.

Se si caricano manualmente gli aggiornamenti, sono disponibili quattro URL pertinenti:

http://169.254.0.3/kernel
http://169.254.0.3/initrd
http://169.254.0.3/cmdline
http://169.254.0.3/activate

I primi tre URL sono per il caricamento di file (HTTP Request Type PUT). Il quarto URL è per l'attivazione dei file caricati (tipo di richiesta HTTP POST). Il sistema ignora i file caricati se non vengono attivati prima del riavvio dell'host.

Il kernel e initrd sono semplici caricamenti di file. Il caricamento della riga di comando deve contenere i parametri di boot del kernel presenti nel file grub.cfg o grub.conf, a seconda della versione di Linux. L'esempio seguente è una voce del file /boot/efi/EFI/redhat/grub.cfg in Red Hat Linux 7. Il testo evidenziato rappresenta i parametri da caricare.

kernel /boot/vmlinuz-4.1.12-37.5.1.el6uek.x86_64 


                        ro root=UUID=8079e287-53d7-4b3d-b708-c519cf6829c8 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us netroot=iscsi:@169.254.0.2::3260:iface1:eth0::iqn.2015-02.oracle.boot:uefi rd_NO_MD SYSFONT=latarcyrheb-sun16 ifname=eth0:90:e2:ba:a2:e3:80 crashkernel=auto iscsi_initiator=iqn.2015-02. rd_NO_LVM ip=eth0:dhcp rd_NO_DM LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600 iommu=on
                    
                

Il comando seguente restituisce ciò che viene caricato nel file della riga di comando.

cat /tmp/cmdline

Una risposta tipica assomiglia a quanto segue.

ro root=UUID=8079e287-53d7-4b3d-b708-c519cf6829c8 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us netroot=iscsi:@169.254.0.2::3260:iface1:eth0::iqn.2015-02.oracle.boot:uefi rd_NO_MD SYSFONT=latarcyrheb-sun16 ifname=eth0:90:e2:ba:a2:e3:80 crashkernel=auto iscsi_initiator=iqn.2015-02. rd_NO_LVM ip=eth0:dhcp rd_NO_DM LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600 iommu=on

I comandi seguenti aggiornano i file cmdline e initrd, quindi attivano le modifiche.

CKSUM=`md5sum /tmp/cmdline | cut -d ' ' -f 1`
sudo curl -X PUT --data-binary @/tmp/cmdline -H "Content-MD5: $CKSUM" http://169.254.0.3/cmdline
CKSUM=`md5sum /boot/initramfs-3.8.13-118.8.1.el7uek.x86_64.img | cut -d ' ' -f 1`
sudo curl -X PUT --data-binary @/boot/initramfs-3.8.13-118.8.1.el7uek.x86_64.img -H "Content-MD5: $CKSUM" http://169.254.0.3/initrd
sudo curl -X POST http://169.254.0.3/activate