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

Xen環境およびその上で動作する仮想マシン用カーネルを自分で構築しよう。これにより、自由にカスタマイズしたカーネルを利用できるようになる。(編集部)

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

ドメインの自動生成

 インストール & Debian環境構築編で作成したドメインは、コンピュータを再起動すると跡形もなく消去されます。そこで、コンピュータの起動時に仮想マシンも自動起動する方法を紹介します。

仮想マシン定義ファイルの保存

 /etc/xen/auto配下に、仮想マシンの定義ファイルを置きます。

$ ls -l /etc/xen/auto/
total 8
-rw-r--r-- 1 root root 2904 Feb 23 23:18 vm0.conf
-rw-r--r-- 1 root root 2906 Feb 23 23:18 vm01.conf

 こうすることで、自動的にxm createが実行されます。

スタートアップスクリプトと停止スクリプトの設定

 /etc/init.d/xendおよび/etc/init.d/xendomainsをスタートアップスクリプト(ファイル名が「S」で始まるスクリプト)、/etc/init.d/xendomainsおよび/etc/init.d/xendを停止スクリプト(ファイル名が「K」で始まるスクリプト)にします。Debian GNU/Linux(sarge)では、update-rc.dコマンドで設定可能です。

 このとき、2点注意が必要です。それは、

  • xend→xendomainsの順序で起動
  • xendomains→xendの順序で終了

という点です。

 xendomainsは、xendの機能を用いて仮想マシンを起動したり終了したりする関係上、起動/終了の時点でxendが使える必要があります。update-rc.dコマンドの場合は、

# update-rc.d xend start 20 2 3 4 5 . stop 20 0 1 6 .
# update-rc.d xendomains start 21 2 3 4 5 . stop 19 0 1 6 .

と実行することで、この起動/終了順を実現可能です。この2行のコマンドでは、正確には以下のことを行っています。

  • 1行目
    xendをランレベル2、3、4、5にスタートアップスクリプトとして登録。同時に、ランレベル0、1、6に停止スクリプトとして登録する。この際、両方に番号として「20」を付与(S20xendおよびK20xendとなる)。

    つまり、/etc/rc2.d、/etc/rc3.d、/etc/rc4.d、/etc/rc5.dの4つのディレクトリにS20xendという名前のシンボリックリンク、/etc/rc0.d、/etc/rc1.d、  /etc/rc6.dの3つのディレクトリにK20xendという名前のシンボリックリンクを作成する。リンクの参照先は/etc/init.d/xend。


  • 2行目
    xendomainsをランレベル2、3、4、5にスタートアップスクリプトとして登録。同時に、ランレベル0、1、6に停止スクリプトとして登録する。この際、番号としてスタートアップには「21」、停止には「19」を付与(S21xendomainsおよびK19xendomainsとなる)。

    つまり、/etc/rc2.d、/etc/rc3.d、/etc/rc4.d、/etc/rc5.dの4つのディレクトリにS21xendomainsという名前のシンボリックリンク、/etc/rc0.d、/etc/rc1.d、/etc/rc6.dの3つのディレクトリにK19xendomainsという名前のシンボリックリンクを作成する。リンクの参照先は/etc/init.d/xendomains。

 ここまでを実施することで、自動起動〜自動終了ができるようになります。

Xen対応カーネル作成の基本

 インストール & Debian環境構築編で、Xenバイナリを使った複数ドメインの作成まで可能になりました。普通に使うだけであれば、ここまでの作業で十分です。しかし、Xen上で独自のカーネルを動かしたいという人もいることでしょう。そこで、Xen上で動作するカーネルを自分で作成してみましょう。

 なお、今回はすべて一般ユーザー権限で作業可能です。

用意するもの

 Xen対応カーネルをコンパイルするには、以下のものが必要です。

  普通にカーネルを再構築できるツール類
    GCCやbzip2、libncurses5-devなど。
  Xenのソースコード
    Xenは、仮想マシンモニタのソースコードに加え、その上で動作するOSに対するパッチやxenアーキテクチャ(編注)に対応させるソースコードも同梱している。
  Linuxカーネルのソースコード
    Linuxカーネル2.4.29(Linux-2.4.29)もしくは2.6.10(Linux-2.6.10)のソースコード。
  そのほかのパッチ
    コンパイル時にパッチをダウンロードすることがある。

編注:xenアーキテクチャは、Xen上で動かすための仮想的なCPU名である。つまり、i386やppc、sparcといったアーキテクチャと同義であり、Xen対応カーネルはxenアーキテクチャでコンパイルする。

 xen-2.0直下には、

  • linux-2.4.29-xen-sparse(Linuxカーネル2.4.29用)
  • linux-2.6.10-xen-sparse(Linuxカーネル2.6.10用)
  • netbsd-2.0-xen-sparse(NetBSD 2.0用)

という3つのディレクトリがあり、この中にそれぞれのOSやバージョンに対応したxenアーキテクチャ部分のソースコードとスクリプト類が含まれています。xen-2.0直下のpatchesディレクトリにはOSのバージョンに対応したディレクトリが作成され、xenアーキテクチャに依存しないソースコードに対するパッチ類が置かれます。

 カーネルに標準では含まれないモジュールを組み込む場合は、そのカーネルモジュールのソースコードも別途用意する必要があります。

簡単なXen対応カーネル作成方法

 Xen対応カーネルを作成する方法は、大きく分けて3通りあります。

  1. Xenをコンパイルする作業の延長で自動的にコンパイルさせる
  2. Xenのソースコードツリーの配下でカーネルコンパイルを行う
  3. xenアーキテクチャ依存のコード追加や必要なパッチ適用を行い、コンパイルする

 アーキテクチャ依存のコード追加やパッチ適用を自分で実施すれば(方法3)、カーネルソースツリーの配置やカーネルモジュールの導入といったことも自由に行えます。この方法は後述することにして、ここでは簡単な方法2で大まかな流れを説明します。

 まず、xen-2.0.4-src.tgz、linux-2.4.29.tar.bz2、linux-2.6.10.tar.bz2をダウンロードして同じディレクトリに配置し()、Xenのアーカイブのみを展開します。該当バージョンのカーネルソースがすでにあるなら、あらためてダウンロードする必要はありません。また、各アーカイブを配置する場所はどこでも構いませんが、ハードディスク容量に余裕があることを確認しておいてください。

注:カーネルソースを用意しておかなくても、Xenのコンパイル時にkernel.orgから自動的にダウンロードします。作業をスムーズに進めるため、あらかじめ用意しておいた方がよいでしょう。

$ wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.29.tar.bz2
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.10.tar.bz2
$ wget http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/xen-2.0.4-src.tgz
$ gzip -dc xen-2.0.4-src.tgz | tar xvf -

 以上でコンパイルの準備が整いました。カーネル2.6は、

$ make linux26

カーネル2.4は、

$ make linux24

と実行してコンパイルします。カーネル2.4の場合は、コンパイル時にパッチのダウンロードを行わなければならないので、インターネットに接続できる状態になっている必要があります。また、ダウンロードにはwgetを利用するため、wgetコマンドが使えるようになっていなければなりません。

 コンパイルが正常に終わると、xen-2.0/dist/install/boot下にカーネル、xen-2.0/dist/install/lib下にカーネルモジュールが作成されます。

インストール編へ
1/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 記事ランキング

本日 月間