Personal tools
You are here: Home ブログ matsuyama Gentoo Linux 2006.0 + Xen 3.0インストールメモ - Domain Uのインストール
Document Actions

Gentoo Linux 2006.0 + Xen 3.0インストールメモ - Domain Uのインストール

かなり長い間放置していましたがDomain Uのインストールのメモ。とはいってもDomain UはDomain 0ほど問題はないので基本的にGentoo-ortage wikiにのっている方法でできます。以下はGentoo-portage wikiの抜粋日本語訳だと思ってください。

Domain Uのカーネルを作成

Processor type and features  --->
  [*] Enable Xen compatible kernel

XEN --->                                     
  [ ] Privileged Guest (domain 0)
  [ ]  Block-device backend driver
  [ ]  Network-device backend driver
  [*] Block-device frontend driver
  [*] Network-device frontend driver
  [ ]   Piplined transmitter (DANGEROUS)
  [*] Scrub memory before freeing it to Xen
      Processor Type (X86)  --->
% make
% cp vmlinuz /boot/vmlinuz-xenU-2.6.16.26-xen
% cp .config /boot/vmlinuz-xenU-2.6.16.26-xen-config

Domain Uの作成

いろいろ方法があります。ビルド済みOSイメージが http://jailtime.org/ にたくさんあるので手軽にDomain Uを作成するにはもってこいでしょう。詳しくは http://gentoo-wiki.com/Xen を参照してください。他にも app-emulation/domi というのを使って簡単にDomain Uが作れるらしいです。これもGentoo-portage wikiを参照してください。今回はおそらく一番面倒くさい quickpkg を使った Gentoo Domain U の作成の方法を紹介します。これもGentoo-portage wikiにのっているので詳細はそちらを。

まずはequeryを使うためにapp-portage/gentoolkitをインストールしておきます。

% emerge app-portage/gentoolkit

そして現在のOSつまりDomain 0からバイナリパッケージを作ります。これをDomain 0につっこみますので出来上がるDomain UはDomain 0と事実同じ構成のシステムになります。

% for PKG in $(equery -q list | cut -d ' ' -f 3)
do
  quickpkg =$PKG
done

次は実際のOSイメージを置くストレージを確保しなくてはいけません。パフォーマンス的に言えばもちろん物理パーティションを確保してそこに置くのがベストなのですが、それはそれでいろいろと制限がでてきたりします。せっかく仮想化するのですからストレージも完全に仮想化するべきでしょう。ということでloopbackファイルを使って仮想ストレージを作ることにします。loopbackファイルにしておけば、例えばcpでDomain Uを簡単にコピーしたりいろいろなハックがしたりできちゃいます。欠点としてはloopbackファイルは事実二回の書き込みを要求するので物理パーティションに置くのと比べてパフォーマンスが劣ります。ただ、パフォーマンス低下は80%から90%で済むようです(もちろん使用するファイルシステムによりますが)。もといHDDへのアクセスは基本的に遅いものと認識されているので、パフォーマンスが低下したらかといって何か問題がでてくるということもまずないでしょう。

例として30GBのloopbackファイルをext3ファイルシステムとして作ります。

% dd if=/dev/zero of=/var/xen/domU-gentoo bs=1M seek=30719 count=1
% mke2fs -j -F /var/xen/domU-gentoo

では実際にDomain Uのシステムを構築していきましょう。

まずはloopbackファイルをマウントします。

% mkdir -p /mnt/gentoo
% mount -o loop /var/xen/domU-gentoo /mnt/gentoo

次にswapファイルを作ります。

% dd if=/dev/zero of=/mnt/gentoo/swap bs=1M count=1024
% mkswap /mnt/gentoo/swap

stage3をダウンロードしてきて展開します。

% tar xvjpf stage3-x86-2006.0.tar.bz2 -C /mnt/gentoo

procとdevをマウントします。

% mount -t proc none /mnt/gentoo/proc
% mount -o bind /dev /mnt/gentoo/dev

Domain 0のシステムファイルを可能かかぎりコピーしていきます。

% cp -av /usr/portage/ /mnt/gentoo/usr/
% cp /etc/make.conf /mnt/gentoo/etc/
% cp -R /etc/portage /mnt/gentoo/etc/
% cp /etc/resolve.conf /mnt/gentoo/etc/

先に作っておいたバイナリパッケージをDomain Uにインストールします。

% ROOT=/mnt/gentoo CONFIG_PROTECT=-/etc FEATURES=-collision-protect emerge --usepkg --emptytree system

Domain Uの環境に入って環境を整えます(初期状態はかなり不安定です)。

% chroot /mnt/gentoo /bin/bash
% gcc-config 1
% env-update
% source /etc/profile
% nano /etc/make.conf /etc/conf.d/hostname /etc/conf.d/domainname \
  /etc/conf.d/net /etc/conf.d/clock /etc/hosts /etc/rc.conf # etc
% emerge --usepkg app-poratege/gentoolkit
% revdep-rebuild --usepkg
% perl-cleaner all --usepkg
% python-updater

タイムゾーンがGMTになっていると思うのでそれも修正します。時間がおかしければついでに修正してください。

% cp /usr/share/zoneinfo/Japan /etc/localtime
% date ...
% hwclock --systohc

システムツールをインストールしておきましょう。

% emerge --usepkg net-misc/dhcp

必須ではありませんが一応emerge --syncしておきましょう。

% emerge --sync

最後にパスワードを設定してDomain Uの環境を抜けます。

% passwd
% exit

これでDomain Uの作成は終わりました。次はXenから起動できるように設定を書きましょう。

/etc/xen/gentoo:

# general
name = "gentoo";
memory = 256;

# booting
kernel = "/boot/vmlinuz-xenU-2.6.16.26-xen";

# virtual harddisk
disk = [ "file:/var/xen/donU-gentoo,xvda,w" ];
root = "/dev/xvda ro";

# virtual network
vif = [ "" ];
dhcp = "dhcp";

Domain Uの/etc/fstabを開いてswapfileとxvda(Xen block device)を使えるようにしましょう。

/mnt/gentoo/etc/fstab:

...
/dev/xvda       /               ext3            noatime         0 1
/swap           none            swap            sw              0 0
...

これでDomain Uを起動できます。早速起動してみましょう。

% umount /mnt/gentoo
% xm create gentoo -c

無事に動けばそのままDomain Uのコンソールに繋がるはずです。Domain 0に戻るにはCtrl + ]を押してください。再びそのDomain Uに接続するには、

% xm list
Name                              ID Mem(MiB) VCPUs State  Time(s)
Domain-0                           0      768     1 r-----  1121.4
gentoo                             1      256     1 ------     6.2

で接続したいDomain UのIDを確認して、

% xm console 1

とコマンドしてください。以下にxmの簡単な使いかたを紹介します。詳しくはman xmを。

console domain-id:
domain-idのDomain Uのコンソールに接続します。
create [-c] configfile:
configfile(/etc/xen以下)のDomain Uを作成します。-cを指定しておけば起動次第ただちにそのコンソールに接続します。
destroy domain-id:
domain-idのDomain Uを強制的に終了します。
list:
Domain情報を出力します。
mem-max domain-id mem:
domain-idのDomain Uのメモリ最大量をmem MBに設定します。
mem-set domain-id mem:
domain-idのDomain Uのメモリ使用量をmem MBに設定します。通常はmem-maxを使います。
pause domain-id:
domain-idのDomain Uを一時停止します。
unpause domain-id:
pauseされているdomain-idのDomain Uを開始させます。
reboot domain-id:
domain-idのDomain Uを再起動します。Domain Uにrebootコマンドを出すだけです。
save domain-id state-file:
state-fileにdomain-idのDomain Uの情報を保存して終了します。
restore state-file:
saveで保存したstate-fileを用いてそのDomain Uを復元して実行開始します。
shutdown domain-id:
domain-idのDomain Uを終了します。

他にも以下のようなコマンドがあります。

dmesg:
Xenのdmesgを出力します。
info:
Xenの情報を出力します。
log:
Xenのログを出力します。
top:
Xen専用のtopです。

Domain UをVNCで操作する

さてこれで一応Domain Uを使うことができるようになりましたが、Xenの性質上、Domain UでXを起動できないのでデスクトップマシンとしては使いものになりません(そもそもXenでそういう使いかたをすること自体がおかしいのですが)。かろうじてDomain 0上ではXを起動できますのでDomain UにVNCサーバーをいれてDomain 0からVNCクライアントを使ってDomain Uを操作することにします。なお(これは予想ですが)Domain 0は極力ミニマムにしておくことがXenの秘訣で、そんな神聖な場所にXをいれるなんていうのは半分狂気の沙汰です。なので正しくXenを維持したいのであればDomain UにVNCサーバーを入れるだけにとどめて、他のマシンからそのVNCサーバーにアクセスするようにしましょう。ただVNCクライアントでの作業はかなりイライラしますので注意してください。ちなみに僕はDomain 0で全て作業しています(Xenいらないじゃん)。ではVNCの環境を作りましょう。

まずはDomain Uの方にVNCサーバーを入れます。

% xm console 1
% echo 'net-misc/vnc server' >> /etc/portage/package.use
% emerge net-misc/vnc

次に起動するX Window Managerを~/.vnc/xstartupに書きます。X Window Managerはあらかじめインストールしておいてください。ちなみに僕はxfce4を使っています。

~/.vnc/xstartup:

#!/bin/sh
exec xfce4-session

パスワードを設定します。

% vncpasswd

そしてvncserverを起動します。

% vncserer :1

なおDomain U起動時にvncserverを起動させたい場合は/etc/conf.d/local.startにvncserver :1を記述しておけばよいでしょう。

さてDomain UでVNCを起動できましたのでクライアントの設定をしましょう。上記したように基本的には他のマシンからVNCでアクセスすべきなのですが、お金ないのでDomain 0からアクセスします。以下はDomain 0にXをインストールした前提で話をすすめます。

% emerge vnc
% vncviewer domU-host:1

これで一応はDomain Uに仮想的なXを置くことができました。使い勝手はかなり微妙ですが、我慢すれば何とかなるでしょう。Domain 0/UにVideoデバイスへのback/frontドライバが対応されればこのような苦労をすることがないのですが、それがそもそも可能なのかよくわかりませんし、可能であってもXenの思想に反しそうです。Xenを(マニアックな)デスクトップマシンとして使うにはまだまだ発展途上のようです。次回(があれば)はGentoo Domain UにとどまらずFedoraやBSDをいれてみたいと思います。

Category(s)
linux
The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/matsuyama/Gentoo_Linux_2006_0_and_Xen_3_0_Installing_memo_Domain_U/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.