概要
このドキュメントは、任意の Linux システム上で「従来方式」によってカーネルをビルドする手順を説明します。Fedora 固有の手順は含まれないため、最終的に rpm パッケージは作成されません。ここではソースの取得、パッチの適用、設定、ビルドとインストール、GRUB の設定、そして起動失敗時の対処法まで扱います。
重要: カーネルのビルドとインストールはルート権限が必要です。実行前に重要なデータのバックアップを必ず取得してください。
目次
- 前提条件と用語定義
- 3 従来方式でのカーネルビルド
- 3.1 カーネルソースのダウンロード
- 3.2 パッチの適用(オプション)
- 3.3 カーネルの設定
- 3.4 ビルドとインストール
- 起動時のトラブルシューティングとロールバック
- 付加的な参考情報
- 代替アプローチ
- ロール別チェックリスト
- ミニ・メソドロジー(要点まとめ)
- トラブルシュート用ランブック
- 1行用語集
- リンク
前提条件と用語定義
- ルート権限(sudo または root)
- ビルドに必要なツール: gcc、make、binutils、bzip2、patch、openssl(initramfs 作成時など)
- 用語: “カーネルソース” = kernel.org から配布される tarball、”プレパッチ” = リリース前のパッチ(-rc)
3 従来方式でのカーネルビルド
3.1 カーネルソースのダウンロード
希望するカーネルを /usr/src にダウンロードします。例: 2.6 系を取得する場合:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.2.tar.bz2
展開してシンボリックリンクを作成します:
tar xjf linux-2.6.18.2.tar.bz2
ln -s linux-2.6.18.2 linux
cd /usr/src/linux
メモ: 最新の安定版や LTS を選ぶこと。kernel.org のディレクトリが変わる場合があるので、URL を確認してください。
3.2 パッチの適用(オプション)
特定のハードウェアドライバや先端技術のサポートが未だ正式リリースに含まれていない場合、ソースに対してパッチを適用します。パッチは bzip2 圧縮要素が多いため、まずは dry-run(テスト)を行います:
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1
dry-run がエラーを出したら、本適用は行わないで原因を調査してください。
プレパッチ(-rc 系)を適用する場合の注意: プレパッチは直前の “フルリリース” に適用する想定です。たとえば patch-2.6.19-rc5 を適用するなら、ソースは 2.6.18(フルリリース)を用います。
例:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc5.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc5.bz2 | patch -p1
重要: 異なるマイナーバージョン間でのパッチ適用は失敗や未定義動作を生むことがあります。パッチの README を必ず確認してください。
3.3 カーネルの設定
既存の稼働中カーネルの設定をベースにするのが安全です。まずクリーンアップしてから現在の設定をコピーします:
make mrproper
cp /boot/config-`uname -r` ./.config
設定メニューを起動します:
make menuconfig
メニューで “Load an Alternate Configuration File” を選び、.config を読み込みます。メニューを順に見て必要なオプションを有効化/無効化していきます。作業後、Exit を選んだら “Do you wish to save your new kernel configuration?” に Yes を選択してください。
画像: カーネル設定メニューの例
保存確認の画面例:
設定のヒント:
- デフォルトで動作しているファイルシステム、ディスクコントローラ、ネットワークドライバは有効にしておく。
- 不明なオプションはまずモジュール(M)にしておくと後から追加しやすい。
- ベアメタル環境では initramfs を必須にする場合がある(特に LVM や暗号化を使う場合)。
3.4 ビルドとインストール
ビルドとインストールは以下のコマンドを順に実行します:
make all
make modules_install
make install
注: コンパイル時間は CPU と設定に依存して数十分〜数時間かかることがあります。最後の make install は initramfs(ramdisk)を自動で作成し、/boot/grub/menu.lst を更新することが多いです。
インストール後、/boot/grub/menu.lst を編集して新しいカーネルがデフォルトで起動するよう default を 0 に設定します:
vi /boot/grub/menu.lst
例: my menu.lst の一部
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.18.2)
root (hd0,0)
kernel /vmlinuz-2.6.18.2 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18.2.img
title Fedora Core (2.6.18-1.2798.fc6)
root (hd0,0)
kernel /vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18-1.2798.fc6.img
再起動します:
shutdown -r now
起動後、新カーネルが稼働しているか確認します:
uname -r
期待される出力の例:
2.6.18.2
起動に失敗した場合の対処法
GRUB の画面で自動的に新カーネルが選ばれて失敗した場合、すぐに任意のキーを押してメニューを表示し、古い(既知で動作する)カーネルを選んで起動してください。
その後、/boot/grub/menu.lst から不具合のあるカーネルの stanza を削除する、または default を古いカーネルに戻して検証を進めます。
代替アプローチ(短評)
- ディストリビューション固有の方法(rpm/apt パッケージを作る): 管理と配布が容易だが、手元での迅速な試行には向かない。
- live-build や kexec を使った検証: 再起動を伴わずにカーネル切替を試せるが、すべての環境で安全とは限らない。
- コンテナや仮想マシン内でビルドとテスト: 実機に影響を与えずに反復実験が可能。
選択のヒント: 本番サーバではまず VM/ステージングで検証し、問題なければ本番に展開する。
ロール別チェックリスト
管理者(システム管理者):
- 重要データのバックアップを取得したか
- /usr/src にソースを置く権限があるか
- 必要パッケージを事前にインストールしたか(gcc、make 等)
- GRUB 設定の編集と復旧手順を確認したか
開発者(ドライバ開発):
- 試験用マシンまたは VM を用意したか
- パッチの README と互換性を確認したか
- モジュール化(M)でビルド→動的に挿入して検証できるか
QA:
- ブート検証と uname -r によるバージョン確認を実施
- 主要サービス(ネットワーク、ディスク、ログイン)の動作を確認
ミニ・メソドロジー(要点まとめ)
- ソースを取得し展開する。
- 必要ならパッチを dry-run でチェックしてから適用する。
- 現在の config をコピーし menuconfig で調整する。
- make all → modules_install → make install でインストールする。
- GRUB を確認して再起動し、uname -r で検証する。
トラブルシュート用ランブック(簡易)
- 問題: システムが新カーネルで起動しない
- 対処:
- GRUB メニューで古いカーネルを選んで起動
- /var/log/messages, dmesg を確認しエラーを特定
- 必要なら /boot/grub/menu.lst から該当 stanza を削除
- 対処:
- 問題: ネットワークまたはストレージが認識されない
- 対処:
- ビルド時に該当ドライバが組み込まれているか(builtin)を確認
- モジュールとしてビルドした場合は modprobe で挿入、ログを確認
- 対処:
- 問題: initramfs の不足で root をマウントできない
- 対処:
- initramfs を手動で再生成(mkinitrd/mkinitramfs 等)
- 必要なら initramfs に LVM や暗号化のドライバを含める
- 対処:
ロールバック(安全な戻し方):
- GRUB で旧カーネルを選択して起動 → /boot の不具合あるファイルを削除/修正 → GRUB の default を旧カーネルに戻す。
互換性と移行のヒント
- マイナーバージョン間(2.6.18 → 2.6.18.2)は比較的安全だが、メジャーな API/ABI 変化がある場合は注意。
- カスタムモジュールを使っている場合、モジュールの再ビルドとインストールが必要になることが多い。
- ディストリビューションのカーネルパッチ(例: RHEL/Fedora のパッチ)を利用している環境では、素の upstream カーネルで同等の動作を期待する前に検証を行う。
短い用語集(1行)
- initramfs: 起動時にカーネルが最初に読み込む小さなファイルシステム。
- modprobe: カーネルモジュールを挿入/削除するコマンド。
- mrproper: ソースディレクトリをクリーンにする make ターゲット。
まとめ
- 手順は「取得 → (パッチ) → 設定 → ビルド → インストール → 検証」。
- 重要なポイントは事前のバックアップ、dry-run の活用、古いカーネルからのロールバック路線を確保することです。
- 本番に投入する前に仮想環境で十分にテストしてください。
リンク
- Fedora: http://fedora.redhat.com
- Fedora Wiki: http://fedoraproject.org/wiki
- The Linux Kernel Archives: http://www.kernel.org