「カーネルライブパッチ」の版間の差分
細 |
Kusanaginoturugi (トーク | 投稿記録) (校正(でき・出来)) |
||
(他の1人の利用者による、間の3版が非表示) | |||
1行目: | 1行目: | ||
[[Category:カーネル]] |
[[Category:カーネル]] |
||
[[en:Kernel live patching]] |
[[en:Kernel live patching]] |
||
+ | [[pt:Kernel live patching]] |
||
+ | [[zh-hans:Kernel live patching]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|カーネルモジュール}} |
{{Related|カーネルモジュール}} |
||
22行目: | 24行目: | ||
{{ic|CONFIG_LIVEPATCH}}, {{ic|CONFIG_DEBUG_INFO}}, {{ic|CONFIG_KALLSYMS}} を有効にすることで kpatch が使用できるカーネルを手動でビルドすることも可能です。 |
{{ic|CONFIG_LIVEPATCH}}, {{ic|CONFIG_DEBUG_INFO}}, {{ic|CONFIG_KALLSYMS}} を有効にすることで kpatch が使用できるカーネルを手動でビルドすることも可能です。 |
||
− | {{Note|カーネルをインストールしたら必ずブートローダーを更新してください。}} |
+ | {{Note|カーネルをインストールしたら必ず [[ブートローダー]] を更新してください。}} |
=== 使用方法 === |
=== 使用方法 === |
||
35行目: | 37行目: | ||
$ kpatch-build -s $(pwd) -t $(pwd)/vmlinux ''some.patch'' |
$ kpatch-build -s $(pwd) -t $(pwd)/vmlinux ''some.patch'' |
||
− | 上記のコマンドはオリジナルのカーネルとパッチ済みのカーネルの両方をビルドするため、完了するまでしばらく時間がかかります。ビルドが完了すると同じディレクトリに ''kpatch-some.ko'' モジュールが |
+ | 上記のコマンドはオリジナルのカーネルとパッチ済みのカーネルの両方をビルドするため、完了するまでしばらく時間がかかります。ビルドが完了すると同じディレクトリに ''kpatch-some.ko'' モジュールができているはずです。そうしたら以下のコマンドでパッチを適用できます: |
# insmod ''kpatch-some.ko'' |
# insmod ''kpatch-some.ko'' |
||
44行目: | 46行目: | ||
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 ページを参照してください。 |
||
== 参照 == |
== 参照 == |
2024年7月10日 (水) 20:58時点における版
関連記事
カーネルライブパッチ (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 環境ではテストされておらず、サポートされていません。