カーネルライブパッチ
関連記事
カーネルライブパッチ (Kernel Live Patching, KLP) を使うことでシステムを再起動することなくカーネル空間に即座に修正を適用することができます。バージョン 4.0 から、ライブパッチに関連するパッチが上流にマージされたことで [1][2][3]、誰でもライブパッチ機能を使えるようになりました。一般的に、KLP は以下の手順で行います:
- 実行中のカーネルのソースツリーを取得。
- カーネルに適用するパッチを用意。
- ツールを使ってパッチを変換・ロード。
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 環境ではテストされておらず、サポートされていません。