Aggiornamenti del kernel del sistema operativo per le istanze Linux precedenti
Questo argomento si applica solo alle istanze Linux avviate prima del 15 febbraio 2017. Le istanze Linux avviate il 15 febbraio 2017 o successivamente si avviano direttamente dall'immagine e non richiedono ulteriori azioni per gli aggiornamenti del kernel.
Oracle Cloud Infrastructure avvia ogni istanza da un'unità di rete. Questa configurazione richiede ulteriori azioni 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 di iPXE esegue uno script per avviare Oracle Linux. Durante il processo di boot, il sistema scarica dalla rete il kernel, il file initrd
e i parametri di boot del kernel. 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 GRUB non vengono implementate. Quando si aggiorna il kernel nell'istanza, è necessario anche caricare l'aggiornamento nella rete per garantire il corretto 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 della 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 avvio 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
. Riprende 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 il kernel UEK (Unbreakable Enterprise Kernel). Se si desidera passare a un kernel non UEK, è necessario aggiornare il valore DEFAULTKERNEL
in "kernel" prima di eseguire yum update kernel
.
Aggiornamenti manuali
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 (tipo di richiesta HTTP PUT). Il quarto URL consente di attivare i file caricati (tipo di richiesta HTTP POST). Il sistema elimina 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 gli elementi caricati nel file della riga di comando.
cat /tmp/cmdline
Una risposta tipica è simile alla seguente.
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 seguenti comandi 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