LoginSignup
3

posted at

updated at

OCIでKspliceを使う Part1

Ksplice使ったことありますか?

Kspliceの名前は知っていても、実際に使ったことがある人は少ないのでは無いだろうか。Kspliceの詳細はネット検索してもらうとして、今回は簡単に説明すると共に実際に触ってみる。

OCIでは初めからセットアップされていて、すぐに使えるようになっている。

OCI Computeでyum updateすると、やたら時間がかかる

と思っているあなた。それはKspliceの仕組みが関係しているからだ。yum update自体はKspliceとは直接関係しない。

Kspliceがインストールされた環境でカーネルをアップデートすると、Kspliceを組み込むためにinitrdやinitramfsなどのカーネルのコンポーネントが再構成される。それなりに重いタスクなので時間がかかっているのだ。

Kspliceとは

概要

KspliceとはOracle Linuxで利用できるライブ・パッチング・システムだ。RHELのkpatchやSUSEのKLPに相当する機能である。アップデートしたLinuxカーネルを有効にするには、通常OSを再起動する必要がある。しかしKspliceを使用すると、再起動しなくてもアップデートを有効化できる。

おもなメリットは以下の通り。

  • ダウンタイム無しのパッチ適用/ロールバック
  • 迅速なセキュリティ脆弱性への対応

Kspliceを使用するにはOracle Linux Premier Support契約が必要で、さらに初回の設定作業が必要だ。だけれどOCI Computeでは初めからセットアップされていて、Oracle Linux Premier Support相当も含まれているので、追加のサポート契約は不要である。

Kspliceのライブパッチ対象となるコンポーネント

  • Oracle Linux 5以降のUEKとRHCK
  • Oracle Linux 6以降のglibcとopenssl(拡張クライアントが必要)

上記以外にもRHELやCentOS、Ubuntuでも利用可能。Kspliceのインストール方法はOracle Cloud Infrastructure内へのKsplice Uptrackのインストールを参照。

Kspliceクライアントの種類

Ksplice自体は単一のテクノロジーだが、操作するためコマンドとして、以下2種類のクライアントがある。

  • Ksplice Uptrackクライアント
  • Ksplice 拡張クライアント(2015年~)

それぞれの違いは以下の通り。ユーザ空間のサポートとは、kernel以外にglibcとopensslもサポートしていることを指す。

Ksliceクライアント ユーザ空間のサポート 以前のバージョンとの互換性 オフラインモード
拡張クライアント サポートしている なし あり
Uptrackクライアント サポートしていない あり あり

利用のためのネットワーク条件

KspliceのリポジトリはYum同様Internetに公開されている。そのためOCIでは、Internet GatewayもしくはNAT Gatewayを利用できること。現在Service Gatewayはサポートしていないようだ(2019/10)。

おもなドキュメント

Kspliceには、さまざまなドキュメントがある。日本語版のマニュアルもいいけれど、ksplice.comのKsplice Uptrack User's ManualFAQは一度見て欲しい。

日本語情報:

英語情報:

Kspliceの設定状況を確認する

OCI Computeを使って実際に確認する。今回はOracle Linux 7を使っているが、Oracle Linux 6/8や他のLinuxディストリビューションでもKspliceの操作は同じである。

検証環境

  • Oracle Linux 7.6
  • ksplice-1.0.38-1.el7.x86_64
  • uptrack-1.2.54-0

CentOSやRed Hat Enterprise Linux、Ubuntuなどを使用するときは、デフォルトではインストールされていないので、手動でインストールする必要がある。Oracle Cloud Infrastructureユーザーの場合、ULN(Unbreakable Linux Network)に登録しなくてもKspliceを使用できる。

Kspliceクライアントを確認する

インストールされているKspliceクライアントを確認する。拡張クライアント(ksplice)とUptrackクライアント(uptrack)の両方がインストールされている。ただし少し古いイメージ(2019年3月)では拡張クライアントがインストールされていないものもあった。またOracle Linux 6だと少し異なる。

  • 拡張クライアントがインストールされている例
$ rpm -qa | grep -e ksplice -e uptrack | sort
ksplice-1.0.38-1.el7.x86_64
ksplice-core0-1.0.38-1.el7.x86_64
ksplice-release-el7-1.0-5.el7.x86_64
ksplice-tools-1.0.38-1.el7.x86_64
uptrack-1.2.54-0.el7.noarch
  • Uptrackクライアントだけの例
$ rpm -qa | grep -e ksplice -e uptrack | sort
ksplice-release-el7-1.0-2.el7.x86_64
uptrack-1.2.54-0.el7.noarch

拡張クライアントがインストールされているときはksplice*だけでなく、uptrackもインストールされている。これは依存関係があるからで、カーネルのライブパッチング機能はuptrackに含まれている。

Kspliceの設定ファイルを確認する

Kspliceの設定ファイル/etc/uptrack/uptrack.confを確認する。grepのオプションは空行やコメント行を削除している。accesskeyが設定されていればKspliceを使用できる。また拡張クライアントがインストールされていない環境ではuser_update_repo_urlの行が無いはずだ。

$ grep -v -e '^\s*#' -e '^\s*$' /etc/uptrack/uptrack.conf
--ここから下が出力--
[Auth]
accesskey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(意図的に伏せ字)
[Network]
https_proxy =
gconf_proxy_lookup = no
update_repo_url=https://oraclecloud-updates-ksplice.oracle.com/update-repository
user_update_repo_url=https://oraclecloud-updates-ksplice.oracle.com/ksplice/request
[Settings]
install_on_reboot = yes
autoinstall = no

起動しているサービスがあるか確認する

Kspcliceは設定すれば自動アップデートする機能もあるので関連の確認してみる。すると6と7の双方でいくつかのサービスがある。

  • Oracle Linux 7/8の場合
$ systemctl list-unit-files --type service| grep -e uptrack -e ksplice
uptrack-late.service                          masked
uptrack-prefetch.service                      enabled
uptrack.service                               enabled
  • Oracle Linux 6の場合
$ chkconfig --list | grep  -e uptrack -e ksplice
ksplice-xen     0:off   1:off   2:on    3:on    4:on    5:on    6:off
uptrack         0:off   1:off   2:on    3:on    4:on    5:on    6:off
uptrack-late    0:off   1:off   2:on    3:on    4:on    5:on    6:off

Yumリポジトリを確認する

リポジトリを確認すると、カーネル用のkspliceリポジトリが有効になっている。ユーザ空間用のKspliceリポジトリuserspace_kspliceは見当たらない。

  • Oracle Linux 7の場合
# yum repolist enabled
Loaded plugins: langpacks, ulninfo
repo id                         repo name                                 status
ol7_UEKR5/x86_64                Latest Unbreakable Enterprise Kernel Rele    138
ol7_addons/x86_64               Oracle Linux 7Server Add ons (x86_64)        326
ol7_developer/x86_64            Oracle Linux 7Server Development Packages    775
ol7_developer_EPEL/x86_64       Oracle Linux 7Server Development Packages 26,135
ol7_ksplice                     Ksplice for Oracle Linux 7Server (x86_64)  1,426★これ
ol7_latest/x86_64               Oracle Linux 7Server Latest (x86_64)      12,820
ol7_optional_latest/x86_64      Oracle Linux 7Server Optional Latest (x86  9,834
ol7_software_collections/x86_64 Software Collection Library release 3.0 p 13,606
repolist: 65,060
  • Oracle Linux 8の場合
repo id           repo name

ol8_UEKR6         Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64)
ol8_addons        Oracle Linux 8 Addons (x86_64)
ol8_appstream     Oracle Linux 8 Application Stream (x86_64)
ol8_baseos_latest Oracle Linux 8 BaseOS Latest (x86_64)
ol8_ksplice       Ksplice for Oracle Linux 8 (x86_64)★これ
ol8_oci           Oracle Linux 8 OCI Packages (x86_64)
ol8_oci_included  Oracle Software for OCI users on Oracle Linux 8 (x86_64)
  • Oracle Linux 6の場合
# yum repolist enabled
読み込んだプラグイン:security, ulninfo
リポジトリー ID          リポジトリー名                                   状態
ol6_UEKR4                Latest Unbreakable Enterprise Kernel Release 4 f    135
ol6_addons               Oracle Linux 6Server Add ons (x86_64)               415
ol6_developer            Oracle Linux 6Server Packages for Development an     76
ol6_ksplice              Ksplice for Oracle Linux 6Server (x86_64)         2,143★これ
ol6_latest               Oracle Linux 6Server Latest (x86_64)             11,878
ol6_software_collections Software Collection Library release 3.0 packages 10,796
repolist: 25,443

念のためにdisableになっているリポジトリも含めて検索すると発見。単にdisableになっているだけだった。

# yum repolist all | grep ksplice
ol7_ksplice                     Ksplice for Oracle Linux 7Server enabled:  1,426
ol7_x86_64_userspace_ksplice    Ksplice aware userspace packages disabled★これ

ここまでで分かったこと

  • Kspliceを使うと、再起動しなくても新しいカーネルアップデートを適用できる
  • OCI ComputeではデフォルトでKspliceを利用できる
  • KspliceはUEKとRHCKの両方で利用できる
  • 拡張クライアントを使うとglibcとopensslも対象になる(デフォルトでは利用不可)

Kspliceを使ってみる

実際にKspliceを使って、どのようなものなのか体感してみよう。現在使っているカーネルバージョンを確認する。

# uname -r
4.14.35-1844.3.2.el7uek.x86_64

最新のカーネルバージョンを確認する。現在の4.14.35-1844.3.2より新しい4.14.35-1844.5.3がリリースされている。

# yum check-update kernel-uek
kernel-uek.x86_64               4.14.35-1844.5.3.el7uek                ol7_UEKR5

Kspliceのアップデートがリリースされているか確認する。表示するのにuptrack-upgrade -nというコマンドは不思議に思うかもしれないが、対話モードで入力するNoを指定している。uptrack-show --availableコマンドでも同じことができる。

# uptrack-upgrade -n
Effective kernel version is 4.14.35-1844.3.2.el7uek
The following steps will be taken:
Install [jqu0nve5] Add support for runtime configuration of target LIO inquiry strings.
Install [q5v4oo0p] Denial-of-service in the Infiniband core driver when allocating protection domains.
Install [ksx9kjdz] CVE-2019-6974: Use-after-free in KVM device creation.
Install [jvnb5n4d] CVE-2019-7222: Information disclosure in KVM VMX emulation.
以下省略

Kspliceで最新アップデートを適用する。このときは約30個のアップデートがあったが、10秒以内に適用できた。

# uptrack-upgrade -y
The following steps will be taken:
Install [jqu0nve5] Add support for runtime configuration of target LIO inquiry strings.
Install [q5v4oo0p] Denial-of-service in the Infiniband core driver when allocating protection domains.
★中略★
Installing [oehos3cn] Known exploit detection.
Installing [s8jh2mwf] Known exploit detection for CVE-2017-7308.
Installing [dcgq70uq] Known exploit detection for CVE-2018-14634.
Your kernel is fully up to date.
Effective kernel version is 4.14.35-1844.4.5.2.el7uek

再び確認すると4.14.35-1844.3.2のままで変わっていない。「これまでの説明と違う!」と思うかもしれないが、それは確認方法が違うからである。

# uname -r
4.14.35-1844.3.2.el7uek.x86_64

Kspliceのアップデートを適用した実効のカーネルバージョンは、以下のコマンドで表示できる。

# uptrack-uname -r
4.14.35-1844.4.5.2.el7uek.x86_64

残念ながら最新の4.14.35-1844.5.3では無いが、もとの4.14.35-1844.3.2より新しい4.14.35-1844.4.5.2に更新されている。

最新にならない理由は不明だが、Kspliceのアップデートが開発中なのか。それとも、ちょうどこのときIntel MDS脆弱性があり、マイクロコード更新のため再起動が必要だったからなのか。後者だったら逆にすごいのだが。

おわりに

Kspliceを使うと、簡単かつ短時間にカーネルをアップデートできることがわかっただろうか。次回はさらに踏み込んで細かく調べたい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3