openSuSE 10.1 のカーネルをコンパイルする際にはいくつか注意点があります。
ここで説明しているのは TOMOYO Linux カーネルをコンパイルする際に試行錯誤して見つけた手順です。正式なコンパイル手順については私は知りません。(^^;
カーネルをコンパイルしてインストールする場合は以下のようにします。
まず、カーネルソースの rpm をインストールします。
|
rpm -ivh kernel-source-2.6.16.13-4.i586.rpm
|
これにより、 /usr/src/linux-2.6.16.13-4 へのシンボリックリンクである /usr/src/linux と
/usr/src/linux-2.6.16.13-4-obj へのシンボリックリンクである /usr/src/linux-obj が作成されます。
あとは、 kernel-default の場合、 /usr/src/linux-obj/i386/default/ ディレクトリへ移動して通常通りコンパイルします。
cd /usr/src/linux-obj/i386/default/
make -s menuconfig
make -s
make -s modules modules_install install
|
しかし、カーネルのバイナリ rpm を作成する場合は上記手順とは異なります。
まず、カーネルソースのソース rpm をインストールします。
|
rpm -ivh kernel-source-2.6.16.13-4.src.rpm
|
これにより、 /usr/src/packages/SOURCES/ ディレクトリにいくつかの .spec ファイルが作成されます。
そして、 kernel-default の場合、以下のようにコンパイルします。他のディストリビューションのように /usr/src/packages/SPECS/kernel*.spec を使うのではないことに注意してください。
|
rpmbuild -bb /usr/src/packages/SOURCES/kernel-default.spec
|
ディスク領域とコンパイル時間を節約するために私は kernel-default.spec を以下のように修正して使っています。
----- Start of patch -----
diff -u kernel-default.spec.org kernel-default.spec
--- kernel-default.spec.org 2006-05-03 18:31:20.000000000 +0900
+++ kernel-default.spec 2006-07-13 22:35:32.000000000 +0900
@@ -123,7 +123,7 @@
# Will modules not listed in supported.conf abort the kernel build (0/1)?
%define supported_modules_check 0
# Are we building with debug symbols enabled?
-%define with_debug %(set -- " %optflags "; [ "$1" = "${1/ -g }" ]; echo $? )
+%define with_debug 0
%define tolerate_unknown_new_config_options 0
# kABI change tolerance (default in maintenance should be 4, 8 or 15;
# see scripts/kabi-checks)
----- End of patch -----
また、 /usr/lib/rpm/find-requires.ksyms の実行中に "/usr/lib/rpm/find-requires.ksyms: line 12: /usr/bin/nm: Argument list too long" というエラーが出ると思われます。このエラーは以下のように修正することで回避できます。
----- Start of patch -----
# diff -u find-requires.ksyms.org find-requires.ksyms
--- find-requires.ksyms.org 2006-04-23 09:28:28.000000000 +0900
+++ find-requires.ksyms 2006-06-12 19:05:19.000000000 +0900
@@ -9,7 +9,7 @@
esac
all_provides() {
- nm "$@" \
+ for module in "$@"; do nm -- $module; done \
| sed -r -ne 's:^0*([0-9a-f]+) A __crc_(.+):\1\t\2:p' \
| sort -k2 -u
}
----- End of patch -----
ちなみに、 rpm パッケージを作成するために以下のようにするのはNGです。
rpm -ivh kernel-source-2.6.16.18-3.i586.rpm
cd /usr/src/linux/
cp -a /usr/src/linux-obj/i386/default/.* .
make -s rpm-pkg
|
この場合、以下のようなエラーメッセージが表示されます。
Finding Supplements: /usr/lib/rpm/find-supplements kernel
error: line 48: Dependency tokens must begin with alpha-numeric, '_' or '/':
error: Failed to find Supplements:
|
また、作成されたパッケージも rpm -ivh でインストールしようとすると "ksym(...) = ... is needed by kernel-..." というエラーが表示され、 --nodeps オプションを追加しないとインストールできないものになります。ただし、この問題は CONFIG_MODVERSIONS を使わない設定(# CONFIG_MODVERSIONS is not set)にすれば回避できるようです。
posted by 熊猫さくら at 20:14|
Comment(0)
|
TrackBack(0)
|
Linux