レガシーLinuxインスタンスのOSカーネル更新

ノート

このトピックは、2017年2月15日より前に起動されたLinuxインスタンスにのみ適用されます。2017年2月15日以降に起動されたLinuxインスタンスは、イメージから直接起動するため、カーネルの更新について追加の処置は必要ありません。

Oracle Cloud Infrastructureは、ネットワーク・ドライブから各インスタンスを起動します。この構成では、OSカーネルを更新するときに追加の処置が必要です。

Oracle Cloud Infrastructureは、Unified Extensible Firmware Interface (UEFI)ファームウェアおよびPreboot eXecution Environment (PXE)インタフェースをホスト・サーバーで使用して、iPXEをTrivial File Transfer Protocol (TFTP)サーバーからロードします。IPXE実装は、スクリプトを実行してOracle Linuxを起動します。起動プロセス中に、カーネル、initrdファイルおよびカーネル・ブート・パラメータがネットワークからダウンロードされます。インスタンスはホストのGRUBブート・ローダーを使用しません。

通常、yum update kernel-uekコマンドはGRUB構成ファイル(grub.cfgまたはgrub.conf)を編集して、次回の起動を構成します。ベア・メタル・インスタンスはGRUBブート・ローダーを使用しないため、GRUB構成ファイルに対する変更は実装されません。インスタンスでカーネルを更新するとき、起動プロセスが成功するように、ネットワークにも更新をアップロードする必要があります。次のアプローチではこのニーズに対処しています:

  • プラットフォーム・イメージから起動されたインスタンスには、yum update kernel-uekコマンドを実行する際にアップロードをシームレスに処理するOracle yumプラグインが含まれています。
  • プラットフォーム・イメージに基づいたカスタム・イメージを使用する場合、含まれているyumプラグインは引き続き機能しますが、大幅な変更ができません。
  • 独自のパッケージ・マネージャをインストールする場合、独自のプラグインを作成するか、カーネル、initrdおよびカーネル・ブート・パラメータを手動でアップロードする必要があります。

Oracle yumプラグイン

プラットフォーム・イメージを使用して起動されたインスタンスには、Oracle yumプラグインが次の場所にあります:

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

プラグイン構成は次の場所にあります:

/etc/yum/pluginconf.d

このプラグインは、/etc/sysconfig/kernelファイルの2つの変数UPDATEDEFAULTおよびDEFAULTKERNELを確認します。更新が選択されるのは、最初の変数にyesが設定されており、DEFAULTKERNEL値が更新対象のカーネルと一致する場合のみです。例:

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

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

プラットフォーム・イメージには、Unbreakable Enterprise Kernel (UEK)が組み込まれています。UEK以外のカーネルに切り替える場合には、DEFAULTKERNELの値をkernelに更新してから、yum update kernelを実行します。

手動更新

ヒント

Oracle yumプラグインを使用してカーネルを更新することをお薦めします。

手動で更新をアップロードする場合、次の4つのURLが関連しています:

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

最初の3つのURLは、ファイルをアップロードするためのものです(HTTPリクエスト・タイプPUT)。4番目のURLは、アップロードされたファイルをアクティブ化するためのものです(HTTPリクエスト・タイプPOST)。アップロードされたファイルがホストの再起動前にアクティブ化されていないと、システムによって破棄されます。

カーネルとinitrdは、単純なファイルのアップロードです。cmdlineのアップロードには、Linuxバージョンに応じて、grub.cfgファイルまたはgrub.confファイルにあるカーネルブート・パラメータを含める必要があります。次の例は、Red Hat Linux 7の/boot/efi/EFI/redhat/grub.cfgファイルのエントリです。強調表示されたテキストは、アップロードするパラメータを表しています。

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

次のコマンドによって、cmdlineファイルにアップロードされている内容が返されます。

cat /tmp/cmdline

一般的なレスポンスは次のようになります。

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

次のコマンドによって、cmdlineファイルとinitrdファイルが更新され、変更内容がアクティブ化されます。

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