[[linuxカーネル再構築]]

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

開発環境をインストールして、最新にする。
#code(nonumber){{
[root@c108 ~]# yum groupinstall "Development Libraries" "Development Tools"
[root@c108 ~]# yum update
}}

カーネルソースを取得するツールとカーネル構築に必要な追加パッケージをインストールします。
#code(nonumber){{
[root@c108 ~]# yum install yum-utils gnupg unifdef
[root@c108 ~]#
}}

カーネル構築用のユーザ(rpmbuilder)を作成して、ソースを取得する。
#code(nonumber){{
[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)を展開して、パッチの適用を済ませる
#code(nonumber){{
[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 を実行する
#code(nonumber){{
[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」を有効にする。
&ref(2016y03m05d_175348486.png,nolink);
選択後、「Exit」を選択して「Do you wish to save your new kernel configuration?」にて「Yes」を選択して .config を更新します。
&ref(2016y03m05d_175518842.png,nolink);

そして、
#code(nonumber){{
[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 なファイルシステムを読むことができる。
#code(nonumber){{
[root@c108 ~]# mount -t ufs -o ufstype=sun,ro /dev/sdb7 /mnt/sun
}}

***カーネルをupgradeする [#k71fd2f7]

ufs.koを使って古いHDDを読み込んでいると、途中でマシンがフリーズしてしまった。全く読めないのではなく、
読めるには読めるのだが、なぜだかフリーズしてしまう。
なので、カーネルごと新調することにした。
CentOS5のカーネルは、 2.6.18 である。この 2.6 系のlongtermな 2.6.32.70 を適用することにした。
#code(nonumber){{
[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
}}
&color(white,blue){注意点}; ここで必ず「General setup」->「enable deprecated sysfs features which may confuse old userspace tools」を有効にすること。これをしないと起動中にハングします。
&ref(2016y03m05d_182804837.png,nolink);
この変更を保存して、Makefileに印を入れて、コンパイル・インストールを行います
#code(nonumber){{
[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 を修正する。
#code(nonumber){{
[root@c108 linux-2.6.32.70]# vi /boot/grub/grub.conf
- default=1
+ default=0
[root@c108 linux-2.6.32.70]# reboot
}}
再起動後、採用されているカーネルを確認する
#code(nonumber){{
[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