続・玩式草子 ―戯れせんとや生まれけん―

第12回 Plamo-7.1とinitrd[3]

この記事を読むのに必要な時間:およそ 5 分

過去2回に渡ってPlamo Linux 7.1で新規に採用したinitrdの仕組みや作り方を紹介してきました。今回はこの話題のまとめとしてinitrdを使ったカーネル更新の方法を紹介します。なお今回取りあげる予定だったCPUのfirmware(microcode)更新の話題は,紙幅の都合で次回に延期しました。

ソースコードのダウンロードと展開

まずはビルドしたいカーネルのソースコードをwww.kernel.org等からダウンロードします。最近のLinuxカーネルは,Linusさんを中心とした開発チームが公開するバージョン番号が2ケタの開発版(5.0, 5.1, 5.2..)とそれを引き継いだメンテナチームが公開するバージョン番号が3ケタのメンテナンス版(5.0.1, 5.0.2, 5.1.1...)があり,メンテナンス版の中でもっともバージョン番号が大きいもの(本稿執筆時点では5.2.9)最新の安定版(Latest Stable)という扱いになっています。

このバージョン番号が3ケタのメンテナンス版は,開発版のバージョンが2つほど進むとメンテナンスが終わります。すなわち,本稿執筆時点では5.1のシリーズと5.2のシリーズがメンテナンスされているものの,5.1シリーズはEOL(End Of Life:開発終了)が宣言されており,linux-5.3が公開されれば,メンテナンスされるのは5.2と5.3のシリーズになります。数ヶ月後,linux-5.4が公開されると5.2シリーズがEOLとなってメンテナンス対象は5.4と5.3のシリーズになるわけです。

安定性を重視するビジネス環境向けには,より長期間(5年以上)メンテナンスされるLTS(Long Term Support)版と呼ばれる特別のバージョンが用意されます。5.xシリーズでは,次の次のバージョン(5.4)が最初のLTS版になる予定です。

今回は最新の安定版である5.2.9を使うことにしましょう。まず,適切なディレクトリを用意し,ソースコードをダウンロード,展開します。カーネルのビルドは一般ユーザでも可能なので,ホームディレクトリにLinuxというディレクトリを作り,そこでビルドすることにします。

$ mkdir ~/Linux ; cd ~/Linux
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.2.9.tar.xz
--2019-08-25 22:58:10--  https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.2.9.tar.xz
....
linux-5.2.9.tar.xz      100%[=======================================================>] 102.11M  8.19MB/s 時間 12s     
2019-08-25 22:58:23 (8.32 MB/s) - `linux-5.2.9.tar.xz' へ保存完了 [107065760/107065760]

$ tar xvf linux-5.2.9.tar.xz
linux-5.2.9/
linux-5.2.9/.clang-format
linux-5.2.9/.cocciconfig
....
linux-5.2.9/virt/lib/Makefile
linux-5.2.9/virt/lib/irqbypass.c
$

カーネルの各種機能の設定

次にビルドする機能やドライバを設定します。その際,0から全てを設定するのは大変なので,既存の設定を元に新しい機能を追加することにします。Plamo Linuxのデフォルトカーネルでは,/proc/config.gzにそのカーネルをビルドした時の設定を記録しているので,これを.configのヒナ型にします。

$ cd linux-5.2.9
$ zcat /proc/config.gz > .config

この状態でmake oldconfigを実行すると,.configにある設定はそのまま使い,.configに存在しない(=新しく追加された)項目のみを尋ねてくるので,設定すべき項目はだいぶ少なくなります。

$ make oldconfig
 HOSTCC  scripts/basic/fixdep
 HOSTCC  scripts/kconfig/conf.o
 ...
 Cputime accounting
> 1. Full dynticks CPU time accounting (VIRT_CPU_ACCOUNTING_GEN)
choice[1]: 1
Fine granularity task level IRQ time accounting (IRQ_TIME_ACCOUNTING) [Y/n/?] y
BSD Process Accounting (BSD_PROCESS_ACCT) [Y/n/?] y
  BSD Process Accounting version 3 file format (BSD_PROCESS_ACCT_V3) [Y/n/?] y
Export task/process statistics through netlink (TASKSTATS) [Y/?] y
  Enable per-task delay accounting (TASK_DELAY_ACCT) [Y/?] y
  Enable extended accounting over taskstats (TASK_XACCT) [Y/n/?] y
    Enable per-task storage I/O accounting (TASK_IO_ACCOUNTING) [Y/n/?] y
Pressure stall information tracking (PSI) [N/y/?] (NEW)

ここで"(NEW)"と表示されているのが既存の.configには無い設定項目です。選択肢は"[N/y/?]"で,デフォルトでは"N"が設定されているため,このままリターンキーを押せば"N"(使用しない)になります。また,"?"を押せばこの項目に関する説明が表示されるので,どういう機能か知りたい時に使ってみるのもいいでしょう。ちなみに,この項目ではこういう説明が表示されました。

Pressure stall information tracking (PSI) [N/y/?] (NEW) ?

CONFIG_PSI:

Collect metrics that indicate how overcommitted the CPU, memory,
and IO capacity are in the system.

If you say Y here, the kernel will create /proc/pressure/ with the
pressure statistics files cpu, memory, and io. These will indicate
the share of walltime in which some or all tasks in the system are
delayed due to contention of the respective resource.

In kernels with cgroup support, cgroups (cgroup2 only) will
have cpu.pressure, memory.pressure, and io.pressure files,
which aggregate pressure stalls for the grouped tasks only.

For more details see Documentation/accounting/psi.txt.

Say N if unsure.

この説明によると,この機能を"Y"にすると,CPUやメモリ,I/O入出力がリソース不足で待たされた時間の情報が/proc/pressure/以下に出力されるようになるそうです。

ちょっと面白そうな機能ではあるものの,このような情報が必要になるのは仮想環境を大規模にホスティングしているサーバマシンくらいでしょうから,たいていの環境はデフォルトの"N"のままでよさそうです。最後にある"Say N if unsure"の1行も,⁠通常の環境では不要⁠⁠,ということを示しています。

このように,それぞれの設定項目には適切なデフォルト値があらかじめ用意されているので,深く考えずにリターンキー連打で進めていっても大丈夫です。

選択を間違ったり,気になる項目を飛ばしてしまった場合は,make oldconfigで一通り設定を終えてから,改めてmake menuconfigで調整することも可能です。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html