以下、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で取って来る方法で遊んでみました。
# 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とかも必要なので適宜そろえること。
# 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
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です。あとは安定動作してくれることを祈るのみ...