Debian GNU LinuxにおけるホストのIPv6化

0、はじめに

これは、joho03(OS:Debian GNU/Linux 3.0)をepnetfanのJGNプロジェクトにおいてdvtsサーバとして利用するため、IPv6とiLinkに対応させるべく、カーネル再構築を行ったときのドキュメントである。2003年8月8日に全作業を行った。


1、カーネルの再構築
2003年8月8日時点での最新版のカーネルは

linux-2.4.21.tar.bz2

であり、IPv6に対応させるためのパッチの最新版は

usagi-linux24-s20030804-2.4.21.diff.bz2

であったが、それらを用いるとカーネル作成時に

net/network.o: In function 'icpmv6_init':
net/network.o(.text.init+0×1800): undefined refarence to 'find_trnsform_by_name'
make[1]: *** [vmlinux] エラー 1
make[1]: Leaving directory '/usr/src/linux-2.4.21'
make: *** [stamp-build] エラー 2

と表示され、うまくいかなかったため、カーネルのヴァージョンをひとつ落として、作業を行った。


(1)WIDEのusagiプロジェクトからパッチをもらって来る

ftp://ftp.linux-ipv6.org/pub/usagi/snap/split

から、

usagi-linux24-s20030623-2.4.20.diff.bz2

をダウンロードする。(2003年8月8日時点の再新版)


(2)北大の地震火山センターのftpサーバからカーネルをダウンロードする。

ftp://ftp.eos.hokudai.ac.jp/pub/Linux/kernel/v2.4(地震火山センターのftpサーバ)

から、
linux-2.4.20.tar.bz2

をダウンロードする。


(3)ダウンロードしたカーネルを解凍する。

$ tar jxvf ~/linux-2.4.20.tar.bz2

(4)パッチはhomeに置かず、/usr/src/以下に置くのが作法であるのでusr/src/以下にファイルを移動させる。

(5)パッチを解凍させる。パッチは、bz2形式で圧縮されているので、

$ bunzip2 usagi-linux24-s20030623-2.4.20.diff.bz2

と入力する。すると、

usagi-linux24-s20030623-2.4.20.diff

というファイルに解凍される。

(6)パッチというものはlessで見ると

+++ (修正すべきファイル)
--- (修正された後のファイル)

と書かれた後にその修正すべき事柄が書かれている。ここに書かれた内容に

/usr/src/linux-2.4.20

以下のファイルを修正する必要がある。しかし、数が膨大であるため一つ一つ手作業でやると手間がかかるため、以下の事を行う。

まず、

# ln -s kernel-source2.4.20/ linux

としてシンボリックリンクを張る。

次に、

/usr/src/linux

に移動し、そのディレクトリ内で、

# patch -p1 < ../usagi-linux24-s20030623-2.4.20.diff

と入力し、エンターキーを押す。-p1というオプションはパッチに書かれた修正すべきファイルのパスの1番上を無視しますという意味である。すると、

patching file ‥‥‥

という表示がかなりの数、表示される。これは‥‥‥というファイルに対してパッチに書かれた修正を行いました、という意味である。

エラーが出なければ、全てパッチを当てる作業が成功した事を意味する。

(7)xconfigを実行してカーネルを再構築するがまず、Tcl/Tkの開発パッケージが必要なので

# apt-get install tk8.3-dev

と入力し、エンターキーを押す。その際、依存パッケージである

tcl8.3
tcl8.3-dev
tk8.3
xlibs-dev

の4つのパッケージもインストールする。

2、xconfig上で設定する事

(1)まず、Code maturity level optionsで、

Prompt for deveropment and/or incomplete code/drivers

y(有効)にする必要がある。こうしないと、開発途上のカーネルは設定する事ができない。

(2)xconfigでの設定

1、IEEE1394(FireWire)support(EXPERIMENTAL)で行う事

IEEE1394supportをm(モジュール化)にする。こうしておくとy(有効)と異なり必要な時にだけサポートするようになる。

すると、細かな設定が行えるようになるので

OHCI-1394 support → m
OHCI-1394 Video support → m
SBP-2 support (Harddisk etc.) → m
Enable Phys DMA support for SBP2 (Debug) → y
Ethernet over 1394 → m
OHCI-DV I/O support → m
Raw IEEE 1394 I/O support → m
IEC61883-1 Plug support → m
IEC61883-6 (Audio transmission)support → m
Excessive debugging output → y

と設定する。

2、Networking optionsで行う事

まず、The IPv6 protocol(EXPERIMENTAL)をyに設定する。すると、IPv6に関する細かな設定が行えるようになるので

IPv6:drop packets with fake IPv4-mapped address(es) → y
IPv6:Restrict"double binding"only for same user → y
IPv6:anycast support → y
IPv6:enable Node information Queries → y
IPv6:default router preference → y
IPv6:Route Information Option Support → y

と設定する。

3、processor featuresで行う事

pentium4を選択する。

4、File Systemsで行う事

Reiserfs support → m
ext3 journaring file system support → m
DOS FAT fs support → m
MSDOS fs support → m
VFAT(Windows-95)fs support → m

と設定する。その後、設定を保存してexit。

(3)カーネルを再構築する方法には、

(壱)一般的なカーネルをdebianパッケージにしてからインストールする方法。

(弐)全てのディストリビューションに通用する一般的なカーネルをダウンロードして、インストールする方法。

の2通りがある。今回は(壱)の方法を用いた。

(壱)用いているOSがdebianであるため、インストールしているカーネル、パッケージなどはdevパッケージで統一させておいた方が、後々、再設定するのが楽であるのと、整っているという理由で、今回はこちらの方法を採用する。

まず、joho3ではmake-kpkgコマンドが使えないため、このコマンドが使えるようにする必要がある。make-kpkgコマンドに関係のあるパッケージを調べるには、

# apt-cache search make-kpkg

と入力する。すると、関係のあるパッケージの一覧と簡単な解説が表示されるので、その中から今、必要としているパッケージをインストールする。今回は、

debian-kernel

というパッケージをダウンロードした。

カーネルの再構築を行う。まず、/usr/src/linux中で、カーネルソース中の相互依存ツリーを構築するために、

# make dep

と入力する。次に、以前のカーネル構築時から存在していて、現在のカーネルでは必要の無いファイルを削除するために

# make-kpkg clean

と入力する。そして、カーネルイメージを作成するために

# make-kpkg --revision=20030808 kernel_image

と入力する。するとディレクトリ/usr/src以下

kernel-image-2.4.20_20030808_i386.deb

というカーネルイメージが作成されるので、

# dpkg -i /usr/src/kernel-image-2.4.20_20030808_i386.deb

と入力して、インストールする。インストールの途中でいくつか質問があるが、全てデフォルトでよく、具体的には次のように答えた。

Would you like to create a boot floppy now? [No]
You already have a LILO configuration in /etc/lilo.conf
Install a boot block using the existing /etc/lilo.conf? [Yes]

すると、次のように表示され、インストールが完了する。

Testing lilo.conf ...
Testing successful.
Installing the partition boot sector...
Installation successful.

3、確認

再構築後は、設定がきちんとできているかどうかを確認する必要がある。ゆえに、まず

# reboot

として、再起動する。再起動後に、

# dmesg | less

と入力する。すると、現在joho03において使用可能なデバイスの一覧が表示されるのでIPv6に対応していることを確認する。

また、
$ /sbin/ifconfig

と入力すると、joho03のネットワーク情報が表示されるが、そこに新たにIPv6のIPアドレス、ゲートウェイアドレス等が加わっていることを確認する。(再構築前はIPv4だけしか表示されていなかった。)


4、発生した問題

1, (9)まで作業を行ったが、カーネルが作成されていなかった。

対処法)xconfingによるカーネルの設定においてnetworkの項目のRoute Information Option Supportの項目がデフォルトではyになっていたがそれを故意にnにしていた。故に、この項目をyに設定しなおした。

2, 前述したように、karnel-2.4.21にて作業を行うとエラーが出て、きちんとカーネルが作成されなかった。

対処法)カーネルのバージョンを一つ落して(2.4.21ではなく2.4.20を使用した)再構築を試みた。


参考文献

・北海道大学地球惑星科学専攻サーバ構築ドキュメント(Mailサーバの基本部分構築ガイド)
http://ep.sci.hokudai.ac.jp/~epmail/dvlop/basic/index.html

・@ITのホームページ
http://211.4.250.170/index.html

・japan.internet.comのホームページ
http://japan.internet.com/linuxtutorial/20001111/1.html