仮想化技術の大本命「Xen」を使ってみよう
 〜 Xen対応カスタムカーネル構築編 〜

みやもとくにお<wakatono@todo.gr.jp>
2005/4/5

Xen対応カーネルの手動作成

 Xen対応カーネルの簡単な作成方法を紹介しました。ここでは、各手順を手動で行う方法を紹介します。

 Xen対応カーネルを作成する際は、Xenのアーカイブに含まれるスクリプトを実行し、同じくアーカイブに含まれるパッチをカーネルに適用する必要があります。これが通常のカーネルコンパイルと大きく異なる点です。また、カーネル2.4と2.6では手順が若干異なり、カーネル2.4をコンパイルする際はさらにパッチを適用する必要があります。

 以下、カーネル2.4の場合と2.6の場合について説明します。共に、xen-2.0.4-src.tgz、linux-2.4.29.tar.bz2、linux-2.6.10.tar.bz2を適当なディレクトリに配置してあるものとします。

カーネル2.4のコンパイル

 まず、Xen対応のカーネル2.4をコンパイルしてみます。ソースのアーカイブを配置したディレクトリで、xen-2.0.4-src.tgzとlinux-2.4.29.tar.bz2を展開しておいてください。

 以下、3つのステップを実施します。

ソースコードへのパッチ適用

 Xenを制御できるカーネル(末尾に「xen0」という文字列が付いているカーネル)を作成するには、ケンブリッジ大学のサイトからebtablesというパッチ(http://www.cl.cam.ac.uk/netos/xen/downloads/ebtables-brnf-5_vs_2.4.27.diff.gz)をダウンロードし、カーネル2.4.29のソースコードに適用します。

$ wget http://www.cl.cam.ac.uk/netos/xen/downloads/ebtables-brnf-5_vs_2.4.27.diff.gz
$ gzip -dc ebtables-brnf-5_vs_2.4.27.diff.gz | (cd linux-2.4.29を展開したディレクトリ ; patch -p1)

xenアーキテクチャの追加

 前述したように、Xen対応カーネルはxenアーキテクチャでコンパイルされている必要があります。当然ながら、kernel.orgで配布されている標準カーネルはxenアーキテクチャに対応していません。そこで、xenアーキテクチャを追加します。具体的には、xen-2.0/linux-2.4.29-xen-sparseディレクトリにあるmkbuildtreeスクリプトを実行することで、これを実現します。

 mkbuildtreeは、カーネルソースコードにxenアーキテクチャを追加するスクリプトです。このスクリプトを実行すると、指定したカーネルソースツリーに対してlinux-2.*-xen-sparseディレクトリ下の内容のリンクを作成します。

 xen-2.0/linux-2.4.29-xen-sparseディレクトリに移動し、

$ ./mkbuildtree linux-2.4.29を展開したディレクトリ

を実行します。

 xenアーキテクチャが付加された様子を以下に示します。

$ ls linux-2.4.29/arch/
alpha  cris  ia64  mips    parisc  ppc64  s390x  sh64   sparc64  xen
arm    i386  m68k  mips64  ppc     s390   sh     sparc  x86_64

xenアーキテクチャ向けカーネルコンパイルの実行

 カーネルの設定ファイル(.configファイル)をxen-2.0のソースコードからコピーし、make oldconfig〜make bzImageコマンドを実行します。このとき、xenアーキテクチャ向けカーネルを作成するため、makeコマンドには必ず「ARCH=xen」を指定します。

$ cp xen-2.0/linux-2.4.29-xen-sparse/arch/xen/defconfig-xenU linux-2.4.29を展開したディレクトリ/.config
$ cd linux-2.4.29を展開したディレクトリ
$ make oldconfig ARCH=xen
$ make dep ARCH=xen
$ make bzImage ARCH=xen
$ make modules ARCH=xen

 以上で、Xenの仮想マシンモニタ上で動作するカーネルが作成されます。カーネルは、linux-2.4.29を展開したディレクトリ/arch/xen/bootにあるbzImageというファイルです。

 なお、インストールキット(xen-2.0.x-install.tgz)に含まれているカーネルの設定は、Xenのバイナリをインストールした後であれば/boot/config-2.4.29-xenUなどに記録されています。

カーネル2.6のコンパイル

 次に、Xen対応のカーネル2.6をコンパイルしてみます。ソースのアーカイブを配置したディレクトリで、xen-2.0.4-src.tgzとlinux-2.6.10.tar.bz2を展開しておいてください。

ソースコードへのパッチ適用

 Xenのソースコードを展開すると作成されるディレクトリ直下に、patchesディレクトリがあります。このpatchesにカーネル2.6.10向けのパッチがあれば、それを適用します。

 Xen 2.0.4には、patches/linux-2.6.9というディレクトリがありました。カーネル2.6.9専用に見えますが、カーネル2.6.10にも適用するべきパッチです()。

注:原稿執筆後にリリースされたXen 2.0.5(xen-2.0.5-src.tgz)では、patches/linux-2.6.9ではなく/patches/linux-2.6.10というディレクトリになっています。その中に収録されているパッチ自体はxen2.0.4-src.tgzのものと同一です。

 /patches/linux-2.6.xのパッチは、以下のように適用します(例では/patches/linux-2.6.9)。

$ ls ~/xen-2.0/patches/linux-2.6.9/
agpgart.patch drm.patch nettel.patch
$ patch -p1 < ~/xen-2.0/patches/linux-2.6.9/agpgart.patch
patching file drivers/char/agp/ali-agp.c
(中略)
patching file include/asm-i386/agp.h
$ patch -p1 < ~/xen-2.0/patches/linux-2.6.9/drm.patch
patching file drivers/char/drm/ati_pcigart.h
$ patch -p1 < ~/xen-2.0/patches/linux-2.6.9/nettel.patch
patching file drivers/mtd/maps/nettel.c
(以下略)

xenアーキテクチャの追加

 標準のカーネルソースにxenアーキテクチャを追加します。ここはカーネル2.4の場合と同様です。xen-2.0/linux-2.6.10-xen-sparseディレクトリに移動し、

$ ./mkbuildtree linux-2.6.10を展開したディレクトリ

を実行します。

xenアーキテクチャ向けカーネルコンパイルの実行

 以上の準備ができたら、カーネルのコンパイルです。ここもカーネル2.4の場合とほぼ同じです。

$ cp xen-2.0/linux-2.6.10-xen-sparse/arch/xen/configs/xenU_defconfig linux-2.6.10を展開したディレクトリ/.config
$ cd linux-2.6.10を展開したディレクトリ
$ make oldconfig ARCH=xen
$ make ARCH=xen
$ make modules ARCH=xen

 カーネルは、linux-2.6.10を展開したディレクトリ/arch/xen/bootにあるbzImageというファイルです。

Xen対応カスタムカーネルの作成

 次は、標準外のカーネルモジュールを組み込んでみましょう。

 今回は、FreeS/WAN 2.06のカーネルデーモンであるKLIPSをXen対応カーネル(カーネル2.4)に組み込んでみます。

FreeS/WAN 2.06の入手と展開

 FreeS/WAN 2.06は、以下のURLから入手可能です。これを使って、xenアーキテクチャに対応させたカーネル2.4.29を、さらにFreeS/WANに対応させます。

 ftp://ftp.xs4all.nl/pub/crypto/freeswan/freeswan-2.06.tar.gz

 freeswan-2.06.tar.gzを適当なディレクトリにダウンロードして展開すると、freeswan-2.06というディレクトリが作成されます。このディレクトリに移動し、以下のコマンドを実行します。

$ make kpatch KERNELSRC=linux-2.4.29を展開したディレクトリ

 例えば、/home/kernelというディレクトリで、

$ bzip2 -dc linux-2.4.29.tar.bz2 | (cd /home/kernel;tar xvf -)

というコマンドラインを実行すると/home/kernel/linux-2.4.29というディレクトリが生成されるので、

$ make kpatch KERNELSRC=/home/kernel/linux-2.4.29

というコマンドラインを実行することになります。

FreeS/WANのパッチを適用したカーネルの設定

 xenアーキテクチャを追加し、さらにFreeS/WANのパッチを適用したカーネル2.4.29のソースツリーの準備が整いました。

$ make menuconfig ARCH=xen

を実行することで、どのような設定になっているかを確認可能です。

画面1 Xen+FreeS/WANでのmake menuconfig

 このときに、libncurses5-devパッケージがインストールされていないとエラーになります。メニューが出てこない場合は、libncurses5-devパッケージをインストールしてからあらためて上記コマンドを実行してください。

 Loadable Kernel ModuleとしてFreeS/WAN関連のモジュールを作成することはもちろん可能です。ただし、モジュールを独立させた場合はブート後にモジュールを組み込むことになるため、若干の手間が掛かります。従って、今回はFreeS/WANの機能をカーネルの中に含めることにしました。コンパイル手順は前述したとおりなので、ここでは割愛します。

2/3

Index
仮想化技術の大本命「Xen」を使ってみよう
 〜 Xen対応カスタムカーネル構築編 〜
  Page 1
ドメインの自動生成
 仮想マシン定義ファイルの保存
 スタートアップスクリプトと停止スクリプトの設定
Xen対応カーネル作成の基本
 用意するもの
 簡単なXen対応カーネル作成方法
  Page 2
Xen対応カーネルの手動作成
 カーネル2.4のコンパイル
 カーネル2.6のコンパイル
Xen対応カスタムカーネルの作成
 FreeS/WAN 2.06の入手と展開
 FreeS/WANのパッチを適用したカーネルの設定
  Page 3
xmコマンドとxensv
 xm list
 xm create
 xm console
 xm save
 xm restore

Linux Square全記事インデックス


 Linux Squareフォーラム 仮想化技術関連記事
連載:実践! Xenで実現するサーバ統合
有力な仮想化技術として注目を集めるようになった「Xen」。このXenを活用してサーバ統合を実践していく手順を具体的に紹介します
特集:サーバの仮想化技術とビジネス展開の可能性
jailからUML/VMwareまで
1台のマシンで複数のサーバを動かす「仮想化技術」。VMwareやUMLの登場により、WebサイトだけでなくOS自体を仮想化できるようになった
特集:仮想化技術のアプローチと実装
VMwareから要注目技術Xenまで

1台のサーバで複数の仮想マシンを実行する仮想化技術は、空間コストを引き下げる可能性を持つ。最新の仮想化技術を概観してみよう
特集:仮想OS「User Mode Linux」活用法
技術解説からカーネルカスタマイズまで
Linux上で仮想的なLinuxを動かすUMLの仕組みからインストール/管理方法やIPv6などに対応させるカーネル構築までを徹底解説
特集:仮想化技術の大本命「Xen」を使ってみよう
インストール & Debian環境構築編

高いパフォーマンスで本命の1つとなった仮想マシンモニタ「Xen」。日本語による情報が少ないXenを、実際に動かしてみよう
特集:仮想化技術の大本命「Xen」を使ってみよう
Xen対応カスタムカーネル構築編

Xen環境およびその上で動作する仮想マシン用カーネルを自分で構築しよう。これにより、自由にカスタマイズしたカーネルを利用できる
特集:IPv6、UML、セキュリティ機能の統合
全貌を現したLinuxカーネル2.6[第4章]

今回は、これまでに紹介し切れなかった機能を一気に紹介する。これを読めば、カーネル2.6の正式リリースが楽しみになるだろう
Linux Squareプロダクトレビュー VMware Workstation 4
PC/AT互換機エミュレータとして不動の地位を築いたVMware。その新バージョンがリリースされた。新機能を早速試してみよう
古くて新しい「サーバ仮想化技術」の行方
サーバ仮想化を実現するための技術がソフトウェア、ハードウェアの両面で出そろってきた。ハイパーバイザーのさらなる高速化に向けた動きを紹介する
Linux Squareフォーラム全記事インデックス


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間