dshimizu/blog/alpha

とりとめのないITブログ

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の仕組みを知る上ではカーネルの仕組みを理解するのは大事なことだと思いますので、少しずつ目を通して理解を深めていきたいと思います。