Linux

 

カーネル再構築

以下、CentOS5でカーネル再構築をした際の作業メモ。
一部遊んでいるところはありますが、それ以外の手順はkernel-2.6系であれば変わりません。

 

カーネルのビルドに失敗する

/usr/src/kernels/2.6.**/にカーネルソースがありますが、ここで取りあえずmrproperをしてみると...

# make mrproper
scripts/Makefile.clean:17: /usr/src/kernels/2.6.**/drivers/infiniband/hw/amso1100/Makefile: No such file or directory
make[3]: *** No rule to make target `/usr/src/kernels/2.6.**/drivers/infiniband/hw/amso1100/Makefile'.  Stop.
make[2]: *** [drivers/infiniband/hw/amso1100] Error 2
make[1]: *** [drivers/infiniband] Error 2
make: *** [_clean_drivers] Error 2

make失敗します。
たしかにMakefileがありませんね。ここだけ通らないようにMakefile書き換えればいけるのか??と思ってやってみましたが、結局他でも似たような文句を言われてmakeできません。

google先生に聞いてみると、

やぁジョニー元気かい?
ちゃんとカーネルソースをダウンロードしてmakeしてみたのかな。
HAHAHA :-)

というMLアーカイヴがいくつも出て来ます。ぁれぇ…ここにあるソースはsrpmを持って来た中身じゃないようです…。

 

準備

まずは現在使用しているカーネルのsrpmをゲットします。場所はお好きなところどこからでも良いので落として来ます。
私はわざわざyumdownloaderで取って来る方法で遊んでみました。

 

.repoファイルを作成

# vi /etc/yum.repo.d/CentOS-Source.repo
--- ここから
# CentOS-Source.repo

[base-source]
name=CentOS-$releasever - Base Source
baseurl=http://ftp2.riken.jp/Linux/centos/5.2/os/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#released updates
[updates-source]
name=CentOS-$releasever - Updates Source
baseurl=http://ftp2.riken.jp/Linux/centos/5.2/updates/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#packages used/produced in the build but not released
#[addons-source]
#name=CentOS-$releasever - Addons Source
#baseurl=http://ftp2.riken.jp/Linux/centos/5.2/addons/SRPMS/
#gpgcheck=1
#enabled=0
#gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#additional packages that may be useful
[extras-source]
name=CentOS-$releasever - Extras Source
baseurl=http://ftp2.riken.jp/Linux/centos/5.2/extras/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#additional packages that extend functionality of existing packages
[centosplus-source]
name=CentOS-$releasever - Plus Source
baseurl=http://ftp2.riken.jp/Linux/centos/5.2/centosplus/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

#contrib - packages by Centos Users
#[contrib-source]
#name=CentOS-$releasever - Contrib Source
#baseurl=http://ftp2.riken.jp/Linux/centos/5.2/contrib/SRPMS/
#gpgcheck=1
#enabled=0
#gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
--- ここまで
 

必要なファイルのダウンロード

# yumdownloader --enablerepo=base-source --source kernel
# yum -y install unifdef ★うちの環境ではこれだけで大丈夫。rpm-buildとかも必要なので適宜そろえること。
 

srpmの展開

# rpm -ivh kernel*.src.rpm
# cd /usr/src/redhat/ ★展開したsrpmはここへ。
 

カーネル再構築

さて、ここから実際の再構築開始です。

# rpmbuild -bp SPEC/kernel-2.6.spec
# cd BUILD/kernel-2.6.**/linux-2.6.********/

ほとんどおまじない。

# cp -a .config config.orig ★既存の.configを待避。
# make mrproper
# cp -a config.orig .config ★既存の.configを復帰。
# make oldconfig            ★oldconfigをかける。

ここは遊び。EXTRAVERSIONを外出しにしてファイルから読み込むようにします。

# vi Makefile
以下のdiffイメージ相当に編集。
-EXTRAVERSION = -prep
+#EXTRAVERSION = -prep
+EXTRAVERSION = $(shell cat ./extraversion)

EXTRAVERSIONとLOCALVERSIONを作成。
# echo "-92.1.10.el5" > extraversion   ★EXTRAVERSIONは元のカーネルにあわせて作成。
# echo "-ZN-01.00" > localversion-zero ★LOCALVERSIONに自分でrevision付け。コンフィグ変えて再構築したらこっちをインクリメント。

必要であれば、と言うかこれがしたいのでカーネルコンフィグの編集をします。不要とわかっているコンフィグはどんどん外してダイエットします。逆に必要なものがあれば組み込みor外部モジュールに。

# make menuconfig
# diff -up config.orig .config ★.configを保存したらdiffで確認。

さぁ、makeです。 makeが無事終わったら、modules_installとinstallkernelします。$**は適宜自分の付けた値・使用するアーキテクチャに読み替えること。

# make
# make modules_install
# installkernel $VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION arch/$ARCH/boot/bzImage System.map

grub.confの編集

installkernelまで終わったら、grub.confを編集します。default=1だと前のカーネルがデフォルト起動カーネルになるので、最新のカーネルを読むべくdefault=0にします。

# vi /boot/grub/grub.conf
以下のdiffイメージ相当で編集。
-default=1
+default=0

リブート

ここまでできたら、rebootしてちゃんと起動することを祈ります。 :-)

# reboot

さて、起動したでしょうか。もし起動しなければgrubで古いカーネルを選択して起動、カーネルのコンフィグを再検討します。

# uname -a

先ほど付けたEXTREVERSIONとLOCALVERSIONが出ていれば、起動はOKです。あとは安定動作してくれることを祈るのみ...


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-11-28 (金) 23:54:09