linuxカーネル再構築

CentOS5.xのマシンでufsなファイルシステムをmountする必要が出てきた。
CentOS5ではufsはサポートされていないので、既存のカーネルのままufs.koを作る事にした。

開発環境をインストールして、最新にする。

[root@c108 ~]# yum groupinstall "Development Libraries" "Development Tools"
[root@c108 ~]# yum update

カーネルソースを取得するツールとカーネル構築に必要な追加パッケージをインストールします。

[root@c108 ~]# yum install yum-utils gnupg unifdef
[root@c108 ~]#

カーネル構築用のユーザ(rpmbuilder)を作成して、ソースを取得する。

[root@c108 ~]# useradd -r -m rpmbuilder
[root@c108 ~]# su - rpmbuilder
 
[rpmbuilder@c108 ~]$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
[rpmbuilder@c108 ~]$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
 
[rpmbuilder@c108 ~]$ yumdownloader --source kernel
 
[rpmbuilder@c108 ~]$ ls -l
合計 66644
-rw-rw-r-- 1 rpmbuilder rpmbuilder 68155255  1月 20 05:04 kernel-2.6.18-408.el5.src.rpm
drwxrwxr-x 7 rpmbuilder rpmbuilder     4096  3月  5 17:40 rpmbuild
[rpmbuilder@c108 ~]$

次に、ソース(kernel-2.6.18-408.el5.src.rpm)を展開して、パッチの適用を済ませる

[rpmbuilder@c108 ~]$ rpm -Uvh kernel-2.6.18-408.el5.src.rpm
[rpmbuilder@c108 ~]$ rpmbuild -bp --target x86_64 rpmbuild/SPECS/kernel.spec

これでお膳立ては済んで、必要なカーネルモジュールを有効にするために make menuconfig を実行する

[rpmbuilder@c108 ~]$ cd rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18-408.el5.x86_64
 
[rpmbuilder@c108 linux-2.6.18-408.el5.x86_64]$ make menuconfig

目的の ufs.ko は、「File systems」->「Miscellaneous filesystems」の「UFS file system support」を有効にする。
2016y03m05d_175348486.png
選択後、「Exit」を選択して「Do you wish to save your new kernel configuration?」にて「Yes」を選択して .config を更新します。
2016y03m05d_175518842.png

そして、

[rpmbuilder@c108 linux-2.6.18-408.el5.x86_64]$ make prepare
[rpmbuilder@c108 linux-2.6.18-408.el5.x86_64]$ make modules_prepare
[rpmbuilder@c108 linux-2.6.18-408.el5.x86_64]$ make M=fs/ufs
[rpmbuilder@c108 linux-2.6.18-408.el5.x86_64]$ strip --strip-debug fs/ufs/ufs.ko
[rpmbuilder@c108 linux-2.6.18-408.el5.x86_64]$ sudo cp fs/ufs/ufs.ko /lib/modules/`uname -r`/extra
[rpmbuilder@c108 linux-2.6.18-408.el5.x86_64]$ sudo /sbin/depmod -a
[rpmbuilder@c108 linux-2.6.18-408.el5.x86_64]$ sudo /sbin/modprobe ufs

これで ufs なファイルシステムを読むことができる。

[root@c108 ~]# mount -t ufs -o ufstype=sun,ro /dev/sdb7 /mnt/sun

カーネルをupgradeする

ufs.koを使って古いHDDを読み込んでいると、途中でマシンがフリーズしてしまった。全く読めないのではなく、
読めるには読めるのだが、なぜだかフリーズしてしまう。
なので、カーネルごと新調することにした。
CentOS5のカーネルは、 2.6.18 である。この 2.6 系のlongtermな 2.6.32.70 を適用することにした。

[root@c108 ~]# cd /usr/src
[root@c108 src]# wget ftp://ftp.riken.jp/Linux/kernel.org/linux/kernel/v2.6/longterm/v2.6.32/linux-2.6.32.70.tar.xz
[root@c108 src]# xz -cd linux-2.6.32.70.tar.xz | tar xf - && cd linux-2.6.32.70
[root@c108 linux-2.6.32.70]# cp /boot/config-2.6.18-408.el5 .config
[root@c108 linux-2.6.32.70]# make oldconfig
 
(質問は全てリターンキーで応答)
 
[root@c108 linux-2.6.32.70]# make menuconfig

注意点 ここで必ず「General setup」->「enable deprecated sysfs features which may confuse old userspace tools」を有効にすること。これをしないと起動中にハングします。
2016y03m05d_182804837.png
この変更を保存して、Makefileに印を入れて、コンパイル・インストールを行います

[root@c108 linux-2.6.32.70]# vi Makefile
(略)
EXTRAVERSION = .70-chaperone
(略)
[root@c108 linux-2.6.32.70]# time(make&& make modules&& make modules_install&& make install)  *紅茶とケーキで待ちましょう

コンパイル終了後に、次の起動時にこのカーネルを使用させるように /boot/grub/grub.conf を修正する。

[root@c108 linux-2.6.32.70]# vi /boot/grub/grub.conf
- default=1
+ default=0
[root@c108 linux-2.6.32.70]# reboot

再起動後、採用されているカーネルを確認する

[root@c108 ~]# cat /etc/redhat-release
CentOS release 5.11 (Final)
[root@c108 ~]#
[root@c108 ~]# uname -r
2.6.32.70-chaperone
 
[root@c108 ~]#

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2016-03-05 (土) 18:55:39 (1699d)