Linux 4.0ビルド・起動確認と、ライブパッチソースの在り処
今日(4/13)、Linux 4.0がリリースされました。
- LKML: Linux 4.0 released
何度かこういうネタを記事にしていますが、
今回も、自分のマシンでビルドと起動を試してみました。
また、それだけだと記事としてあんまりなので、
v3.19からの差分や、
4.0.0の目玉の「ライブパッチ」の各種ソースコードの場所を調べてみました。
ビルドと起動確認
以前の記事と同じやり方で、ビルド・インストール、起動確認できました。
ちなみに、
CPU | Intel(R) Core(TM)2 Duo CPU T7250 @ 2.00GHz | /proc/cpuinfo の model |
メモリ | 1023828 kB | /proc/meminfo の MemTotal |
のマシンで、以前の記事と同じDebian Wheezy上で、
ビルドに1時間30分ほどでした。
私が時代遅れなマシンを使っているだけなので、
普通はもっと短時間で済むのかもしれません。
v3.19との差分を調べる
特定のバージョン間で変更のあったファイル数を出してみます。
1. リポジトリのダウンロード(clone)
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
2. 差分の取得
リーナスのリポジトリ上ではバージョン番号でタグが打ってあるので、
git diffで引数にバージョン番号を与えれば、変更内容の一覧を取得できます。
$ cd linux/ $ git diff v3.19 v4.0
3. 変更ファイル数の取得
先ほどのgit diffコマンドの結果をファイルに書きだして、
以下のようなコマンドを実行すると、
変更が加えられたファイル数は9489個だとわかります。
$ git diff v3.19 v4.0 > git_diff_v3.19_v4.0.diff $ grep '^--- a\|^+++ b' git_diff_v3.19_v4.0.diff | cut -d'/' -f2- | sort | uniq > linux_3.19_4.0_diff_files.log $ wc -l linux_3.19_4.0_diff_files.log 9489 linux_3.19_4.0_diff_files.log
- 2つ目のコマンドのワンライナーは、git_diff_v3.19_v4.0.diffの差分情報からファイル名のみを抽出し、重複行を削除しています
ライブパッチの在り処
ライブパッチは、rcの頃から色々なサイトで紹介されていますが、
リブートすること無くパッチを当てられる機能、とのことです。
(私自身、まだよくわかっていません。。。)
ともあれ、注目の「ライブパッチ」がどのようなものか、
せっかくならソースコードを見てみたいものです。
ライブパッチ関係のファイルはファイル名に"livepatch"が入っています。
なので、Linuxソースコードディレクトリを対象に、
$ find linux/ -name '*livepatch*'
このようなコマンドで、該当するファイルをリストアップできます。
試してみると、該当するファイルは以下のとおりでした。
- samples/livepatch
- samples/livepatch/livepatch-sample.c
- kernel/livepatch
- Documentation/ABI/testing/sysfs-kernel-livepatch
- arch/x86/kernel/livepatch.c
- arch/x86/include/asm/livepatch.h
- include/linux/livepatch.h
Documentation/ABI/testing/sysfs-kernel-livepatch
によると、以下のファイルを通して操作するようです。
- /sys/kernel/livepatch
- /sys/kernel/livepatch/
- /sys/kernel/livepatch/
/enabled - /sys/kernel/livepatch/
/ - /sys/kernel/livepatch/
/
samples/livepatch/
には、Makefileも置いてあるので、
まずはここを見て、試してみるのが良さそうです。
追記
デフォルトコンフィグではライブパッチは有効になっていません。
make menuconfigでは、
"/"キーを押すと、シンボル名で検索できます。
"livepatch"で検索してみたところ、
- Processor type and features
- Kernel Live Patching
を有効化するのが良さそうです(シンボル名:"LIVEPATCH")。
なお、このコンフィグは、以下に依存しています。
- DYNAMIC_FTRACE_WITH_REGS
- MODULES
- SYSFS
- KALLSYMS_ALL
- HAVE_LIVEPATCH
無効なものがあると、"Processor type and features"の中に現れないので、
先に、有効化する必要があります。
(それぞれのコンフィグの場所は、"/"で検索すれば良いです。)
ただし、"HAVE_LIVEPATCH"はアーキテクチャ依存で決まっているようで、
Symbol: HAVE_LIVEPATCH [=n] Type : boolean Defined at kernel/livepatch/Kconfig:1 Selected by: X86_64 [=n] && 64BIT [=n]
"Selected by:"に、"X86_64 && 64BIT"とあるので、
当面、ライブパッチはx86(64ビット)環境でしか使えないようです。(。。無念)
- ちなみに、"[=n]"とあるのは現在の設定値です
- 私の環境はx86の32ビットなので、"=n"と出ています
あと、サンプルソースのビルドも、
- Kernel hacking
- Sample kernel code
- Build live patching sample -- loadable modules only
- Sample kernel code
を有効化すると(シンボル名:"SAMPLE_LIVEPATCH")行なってくれるようですので、x86(64ビット)な方は試してみてください。