コンテンツにスキップ

「カーネルライブパッチ」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
Kgx (トーク | 投稿記録)
インストール: リンクを追加
Kgx (トーク | 投稿記録)
項目を整理
44行目: 44行目:


KGraft は Arch 環境ではテストされておらず、サポートされていません。
KGraft は Arch 環境ではテストされておらず、サポートされていません。

== ksplice ==

Ksplice はオペレーティングシステムを再起動することなく、システム管理者が実行中のカーネルにセキュリティパッチを適用できるようにする Linux カーネルのオープンソース拡張です。2011年から Ksplice は Oracle に取得され、Oracle のプレミアムサポート下でのみ利用できる状態です。

=== インストール ===

[[Arch User Repository]] から {{AUR|ksplice-git}} パッケージをインストールしてください。

== 使用方法 ==
まず、使用しているカーネルのソースツリーと、以前にカーネルをビルドした時のファイルが必要です: {{ic|System.map}} と {{ic|.config}}。

前のビルドで使用した {{ic|System.map}} が存在しない場合は、{{ic|/proc/kallsyms}} をコピーして使うことができます。{{ic|kernel.kptr_restrict}} カーネルパラメータが有効になっている場合は、必ず root でコピーしてください。

この例では {{ic|--diffext}} オプションを利用して、新旧ソースファイルの差異からパッチを作成します。

カーネルのソースツリーに {{ic|ksplice}} ディレクトリを作成して、前のビルドの {{ic|System.map}} をコピーして、{{ic|.config}} をツリーにコピーしてください (ソースツリーに存在しない場合):

# mkdir -p src/ksplice
# cp System.map src/ksplice
# cp .config src/

ksplice パッチを作成してカーネルがリビルドされるのを待ちます。{{ic|new}} で終わるファイルが全て ksplice のパッチに組み込まれます。例えば、C のソースファイルなら、diffext が直接追加されて {{ic|.cnew}} になります。

# ksplice-create --diffext=new src/

新しく生成したパッチを実行中のカーネルに適用:

# ksplice-apply ksplice-*.tar.gz

{{ic|ksplice-apply}}, {{ic|ksplice-create}}, {{ic|ksplice-view}}, {{ic|ksplice-undo}} の man ページを参照してください。


== 参照 ==
== 参照 ==

2023年10月30日 (月) 23:39時点における版

カーネルライブパッチ (Kernel Live Patching, KLP) を使うことでシステムを再起動することなくカーネル空間に即座に修正を適用することができます。バージョン 4.0 から、ライブパッチに関連するパッチが上流にマージされたことで [1][2][3]、誰でもライブパッチ機能を使えるようになりました。一般的に、KLP は以下の手順で行います:

  1. 実行中のカーネルのソースツリーを取得。
  2. カーネルに適用するパッチを用意。
  3. ツールを使ってパッチを変換・ロード。

KLP が公式にサポートされる前から、ライブパッチ機能を提供するプロジェクトはいくつか存在していました。Oracle の ksplice や SuSE の kGraft、RedHat の kpatch などです。それぞれ異なる方法で KLP 機能を実装しています。メインストリームカーネルに取り込まれたパッチセットは kpatch と kGraft 由来のものです。

kpatch

インストール

カーネルとして kpatchAURを、ユーザースペースツールとして kpatch-gitAUR をインストールしてください。

CONFIG_LIVEPATCH, CONFIG_DEBUG_INFO, CONFIG_KALLSYMS を有効にすることで kpatch が使用できるカーネルを手動でビルドすることも可能です。

ノート カーネルをインストールしたら必ず ブートローダー を更新してください。

使用方法

パッケージのビルドが完了したら再起動後に以下のコマンドを実行:

$ export ROOTDIR=some/dir/aur/linux-kpatch/src/linux-x-y
$ cd $ROOTDIR

作業ディレクトリでカーネルに修正を加えて some.patch パッチを作成したら (標準カーネルの x.y バージョンではなく makepkg -o の後にソースツリーに対してパッチを作成します)、kpatch ユーティリティを起動:

$ kpatch-build -s $(pwd) -t $(pwd)/vmlinux some.patch

上記のコマンドはオリジナルのカーネルとパッチ済みのカーネルの両方をビルドするため、完了するまでしばらく時間がかかります。ビルドが完了すると同じディレクトリに kpatch-some.ko モジュールが出来ているはずです。そうしたら以下のコマンドでパッチを適用できます:

# insmod kpatch-some.ko

詳しくは man ページや github リポジトリ を参照してください。

kGraft

KGraft は Arch 環境ではテストされておらず、サポートされていません。

参照