2008/10/22

Xenインストール1: Xenカーネルコンパイル(追記:11/14)

Fedoraのインストールと設定が終わったので,Xenのインストール開始 .

[Xenソースのダウンロード]
http://xenbits.xensource.com/
http://www.xen.org/products/xen_source.html
から,最新版のXen (現時点では3.4.2)をダウンロードする.
http://bits.xensource.com/oss-xen/release/3.4.2/xen-3.4.2.tar.gz

# wget [xen source url]
# tar xvzf xen-[version].tar.gz

[Xenのコンパイルの準備]
解凍した xen-[version]/tools/check フォルダ内で

# ./chk build
# ./chk install

を実行すると不足しているパッケージを確認できる.
不足している場合はyumでinstall or updateする.

[不足パッケージ]
エラーメッセージだけだと何のパッケージが足りてないのかわかりづらいのでメモ.
./chk build でx11_develがNG -> libX11-devel が不足
./chk install でbrctlがNG -> bridge-utils が不足
make時に libgcrypt-devel が不足
tools のmake時に dv86 が不足

[mercurialのインストール]
バージョン管理ツールがないとLinuxカーネルソースの取得ができないようなので,mercurialというツールをインストールする.しかし,デフォルトのレポジトリではmercuriusはインストールできないそうなのでRPMFORGEというレポジトリを登録しまっす.
これを登録するとyumでインストールできるパッケージが増えるらしい.

http://dag.wieers.com/rpm/packages/rpmforge-release/
から対応するLinuxカーネルのrpm
(rpmforge-release-0.3.6-1.fc3.rf.[i386 or x86_64].rpm)をDL.
Fedoraは3までしか無かったけどインストール出来たのでいっか.
http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
もダウンロードして

# rpm --import RPM-GPG-KEY.dag.txt
# rpm -Uvh rpmforge-release-[version].rpm

これでRPMFORGEがyumで使えるようになる.ただし,常にこれを有効にするとパッケージが出すぎて邪魔なので,使いたいときだけ有効にできるようにする.
/etc/yum.repos.d/rpmforge.repo
enabled = 1enabled = 0にする.

# perl -p -i -e 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo

RPMFORGEを有効にしたいときは,yumのオプションに
--enablerepo=rpmforge
をくっつける.

前準備が終わったので,RPMFORGEを有効にしてmercurialをインストールする.

# yum --enablerepo=rpmforge install mercurial -y


[mercurialを使ってカーネルソースを取得]
Xenのソースを展開したディレクトリの親ディレクトリでやるといいそうな.

hg clone http://xenbits.xensource.com/linux-2.6.18-xen.hg


[Xenのmake]
デフォルトのまま make world を実行するとエラーが出る(インクルードファイルへのパスが通っていない) ので,Xenソースディレクトリ直下にあるConfig.mkに
EXTRA_PREFIX ?= /usr/lib/gcc/i386-redhat-linux/4.3.0
を追加(gcc/以下は環境によって異なる),これを追加することで,その下の

ifneq ($(EXTRA_PREFIX),)
EXTRA_INCLUDES += $(EXTRA_PREFIX)/include
EXTRA_LIB += $(EXTRA_PREFIX)/$(LIBLEAFDIR)
endif
の部分でEXTRA_PREFIX内のincludeファイルを読み込んでくれる.

# make world
(PAEを有効にする場合は,オプションとしてXEN_TARGET_X86_PAE=yを指定する

makeが成功すると,Xenバイナリ(xen.gz)とdomain 0,domain Uのどちらでも使えるLinuxカーネルとモジュール(vmlinuz-2.6.xx-xen)が生成される.

"linux/compiler.hが見つかりません"
というエラーが出たものの,これは無視していいらしいので先へ.
Config.mkに下を足しておくとエラーがでなくなる?
EXTRA_INCLUDES +=
/usr/src/kernels/2.6.25-14.fc9.i686/include
※入れたら別のところで怒られたのでこれは入れない方がよさげ

# make install
生成したXenバイナリとLinuxカーネルを /boot にインストールする.

※補足
Config.mkのDESTDIRを書き換えると,出力先を変更できる.
makeコマンドはデフォルトだとvmlinuz-2.6.xx-xenという名前でビルドする.
これは,make時にKERNELS=kernelnameを指定することで変更できる.
例えば,
KERNELS="linux-2.6-xen0 linux-2.6-xenU"
を指定すると,domain 0とdomain Uに,それぞれ必要なモジュールだけを含んだ
カーネルを二つ生成する.
# make KERNELS="linux-2.6-xen0 linux-2.6-xenU" world
# make KERNELS="linux-2.6-xen0 linux-2.6-xenU" install

worldを付けるとエラーになる?

※捕捉2
KERNELSでコンパイルするカーネルを指定する代わりに
xen3.3.0/build-linux-2.6.18-xen*_x86_32
ディレクトリでmakeしてもいい.更新する場合は
# make clean
# make && make modules
# make install && make modules_install
モジュールの依存関係とinitrdの更新も忘れずに
# depmod 2.6.18.8-xen0
# mkinitrd (Xenインストール2を参照)

※補足3
.configファイルはドメイン0はデフォルトでも大丈夫だった
ドメインUのときは,色々デバイスが足りてなかったっぽい?
ドメイン0のコンフィグファイルをコピーして使った方が安全?
# cd /***/xen3.3.0/build-linux-2.6.18-xenU_x86_32
# /bin/cp -av /***/xen3.3.0/build-linux-2.6.18-xen0_x86_32 ./
# make oldconfig
# make menuconfig
Xen --->
[ ] Privileged Guest (domain 0)
にする.


とりあえずXenのコンパイルはここまで.
次はブートの設定とかをやります.


【参考】
Xen 3.3.0 README
- 所々嘘が書かれてたりするので気をつけましょう

Xen環境作成メモ(その1)

Xen特集 Xenのインストール VA Linux Systems Japan
- Xenのコンパイルオプションの一覧

0 件のコメント: