カーネルへaufsのパッチを当てて再構築をしてみた
-
Author: uncho
今考えているサーバ構成でaufsを使う必要が出た為、aufsのパッチを適用したカーネルを再構築してみました。aufsとは、うまく説明できませんが、ReadOnlyのファイルシステムとReadWriteのファイルシステムをマージしてひとつの読み書き可能なファイルシステムに見せることができるものです。
たとえば、CD-ROMブートの Linux等のOSは通常ReadOnlyでマウントされる為、設定を変更したりする書き込みはできませんが、aufsを使うことによって、擬似的に書き込み可能なファイルシステムのように見せかけることができます。(参考)
ではさっそく、カーネルに組込みリビルトしてみます。
実施環境:
- OS:CentOS5.4
- Kernel Ver:2.6.31.6
1. aufsパッチをダウンロード
aufsのパッチを入手します。ダウンロードにはgitが必要です。
mkdir /tmp/aufs.wcvs
cd /tmp/aufs.wcvs
git clone http://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-standalone.git aufs2-standalone.git
cd aufs2-standalone.git
git checkout origin/aufs2-xx
最後のaufs2-xxのxxにはパッチを適用するカーネルのバージョン番号にします。今回であれば、2.6.31.6ですので、左から3番目の31を指定します(aufs2-31)
2. 最新カーネルのダウンロード
最新カーネルをダウンロードします。今回は2.6.31.6をダウンロードしました。ダウンロード後、アーカイブをbzcat+tarで解凍、解凍したディレクトリへ移動します。
cd /usr/src/
wget http://www.cdnetworks.lkams.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.6.tar.bz2
bzcat linux-2.6.31.6.tar.bz2 | tar xf -
cd linux-2.6.31.6
3. aufsパッチの適用と関連ファイルのコピー
patchコマンドにてaufsパッチをカーネルソースに適用します。またaufs関連のソースファイルを展開したカーネルにコピーします。
patch -p1 < /tmp/aufs.wcvs/aufs2-standalone.git/aufs2-kbuild.patch
patch -p1 < /tmp/aufs.wcvs/aufs2-standalone.git/aufs2-base.patch
patch -p1 < /tmp/aufs.wcvs/aufs2-standalone.git/aufs2-standalone.patch
cp -rp /tmp/aufs.wcvs/aufs2-standalone.git/Documentation/ABI/testing/* Documentation/ABI/testing/.
cp -rp /tmp/aufs.wcvs/aufs2-standalone.git/fs/aufs/ fs/.
cp -rp /tmp/aufs.wcvs/aufs2-standalone.git/include/linux/aufs_type.h include/linux/.
4. カーネルの設定
再構築しようとしているカーネルに現行のカーネルと同じ設定をするため、設定ファイル「.config」を読み込ませます。また設定メニュー「make menuconfig」を実行しaufsを有効化させます。なお、今回はaufsはモジュール化せずに、静的にカーネルへ組み込ませます。
make clean
make mrproper
cp /boot/config-2.6.18-164.6.1.el5 .config
make menuconfig
メニュー画面で「Load an Alternate Configuration File」選択し 既存のカーネル設定「.config」を読み込んでからaufsを有効化します。
手順は下記の動画で。
5. RPMパッケージの作成
ここでやっと、カーネルのビルドします。カーネルのインストールにはRPMを利用した方が便利な為、ビルドと同時にRPMパッケージを作成してくれる「make rpm」を実行します。なお、このコマンドを実行するには「rpm-build」が必要です。
make rpm
6. インストール
後は通常のRPMパッケージと同様でrpmコマンドでインストールします。
rpm -Uvh /usr/src/redhat/RPMS/i386/kernel-2.6.31.6-1.i386.rpm
インストールすることによって、ブートローダGRUBのgrub.confを自動的に修正してくれたか、すみません忘れてしまいました。。。 確認し必要であれば修正して下さい。