Atualizações de Kernel do Sistema Operacional para Instâncias Legadas do Linux
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
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