BS-Kernelupdates für Legacy-Linux-Instanzen

Hinweis

Dieses Thema gilt nur für Linux-Instanzen, die vor dem 15. Februar 2017 gestartet wurden. Linux-Instanzen, die ab dem 15. Februar 2017 gestartet wurden, booten direkt über das Image und erfordern keine weitere Aktion für Kernelupdates.

Oracle Cloud Infrastructure bootet jede Instanz über ein Netzlaufwerk. Diese Konfiguration erfordert zusätzliche Aktionen, wenn Sie den BS-Kernel aktualisieren.

Oracle Cloud Infrastructure verwendet UEFI-Firmware (Unified Extensible Firmware Interface) und eine PXE-Schnittstelle (Preboot eXecution Environment) auf dem Hostserver, um iPXE von einem TFTP-Server (Trivial File Transfer Protocol) zu laden. Die iPXE-Implementierung führt ein Skript zum Booten von Oracle Linux aus. Während des Boot-Prozesses lädt das System den Kernel, die Datei initrd und die Kernel-Boot-Parameter über das Netzwerk herunter. Die Instanz verwendet nicht den GRUB-Boot Loader des Hosts.

Normalerweise bearbeitet der Befehl yum update kernel-uek die GRUB-Konfigurationsdatei grub.cfg oder grub.conf, um den nächsten Boot-Prozess zu konfigurieren. Da Bare-Metal-Instanzen den GRUB-Boot Loader nicht verwenden, werden Änderungen an der GRUB-Konfigurationsdatei nicht implementiert. Wenn Sie den Kernel auf Ihrer Instanz aktualisieren, müssen Sie auch das Update in das Netzwerk hochladen, um einen erfolgreichen Boot-Prozess zu gewährleisten. Die folgenden Ansätze gehen auf diese Anforderung ein:

  • Instanzen, die über ein Plattformimage gestartet werden, beinhalten ein Oracle-Yum-Plug-in. Es verarbeitet den Upload nahtlos, wenn Sie den Befehl yum update kernel-uek ausführen.
  • Wenn Sie ein benutzerdefiniertes Image basierend auf einem Plattformimage verwenden, funktioniert das Yum-Plug-in weiter, außergewöhnliche Änderungen ausgenommen.
  • Wenn Sie Ihren eigenen Packagemanager installieren, müssen Sie entweder Ihr eigenes Plug-in schreiben oder die Kernelparameter kernel, initrd und kernel boot manuell hochladen.

Oracle-Yum-Plug-in

Bei Instanzen, die mit einem Plattformimage gestartet werden, finden Sie das Oracle-Yum-Plug-in unter:

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

Die Plug-in-Konfiguration befindet sich unter:

/etc/yum/pluginconf.d

Das Plug-in sucht in der Datei /etc/sysconfig/kernel nach den beiden Variablen UPDATEDEFAULT und DEFAULTKERNEL. Die Updates werden nur ausgewählt, wenn die erste Variable auf "yes" gesetzt ist und der Wert DEFAULTKERNEL mit dem Kernel übereinstimmt, der aktualisiert wird. Beispiel:

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

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

Plattformimages enthalten den Unbreakable Enterprise Kernel (UEK). Wenn Sie zu einem Nicht-UEK-Kernel wechseln möchten, müssen Sie den Wert DEFAULTKERNEL in "kernel" aktualisieren, bevor Sie yum update kernel ausführen.

Manuelle Updates

Tipp

Oracle empfiehlt, dass Sie den Kernel mit dem Oracle-Yum-Plug-in aktualisieren.

Wenn Sie die Updates manuell hochladen, gibt es vier relevante URLs:

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

Die ersten drei URLs sind für das Hochladen von Dateien bestimmt (HTTP-Anfragentyp PUT). Die vierte URL ist für das Aktivieren der hochgeladenen Dateien bestimmt (HTTP-Anfragentyp POST). Das System verwirft die hochgeladenen Dateien, wenn sie nicht vor dem Neustart des Hosts aktiviert werden.

Bei "kernel" und "initrd" handelt es sich um einfache Dateiuploads. Der cmdline-Upload muss die in der Datei grub.cfg oder grub.conf (je nach Linux-Version) gefundenen Kernel-Boot-Parameter enthalten. Das folgende Beispiel ist ein Eintrag aus der Datei /boot/efi/EFI/redhat/grub.cfg in Red Hat Linux 7. Der hervorgehobene Text stellt die hochzuladenden Parameter dar.

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

Der folgende Befehl gibt zurück, was in die Datei "cmdline" hochgeladen wird.

cat /tmp/cmdline

Eine typische Antwort ähnelt dem folgenden Beispiel:

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

Die folgenden Befehle aktualisieren die Dateien cmdline sowie initrd und aktivieren dann die Änderungen.

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