Atualizações de Kernel do Sistema Operacional para Instâncias Legadas do Linux

Observação

Este tópico só se aplica a instâncias do Linux que foram iniciadas antes de 15 de fevereiro de 2017. Instâncias do Linux iniciadas a partir de 15 de fevereiro de 2017 são iniciadas diretamente da imagem e não requerem ações adicionais para atualizações de kernel.

O Oracle Cloud Infrastructure inicializa cada instância em uma unidade de rede. Essa configuração requer ações adicionais ao atualizar o kernel do Sistema Operacional.

O Oracle Cloud Infrastructure usa o firmware UEFI (Unified Extensible Firmware Interface) e uma interface Preboot eXecution Environment (PXE) no servidor do host para carregar o iPXE por um servidor TFTP (Trivial File Transfer Protocol). A implementação do iPXE executa um script para inicializar o Oracle Linux. Durante o processo de inicialização, o sistema faz download do kernel, do arquivo initrd e dos parâmetros de inicialização do kernel na rede. A instância não usa o carregador de inicialização GRUB do host.

Normalmente, o comando yum update kernel-uek edita o arquivo de configuração do GRUB, grub.cfg ou grub.conf, para configurar a próxima inicialização. Como as instâncias bare metal não usam o carregador de inicialização GRUB, as alterações no arquivo de configuração do GRUB não são implementadas. Ao atualizar o kernel na sua instância, você também deve carregar a atualização para a rede para garantir um processo de inicialização bem-sucedido. As abordagens a seguir tratam desta necessidade:

  • As instâncias iniciadas por imagens da plataforma incluem um plug-in yum da Oracle que controla perfeitamente o upload quando você executa o comando yum update kernel-uek.
  • Se você usar uma imagem personalizada baseada em uma imagem da plataforma, o plug-in do yum incluído continuará funcionando, barrando alterações extraordinárias.
  • Se você instalar seu próprio gerenciador de pacotes, deverá gravar seu próprio plug-in ou fazer upload manualmente do kernel, do initrd e dos parâmetros de inicialização do kernel.

Plug-in Yum da Oracle

Nas instâncias iniciadas com uma imagem da plataforma, você pode encontrar o plug-in yum da Oracle em:

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

A configuração do plug-in está em:

/etc/yum/pluginconf.d

O plug-in procura duas variáveis nos arquivos /etc/sysconfig/kernel, UPDATEDEFAULT e DEFAULTKERNEL. Ele seleciona as atualizações somente quando a primeira variável é definida como "sim" e o valor DEFAULTKERNEL corresponde ao kernel que está sendo atualizado. Por exemplo:

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

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

As imagens da plataforma incorporam o UEK (Unbreakable Enterprise Kernel). Se quiser alternar para um kernel não UEK, você deve atualizar o valor DEFAULTKERNEL para "kernel" antes de executar yum update kernel.

Atualizações Manuais

Dica

A Oracle recomenda o uso do plug-in yum para atualizar o kernel.

Se você fizer upload manualmente das atualizações, há quatro URLs 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

Os três primeiros URLs são para fazer upload dos arquivos (tipo de solicitação HTTP PUT). O quarto URL é para ativar os arquivos submetidos a upload (tipo de solicitação HTTP POST). O sistema descartará os arquivos submetidos a upload se eles não estiverem ativados antes da reinicialização do host.

O kernel e o initrd são uploads de arquivo simples. O upload de cmdline deve conter os parâmetros de inicialização do kernel encontrados no arquivo grub.cfg ou grub.conf, dependendo da versão do Linux. O exemplo a seguir é uma entrada do arquivo /boot/efi/EFI/redhat/grub.cfg no Red Hat Linux 7. O texto destacado representa os parâmetros para upload.

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

O comando a seguir retorna o que está sendo submetido a upload no arquivo cmdline.

cat /tmp/cmdline

Uma resposta típica se parece com o seguinte.

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

Os comandos a seguir atualizam os arquivos cmdline e initrd e, em seguida, ativam as alterações.

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