Mandrivaでカーネルをビルドしてインストールする手順

概要
このガイドは、Mandriva 系ディストリビューション上でカーネルをビルドし、RPMパッケージとしてインストールし、LILOブートローダーで起動するまでの手順を段階的に説明します。対象はシステム管理者または自前カーネルを使いたい開発者です。用語: カーネル — Linuxカーネル本体。RPM — Red Hat系パッケージ形式。LILO — Linux Loader(古いブートローダー)。
5 カーネルをビルドする
カーネルをビルドするには、ソースディレクトリで以下を実行します。
make rpm
コンパイルには数分から数時間かかることがあります。所要時間はカーネルの設定とCPU性能によります。ビルド中はログを確認し、エラーが出たら直ちに対処してください。
重要: ビルドを開始する前に十分なディスク容量とメモリがあるか確認してください(特にSRPMや中間ファイル用)。
6 新しいカーネルをインストールする
ビルドが成功すると、src.rpmとアーキテクチャ別のrpmパッケージが生成されます。src.rpmは通常以下に置かれます。
/usr/src/rpm/SRPMS/
名前を確認するには:
ls -l /usr/src/rpm/SRPMS/
例(ユーザー環境): kernel-2.6.18.3default-1.src.rpm
アーキテクチャ別のバイナリは次のディレクトリにあります(i386, i586, i686, x86_64 など)。例:
/usr/src/rpm/RPMS/i386/
名前を確認するには:
ls -l /usr/src/rpm/RPMS/i386/
例(ユーザー環境): kernel-2.6.18.3default-1.i386.rpm
該当するディレクトリに移動してRPMをインストールします:
cd /usr/src/rpm/RPMS/i386/
rpm -ivh kernel-2.6.18.3default-1.i386.rpm
注: -i は新規インストール。既存カーネルを置き換えたい場合は -U を検討してくださいが、古いカーネルは残すことを推奨します(検証とロールバック用)。
RPMを他のMandrivaマシンに転送して同じ手順でインストールすることも可能です。再コンパイルは不要です。
次に、起動に必要な初期RAMディスク(initrd)を作成します。作成しないと新しいカーネルで起動できないことが多いです。
mkinitrd /boot/initrd-2.6.18.3-default.img 2.6.18.3-default
ファイル名とカーネルのバージョンラベルは環境に合わせて変更してください。
7 LILO ブートローダーの設定
LILOを使っている場合は、/etc/lilo.conf に新しいカーネルを追加し、lilo を再実行して設定を反映させます。
まず /boot の内容を確認して新しい vmlinuz と initrd を見つけます。
ls -l /boot
通常、カーネルファイルは vmlinuz-
既存の動作中のカーネル設定(stanza)を参考に /etc/lilo.conf に新しいエントリを追加します。label 行にはユニークな名前を指定し、default 行がその名前を指すようにすると再起動時にそのカーネルが起動します。
vi /etc/lilo.conf
以下は、追加前の例です(ファイルの例示)。
# File generated by DrakX/drakboot
# WARNING: do not forget to run lilo after modifying this file
default="linux"
boot=/dev/sda
map=/boot/map
keytable=/boot/us.klt
menu-scheme=wb:bw:wb:bw
compact
prompt
nowarn
timeout=100
message=/boot/message
image=/boot/vmlinuz
label="linux"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5 splash=silent"
vga=788
image=/boot/vmlinuz
label="linux-nonfb"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5"
image=/boot/vmlinuz
label="failsafe"
root=/dev/sda6
initrd=/boot/initrd.img
append=" failsafe resume=/dev/sda5"
新しいカーネル用のstanzaを先頭に追加した後の例:
# File generated by DrakX/drakboot
# WARNING: do not forget to run lilo after modifying this file
default="linux-2.6.18.3-default"
boot=/dev/sda
map=/boot/map
keytable=/boot/us.klt
menu-scheme=wb:bw:wb:bw
compact
prompt
nowarn
timeout=100
message=/boot/message
image=/boot/vmlinuz-2.6.18.3-default
label="linux-2.6.18.3-default"
root=/dev/sda6
initrd=/boot/initrd-2.6.18.3-default.img
append=" resume=/dev/sda5 splash=silent"
vga=788
image=/boot/vmlinuz
label="linux"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5 splash=silent"
vga=788
image=/boot/vmlinuz
label="linux-nonfb"
root=/dev/sda6
initrd=/boot/initrd.img
append=" resume=/dev/sda5"
image=/boot/vmlinuz
label="failsafe"
root=/dev/sda6
initrd=/boot/initrd.img
append=" failsafe resume=/dev/sda5"
編集が終わったら LILO を実行して書き込みます:
lilo
その後システムを再起動します:
shutdown -r now
起動後、実際に新しいカーネルが使われているか確認します:
uname -r
期待される出力例:
2.6.18.3-default
もしシステムが起動しなければ、再起動してLILOメニューで古いカーネルを選択して起動してください。以下のような画面が表示されることがあります。
問題が発生したカーネルのstanzaは /etc/lilo.conf から削除し、再度 lilo を実行してから再試行してください。
チェックリスト — 実行前と実行後
- 実行前
- 十分なディスク空き容量を確認
- /boot に必要なファイル名の命名規則を決める
- 既存カーネルのバックアップ
- 実行中
- make rpm のログを監視
- エラー発生時にビルドオプションを見直す
- 実行後
- mkinitrd で initrd を作成
- /etc/lilo.conf を編集して保存
- lilo を実行してエラーを確認
- 再起動して uname -r で確認
受け入れ基準
- システムが正常に再起動し、新しいカーネルで起動すること
- uname -r が期待するバージョンを返すこと
- 必要なモジュールとデバイスが正しく動作すること(ネットワーク、ディスクなど)
- 問題発生時に古いカーネルで回復できること
トラブルシューティング
- ビルドでエラーが出る
- ビルドログを確認して依存パッケージが足りないかチェック
- kernel config (.config) の設定ミスを疑う
- mkinitrd で失敗する
- 指定したカーネルラベルが実際のカーネルと一致しているか確認
- lilo 実行でエラー
- /etc/lilo.conf の構文ミス(引用符やパス)を確認
- /boot が正しいデバイスにマウントされているか確認
- 起動せずにカーネルパニックになる
- initramfs の内容が不完全な可能性。モジュールとドライバの依存関係を見直す
- まず古いカーネルで起動して、dmesg と /var/log/messages を確認
ロール別チェックリスト
- システム管理者
- ブート設定とディスク構成のバックアップを取る
- LILO設定のテスト変更を行う
- 開発者
- カーネル設定(.config)をバージョン管理する
- 特定ドライバでの動作確認を自動化するテストを作る
簡易フローチャート
flowchart TD
A[make rpm を実行] --> B{ビルド成功?}
B -- Yes --> C[mkinitrd を作成]
B -- No --> D[ログ確認して再ビルド]
C --> E[/etc/lilo.conf を編集]
E --> F[lilo を実行]
F --> G{再起動して起動成功?}
G -- Yes --> H[完了: uname -r を確認]
G -- No --> I[古いカーネルで回復し検査]
テストケースと受け入れテスト
- TC1: make rpm 実行後、/usr/src/rpm/RPMS/
/ に kernel-*.rpm が存在する - TC2: mkinitrd 実行後、/boot/initrd-
.img が存在する - TC3: lilo 実行後、lilo が正常終了し、/var/log/messages にエラーがない
- TC4: 再起動後 uname -r が期待バージョンを返す
注意事項
- LILOは古いブートローダーです。可能であればGRUBなどの新しいブートローダーへの移行を検討してください。GRUBを使う場合は /etc/grub.conf または grub-mkconfig の手順が異なります。
- 本手順はMandriva向けの一般例です。ディストリビューションやバージョンによってファイル配置やツールの振る舞いが異なることがあります。
まとめ
- make rpm でビルドし、生成されたRPMをインストールする
- mkinitrd で初期RAMディスクを作成する
- /etc/lilo.conf を編集して lilo を実行し、再起動して動作確認する
- 問題発生時は古いカーネルで回復し、ログとinitrd設定、lilo設定を見直す
8 リンク
- Mandriva: http://www.mandriva.com
- The Linux Kernel Archives: http://www.kernel.org