試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

genkernel(Gentoo Linuxのカーネルビルド支援ツール)に関する覚え書き

Gentoo Linuxではカーネルは自分でビルドすることになるが、これを支援するgenkernelというツールがある。初期RAMディスクイメージ(initrd/initramfs)*1の作成も行える。
詳しい情報はGentoo Linux genkernelガイドに載っているため、ここでは、手動ビルドから移行した際の幾つかのメモをする。
関連記事:

設定ファイルとコマンド行オプションによる制御

genkernelの挙動を制御する設定ファイルは/etc/genkernel.confで、設定項目によっては実行時にコマンド行オプションで指定することもできる。

実行例とccacheを使用する設定

下はfbsplashを使用し、fbsplash*2に「livecd-2007.0」のテーマを使用する場合の実行例。

$ sudo bash -c 'CCACHE_DIR="[ccacheのキャッシュファイル用ディレクトリ]" genkernel --splash=livecd-2007.0 all'

ccacheを使用する場合、キャッシュディレクトリ指定の他に、コンパイラを指定する変数を下のように設定する。コマンド行オプションでも指定できるが、毎回指定する手間を省くために設定ファイルに記述することにする。
ファイル名: /etc/genkernel.conf

KERNEL_CC="ccache gcc"
UTILS_CC="ccache gcc"

関連記事:

カーネルソースと設定など

カーネルソースツリーとビルド設定などに関する指定
項目設定ファイルの変数コマンドラインオプション
カーネルソースツリーの最上位ディレクトDEFAULT_KERNEL_SOURCE--kerneldir
カーネルのビルド設定ファイルDEFAULT_KERNEL_CONFIG--kernel-config
make mrproperを実行する/しないMRPROPER(=yes/no)--(no-)mrproper
make oldconfigを実行する/しないOLDCONFIG(=yes/no)--oldconfig(実行する場合)
make menuconfigを実行する/しないMENUCONFIG(=yes/no)--(no-)menuconfig
GUIのxconfig/gconfigはサポートされていないため、genkernelの外で実行して設定ファイルを保存し、その設定ファイルを--kernel-configなどで指定する。

ビルド時の出力

(2008/4/26)メッセージの出力は/var/log/genkernel.logに記録されるため

$ tail -f /var/log/genkernel.log

で見る他、--loglevel=の値を上げても(最大は5)表示される。

ビルド後の出力ファイル

以下の場所・名前にファイルが作成される。

に自動的に入る。

initrdとLABEL/UUID指定

genkernelは初期RAMディスクイメージ(initrd/initramfs)を作成する。これを使用することで、デバイス名が不定となる(/dev/sd*などの)デバイスからのラベルやUUIDによる指定で起動することができる。*3
下は、genkernelが出力するinitrdを使用したときのブートローダGRUBの設定例。initrd行のファイルは/boot/initramfs-genkernel-[アーキテクチャ]-[バージョン]に対するシンボリックリンクにした。
ファイル名: /boot/grub/menu.lst

title  Gentoo Linux
root (hd0,4)
kernel /vmlinuz quiet root=UUID=[「/」パーティションのUUID] video=uvesafb:1280x1024-32,mtrr:3,ywrap maxvf:60 splash=silent,theme:livecd-2007.0 console=tty1
initrd /initrd.cpio.gz
boot

「root=/dev/ram0」や「init=/linuxrc」、「real_root」の指定はしていない。
UUIDを用いたパーティション指定での休止状態からの復帰は、バージョン3.4.9の時点では未対応。無理矢理できるようにすることも可能だが、ここでは扱わない。
関連URL:

*1:カーネル起動後の一番最初に読み込まれて処理される起動ディスクイメージ

*2:カーネルのfbcondecorサポートに加え、splashutilsとそのテーマが必要となるが、--splashオプションを付けることで、splash_geninitramfsを使用せずにfbsplash入りのinitrdを作成してくれるようになっている

*3:カーネル自体にはUUIDを読み込んで/dev/以下のデバイス名に解決する機能はなく(「root=UUID=...」のように渡してもカーネルパニックになる)、ディストリのinitrdが処理している