Actualizaciones del núcleo del sistema operativo para instancias de Linux heredadas

Nota

Este tema solo se aplica a instancias de Linux que se iniciaron antes del 15 de febrero de 2017. Las instancias de Linux iniciadas a partir del 15 de febrero de 2017 se inician directamente desde la imagen y no requieren acciones adicionales para las actualizaciones del núcleo.

Oracle Cloud Infrastructure inicia cada instancia desde una unidad de red. Esta configuración requiere acciones adicionales al actualizar el núcleo del sistema operativo.

Oracle Cloud Infrastructure utiliza firmware Unified Extensible Firmware Interface (UEFI) y una interfaz Preboot eXecution Environment (PXE) en el servidor host para cargar iPXE desde un servidor de protocolo de transferencia de archivos trivial (TFTP). La implementación de iPXE ejecuta una secuencia de comandos para iniciar Oracle Linux. Durante el proceso de inicio, el sistema descarga el núcleo, el archivo initrd y los parámetros de inicio del núcleo desde la red. La instancia no utiliza el cargador de inicio GRUB del host.

Normalmente, el comando yum update kernel-uek edita el archivo de configuración GRUB, grub.cfg o grub.conf, para configurar el siguiente inicio. Dado que las instancias con hardware dedicado no usan el cargador de inicio GRUB, los cambios del archivo de configuración GRUB no se implementan. Cuando actualiza el núcleo en su instancia, también debe cargar la actualización a la red para garantizar un proceso de inicio satisfactorio. Los siguientes enfoques abordan esta necesidad:

  • Las instancias iniciadas desde imágenes de plataforma incluyen un plugin yum de Oracle que gestiona sin problemas la carga cuando ejecuta el comando yum update kernel-uek.
  • Si utiliza una imagen personalizada basada en una imagen de plataforma, el plugin yum incluido continuará funcionando, salvo cambios extraordinarios.
  • Si instala su propio gestor de paquetes, debe escribir su propio plugin o cargar el núcleo, initrd y los parámetros de inicio del núcleo manualmente.

Plugin Yum de Oracle

En las instancias iniciadas con una imagen de plataforma, puede encontrar el plugin yum de Oracle en:

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

La configuración del plugin se encuentra en:

/etc/yum/pluginconf.d

El plugin busca dos variables en el archivo /etc/sysconfig/kernel, UPDATEDEFAULT y DEFAULTKERNEL. Recopila las actualizaciones solo cuando la primera variable se establece en "sí" y el valor DEFAULTKERNEL coincide con el núcleo que se está actualizando. Por ejemplo:

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

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

Las imágenes de plataforma incorporan Unbreakable Enterprise Kernel (UEK). Si desea cambiar a un núcleo no UEK, debe actualizar el valor DEFAULTKERNEL a" núcleo" antes de ejecutar yum update kernel.

Actualizaciones manuales

Consejo

Oracle recomienda usar el plugin yum de Oracle para actualizar el núcleo.

Si carga las actualizaciones de forma manual, hay cuatro URL relevantes:

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

Las tres primeras URL son para la carga de archivos (tipo de solicitud HTTP PUT). La cuarta URL se utiliza para activar los archivos cargados (tipo de solicitud HTTP POST). El sistema descarta los archivos cargados si no se activan antes de que el host se reinicie.

El núcleo e initrd son cargas de archivos simples. La carga de cmdline debe contener los parámetros de inicio del núcleo que se encuentran en el archivo grub.cfg o grub.conf, según la versión de Linux. El siguiente ejemplo es una entrada del archivo /boot/efi/EFI/redhat/grub.cfg en Red Hat Linux 7. El texto resaltado representa los parámetros que se van a cargar.

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

El siguiente comando devuelve lo que se está cargando en el archivo cmdline.

cat /tmp/cmdline

Una respuesta típica se parece a la siguiente.

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

Los siguientes comandos actualizan los archivos cmdline e initrd y, a continuación, activan los cambios.

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