2013/03/06

CentOS 6.3のカーネルのソースコードを取得する

はじめに

いろいろな書籍や雑誌、WEBサイトの記事等を読んでいくなかで、Linuxカーネルのソースコードを見たい時(きちんと読める訳ではありませんが…)が何度かありましたので、自身のCentOS 6.3環境にソースコードを取得して、それを参照できるようにしてみました。

環境

実施した際の環境は以下の通りです。

OS CentOS 6.3 x86_64 (64bit)
カーネルバージョン 2.6.32-279.22.1.el6.x86_64

カーネルのソースコードのダウンロード手順

Yumリポジトリの設定

CentOS 6.2からソースコードが http://vault.centos.org に配置されているようですので、yumでこれを参照できるようにリポジトリの設定を行います。

rootにスイッチします。

$ su -
パスワード:

CentOS-Source.repoというリポジトリ設定ファイルを作成し、以下のような内容を記載します。

# cd /etc/yum.repos.d
# vim CentOS-Source.repo
[base-source]
name=CentOS-$releasever - Base Source
baseurl=http://vault.centos.org/$releasever/os/Source/
gpgcheck=1
enabled=0
gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-6

[updates-source]
name=CentOS-$releasever - Updates Source
baseurl=http://vault.centos.org/$releasever/updates/Source/
gpgcheck=1
enabled=0
gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-6

[extras-source]
name=CentOS-$releasever - Extras Source
baseurl=http://vault.centos.org/$releasever/extras/Source/
gpgcheck=1
enabled=0
gpgkey=http://vault.centos.org/RPM-GPG-KEY-CentOS-6

リポジトリの設定はこれで完了です。

ソースコードのRPMパッケージのダウンロード

ソースコードをRPMパッケージをダウンロードします。
作業用のディレクトリを作成します。ここでは/tmp配下にkernelというディレクトリを作成しています。

# mkdir -p /tmp/kernel

作成したディレクトリに移動します。

# cd /tmp/kernel

CentOS 6.3のカーネルをダウンロードします。--releaseverオプションでバージョンを指定します。

# yumdownloader --source kernel --releasever=6.3

以下のファイルが取得されています。

# ls
kernel-2.6.32-279.22.1.el6.src.rpm
RPMパッケージからソースコードのファイルの取得

RPMパッケージからファイルを取り出します。これを実施するにはRPMパッケージをcpio形式のアーカイブファイルに変換し、cpioコマンドで取り出すことができます。具体的なオペレーション手順としては、rpm2cpioコマンドでRPMファイルをcpioファイルに変換し、標準出力に出力されるcpio形式のアーカイブをパイプでcpioに渡して展開します。

# rpm2cpio kernel-2.6.32-279.22.1.el6.src.rpm | cpio -id
167602 blocks

いくつかのファイルが生成されますが、その中にlinux-2.6.32-279.22.1.el6.tar.bz2というファイルがあります。これを展開します。

# tar -xjvf linux-2.6.32-279.22.1.el6.tar.bz2

linux-2.6.32-279.22.1.el6ディレクトリが作成され、その配下にカーネルのソースコード類が配置されています。

# cd linux-2.6.32-279.22.1.el6
# ls
COPYING        Makefile         block     include   lib      security
CREDITS        Makefile.common  crypto    init      mm       sound
Documentation  README           drivers   ipc       net      tools
Kbuild         REPORTING-BUGS   firmware  kabitool  samples  usr
MAINTAINERS    arch             fs        kernel    scripts  virt

これでCentOS 6.3のソースコードの取得ができました。
私はApacheのドキュメントルート以下のディレクトリにシンボリックリンクを張って、httpでWEB上から参照できるようにしています。

おわりに

カーネルのソースコードを解読するのは今の自分にかなりハードルが高いですが、OSの仕組みを知る上ではカーネルの仕組みを理解するのは大事なことだと思いますので、少しずつ目を通して理解を深めていきたいと思います。

0 Comments:

コメントを投稿