Oracle Cloud Infrastructureドキュメント

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)インタフェースを使用して、Trivial File Transfer Protocol (TFTP)サーバーからiPXEをロードします。 iPXEの実装では、Oracle Linuxを起動するスクリプトが実行されます。 ブート・プロセス中、システムはカーネル、initrdファイル、およびカーネル・ブート・パラメータをネットワークからダウンロードします。 インスタンスは、ホストGRUBブート・ローダーを使用しません。

通常、yum update kernel-uekコマンドは、GRUB構成ファイルgrub.cfgまたはgrub.confを編集して、次のブートを構成します。 ベアメタル・インスタンスはGRUBブート・ローダーを使用しないので、GRUB構成ファイルへの変更は実装されていません。 インスタンス上でカーネルを更新する場合は、ブート・プロセスが正常に行われるように、アップデートをネットワークにアップロードする必要があります。 このニーズに応える次のアプローチがあります:

  • Oracle提供のイメージから起動されるインスタンスには、yum update kernel-uekコマンドの実行時にアップロードをシームレスに処理するOracle yumプラグインが含まれます。
  • Oracle提供のイメージに基づくカスタム・イメージを使用すると、特別な変更を行わずに、付属のyumプラグインが引き続き動作します。
  • 独自のパッケージ・マネージャをインストールする場合は、独自のプラグインを作成するか、カーネル、initrd、およびカーネル・ブート・パラメータを手動でアップロードする必要があります。

Oracle Yumプラグイン

「Oracle提供のイメージ」で起動したインスタンスでは、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

Oracle提供のイメージには、Unbreakable Enterprise Kernel (UEK)が組み込まれています。 UEK以外のカーネルに切り替える場合は、yum update kernelを実行する前に、DEFAULTKERNELの値を"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