トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

NetBSDでXenXen動くよ

KOF2010OSC 2011 Kansai@KyotoK*BUGブースで展示しました。(これは、OSCのもの。)

はじめに

NetBSD/xenについて、NetBSD/amd64でDom0、NetBSDやそれ以外のOSをDomU、を試してみた、めも。

NetBSDでXenを、実際に試そうにも、本家のHowtoはびみょーに古くて、いまいちだったり、ちょっとLinuxを試したいなーとかって、VMを起動できたらいいのに、Linuxのインストール方法が、ほんの少ししか書かれていかなかったりする。

ちょっとくやしかったので、試行錯誤の結果をまとめてみた。

まだ書きかけ(のつもり)。 もうだいぶ古いので、新たに書き直すことにします。

リンク集

Dom0の準備

NetBSD/amd64 5.1_RC4を準備。Xenは3.3.2(sysutils/xen*33)を使うことに。できるだけ、準仮想化で動かす。

その後、Dom0を起動するところまでは、上の先達の情報と同じ内容なので、割愛。

各DomUのネットワークは、ブリッジで接続することにする。

メモリは4Gしかないので、上で動かすOSは、32bitなものにする。

なお、NetBSDのDom0は、マルチコアに対応していない対応作業する人を募集していた。

NetBSD/amd64

 インストールとその後

最初は手始めに、NetBSD/amd64のDomUから。上の先達の情報と同じ内容なので、詳細は割愛。

使ったインストール用DomU設定ファイル。この例ではiso imageを用意しているけど、別になくてもよい。(ネットワークからインストールできる。)

 kernel = "/path/to/netbsd-INSTALL_XEN3_DOMU.gz"
 memory = 256
 name = "netbsd64"
 vif = [ 'bridge=bridge0' ]
 disk = [ 'file:/path/to/netbsd64,0x1,w' ]
 disk += [ 'file:/path/to/amd64cd.iso,0x2,r' ]
 on_reboot = 'destroy'
 on_crash = 'destroy'
 on_poweroff = 'destroy'

このファイルで、xm create -c すると、

無事起動した。そのあと、

いつもの、インストーラがみえた。

このあとは、いつものとおり。

インストールが終わったら、通常用のDomU設定ファイルと入れ替える。(別にrootは書かなくても動くけど、書いておく。)

 kernel = "/path/to/netbsd-XEN3_DOMU.gz"
 memory = 256
 name = "netbsd64"
 vif = [ 'bridge=bridge0' ]
 disk = [ 'file:/path/to/netbsd64,0x1,w' ]
 root = "xbd0"
 on_reboot = 'reboot'
 on_crash = 'reboot'
 on_poweroff = 'destroy'

起動すると、いたって変わりのないNetBSDのloginプロンプト。

あとは、Howtoをみてこまごま設定。

 注意点

ディスクの名前

インストールディスクが、設定ファイルのdiskの項の順番どおり、xbd0, xbd1, ... となる。(上の例でいけば、xbd1 がiso imageになるので、インストールをCD-ROMからを選ぶとき、デバイス名を、xbd1aにしないといけないということ。)

ファイルじゃなくてパーティション/ディスクがいい

diskの先を、ファイルではなく、パーティションやディスクにしたい場合は、

 disk = [ 'phy:/dev/wd1e,0x1,w' ]

などと書ける。あくまでも、Dom0(つまりNetBSD)からみた時の名前。

pygrubは?

DomU側に、grubをインストールしたら動くのかもしれないけれど、試していない。(/usr/pkg/lib/python2.X/site-packages/xen/xend/XendBootloader.py 等をみる限りでは、NetBSDでも使えそうなんだけど、よくわからない。)

NetBSD/i386

次に、NetBSD/i386。上の内容と同じ内容なので、割愛。カーネルはPAEカーネルを使うこと。

起動したところ。

あとは、Howtoをみてこまごま設定。

CentOS

 インストール

いよいよ、Linuxをインストール。まずは、RHELクローンのCentOSから。諸般の事情により、5.3をインストールする。(5.3のとあることを調べたかったのだ。)

まず、CentOS Wikiの"Creating and installing a CentOS 5 domU instance"をざっとみて、流儀を確認する。

最初に、5.3のiso imageをダウンロードしてくる。"1of6"だけでよい。(古いのは http://vault.centos.org/ にしかないんだねえ。)

iso imageをとってくるには大きすぎる、なんてひとは、インストール用のkernelとramdiskだけとってこればよい。ぼくみたいに古いものがいい人は、http://vault.centos.org/ 以下から、最新(この文章を書いた時だと5.5)がよければ、先のWiki内にリンクがある。iso imageをとってきた人は、その中にある(images/xen以下)ので、取り出せばよい。

使ったインストール用DomU設定ファイル。

 kernel = "/path/to/vmlinuz-xen-install"
 ramdisk = "/path/to/initrd-xen-install"
 name = "centos32"
 memory = 256
 disk = [ 'file:/path/to/centos32,xvda,w' ]
 # disk += [ 'file:/path/to/CentOS-5.3-i386-bin-1of6.iso,xvdb,r' ]
 vif = [ 'bridge=bridge0' ]
 on_reboot = 'destroy'
 on_crash = 'destroy'
 on_poweroff = 'destroy'

Howto等では、デバイス名のところを、0x301 とか、hda1 などと書かれているけど、CentOS 5ではインストーラ上でエラーがでまくる。先のWikiをみると、xvdaなどと書くようで、これだとちゃんと動く。

iso imageのところをコメントアウトしているけど、インストーラからどうやっても見えなかったのだ。しょうがないので、Dom0にhttpdを起動して、それ経由でインストールすることにした。幸いなことに、NetBSD 5.0から、OS付属の小さなhttpdがある。まず、iso imageの中身を、httpdから見えるようにする。

 # vnconfig vnd3 /path/to/CentOS-5.3-i386-bin-1of6.iso
 # mount -t cd9660 /dev/vnd3a /var/www

次に、inetd.confのhttpdのところのコメントアウトをはずして、/etc/rc.d/inetd forcestart。これで、Dom0にアクセスすれば、iso imageの中身がみえるはず。

起動したところ。

あとは、じゅんじゅんに進めていけばよい。画面が乱れて、カーソルがどこへいったかわからない場合は、Tabキーを何度か押して、どこにいるのか確認して進める。

まずは、HTTPを選んで、次へ。

DHCPでも問題ないけど、このDomUにつけるIPアドレスを決めているので、それを使うことにする。IPv6はないので、チェックをはずした。

こんな感じで入力する。

10.0.8.8というのが、Dom0のIPアドレス。ここで、用意したhttpdがまっている。iso imageを用意しなかったひとは、適当なミラーサイトから、選んで、指定する。(たとえば、http://ftp.iij.ad.jp/pub/linux/centos/5.5/os/i386/ がよければ、Web site name: ftp.iij.ad.jp、CentOS directory: /pub/linux/centos/5.5/os/i386/ と書く。)

しばらく待つと、この画面になる。いよいよinstall作業開始。

警告文。Xen Virtual Block Deviceとなっていれば、DomUの設定ファイルの内容どおりなので、間違いない。

Diskの選択。

ほんとにいいよね?

パーティションをインストーラおまかせにするかどうか。もちろん、reviewする。

おまかせの設定はこんな感じ。わざわざLVにする意味はないので、全部ふつうのパーティションにする。swapだけは、おまかせの値にするので、ここでメモっておく。

"VolGroup00"、"xvda2"を削除して、そのあと、パーティションをつくればよい。パーティションをつくろうとすると、画面が乱れるので、Tabキーを何度か押して、カーソルがどこにいるのか確認して進める。

完成形。

ブートローダにGrubを使うかどうか。

コンソールの設定。この設定で、xm console で見える画面になる。

Grubにパスワードをつけるかどうか。つけないよね。

Grubの設定の確認。

ブートローダのインストール場所。MBRでよい。

ネットワークの設定をするよね?

起動時に有効にするかどうかと、IPv4/IPv6の設定。

さっきつけた設定がここに勝手に入ってくれる。

同じく、さっきつけた設定がここに勝手に入ってくれる。

ホスト名はてきとーに。

UTCをはずして、日本時間(JST)に指定。

rootのパスワードをつけよう。

いよいよパッケージの選択。ここで、全部選択肢をはずして、"Customize software selection"のみにする。

Base以外、選択しない。(必要なものは、全部あとから入れる。)下の方にいろいろあるので、カーソルキーを動かして、よく見よう。

依存関係解決中...。

インストールログをとっとくよ。

diskのフォーマット。

パッケージ群のインストール開始。

こんな感じで進む。

おしまい。reboot、とすると、DomUの設定ファイルのとおり、いったんdestroyする。

 起動

下記のようなDomU設定ファイルを用意して、起動する。

 name = "centos32"
 memory = 256
 disk = [ 'file:/path/to/centos32,xvda,w' ]
 vif = [ 'bridge=bridge0' ]
 root = "/dev/xvda3"
 on_reboot = 'restart'
 on_crash = 'restart'
 on_poweroff = 'destroy'

うまくいくようにみえるが、このあと、"Error: Boot loader did't return any data!"といって、止まる。

どうも、pyGrubがうまく動いてくれないみたい。pythonを読み書きできればいいのだが、さっぱりわからん。しょうがないので、kernel と ramdisk の指定をする。これは、インストールしたdiskイメージ(上記でいえば、/path/to/centos32)の中から取り出さないといけない。

 # vnconfig vnd3 /path/to/centos32
 # disklabel vnd3
 <snip>
 7 partitions:
 #        size    offset     fstype [fsize bsize cpg/sgs]
  d:   8388608         0     unused      0     0        # (Cyl.      0 -   4095)
  e:    208782        63 Linux Ext2      0     0        # (Cyl.      0*-    101*)
  f:   1108485    208845       swap                     # (Cyl.    101*-    643*)
  g:   7068600   1317330 Linux Ext2      0     0        # (Cyl.    643*-   4094*)
 disklabel: boot block size 0
 disklabel: super block size 0
 # mount -t ext2fs /dev/vnd3e /mnt

これで、取り出せる。取り出したら、設定ファイルを書き換える。

 kernel = "/path/to/vmlinuz-2.6.18-128.el5xen"
 ramdisk = "/path/to/initrd-2.6.18-128.el5xen.img"
 name = "centos32"
 memory = 256
 disk = [ 'file:/path/to/centos32,xvda,w' ]
 vif = [ 'bridge=bridge0' ]
 root = "/dev/xvda3"
 on_reboot = 'restart'
 on_crash = 'restart'
 on_poweroff = 'destroy'

あとは起動するだけ。

起動できた。

 注意点

mount -t ext2fs /dev/vndXe /mnt とやっても、mountできない

現行のNetBSDは、ext2について、inode sizeが、256 bytesと仮定している。ゆえに、そうでないext2だと、mountできない。(ご愁傷さま。_o_)

ちなみに、currentではこの仮定がとっぱらわれた(kern/40936)。5.1ににもその変更をいれて!って、RRしたら、パッチを書いて下さった方がいた。ありがたや。5.1に入るといいな。5.2に入ることになりました! 5.2まで待てないひとは、netbsd-5枝のDaily snapshotからインストール/アップデートすれば、問題ありません。

OpenBSD/i386

 インストール

OpenBSDは、Xenへの対応は進んでいない。よって、完全仮想化で動かす。

最初に、4.9のiso image (install49.iso)をダウンロードしてくる。

install49.isoはは大きすぎる、なんてひとは、ネットワークインストール用のiso imageであるcd49.iso cdemu49.isoを取ってこれば良い。

使ったインストール用DomU設定ファイル。

 kernel = "/usr/pkg/lib/xen/boot/hvmloader"
 builder='hvm'
 memory = 256
 name = "openbsd32"
 vif = [ 'bridge=bridge0, type=ioemu, model=ne2k_pci' ]
 vfb = [ 'type=vnc, vnclisten=10.0.8.8' ]
 device_model = '/usr/pkg/libexec/qemu-dm'
 disk = [ 'file:/path/to/openbsd32,hda,w' ]
 disk += [ 'file:/path/to/install49.iso,hdc:cdrom,r' ]
 acpi = '1'
 boot='d'
 on_reboot = 'destroy' 
 on_crash = 'destroy'
 on_poweroff = 'destroy'

以前、ne2k_pciのioemuがないと、通信が安定しなかったので、今回もそうする。

準仮想化と違い、画面はVNCに出すことになる。上記の例では、10.0.8.8(Dom0)にVNCクライアントでアクセスすることになる。NetBSDの場合、pkgsrcのnet/vncviewerを使うとよい。

xm create して起動し、vncviewerで接続したところ。

しばらくしていると、

あとは、通常どおりインストールしていく。以下、簡単に説明する。(分かっている人はずっととばして下さい。ちゃんと知りたい人は、FAQ等で確認してね。)

OpenBSDはだらだらと、下に下に質問が出てくるインストーラなので、スクリーンショットもそんな感じになっています。(FreeBSDやNetBSDのcursesベースのインストーラになれていると、びっくりするかも。)

I を入力してすたーと!

Ctrl + C で強制終了できること、デフォルト値は[ ]の中に書いてあること、などなど。

キーボードは? L を入力して、一覧を出す。jp を選択。

ホスト名は?

ネットワークインターフェースを ne3 vlan0 をみつけた。どっちを設定する? ne3(デフォルト値)。

ne3 につけるアドレスは?(DHCPを使うときは、dhcp を入力すること。)

ネットマスクは? 255.255.255.0(デフォルト値)

ne3 にIPv6アドレスは? none(デフォルト値)

ネットワークインターフェースを ne3 vlan0 をみつけた。どっちを設定する? none(デフォルト値)。

デフォルトルート(ゲートウェイ)のIPv4アドレスは? 10.0.8.1

このホストのDNSドメイン名は?

ネームサーバは? 10.0.8.200

ネットワークの設定を手動で全部やる? no(デフォルト値)

rootのパスワードを設定しよう(表示されないよ)rootのパスワードを設定しよう(もう一度入力)

sshdを起動する? yes(デフォルト値)

ntpdを起動する? no(デフォルト値)

X Window Systemを動かすつもりかな? no

(ローカル)ユーザをセットアップするかい? no(デフォルト値) ※もし、登録するとすると、ここでは1ユーザしか登録できません。このユーザが、rootにスイッチできるユーザになります。

ディスクをみつけた。wd0。

root(/)は、どのディスク? wd0(デフォルト値)

MBRの中身はわかんなかった。

ディスク全体(W)を使うか、MBRを編集(E)するか? 全体(デフォルト値) ※これが、NetBSD風にいうと、MBRパーティションについてたずねている内容。

wd0はOpenBSDですべて使うようにした。

wd0のレイアウトは自動的にやってみるとこんな感じ。

(このまま)自動的なレイアウトを使う(A)か、このレイアウトをいじる(E)か、一からカスタムでつくる(C)か? a(デフォルト値) ※これが、disklabelを書いているところ。

あとは、パーティションをフォーマットをまちます...。

setsをインストールしよう! ※setsとは、インストールに使う、tar ball等のこと。(NetBSDでもsetsということがあります。)

setsはどこにあるの? cd(デフォルト値)

CD-ROMとして、cd0 をみつけた。

インストールメディアをひとつ選んで。 cd0(デフォルト値)

setsのパス(path)は、どこ? 4.9/i386(デフォルト値)

インストールするのは、これだけでいい? done(デフォルト値)

あとは、setsがインストールされるのをまちます...。

setsはどこにあるの? done(デフォルト値)

タイムゾーンは? ? を入力して、一覧を出す。Japan を選択。

これで時刻をセットするよ? yes(デフォルト値)

デバイスファイルとかつくって...。

おめでとう!インストールできたよ。 reboot って入力して、再起動しよう。

最初にログインしたら、mailコマンドで、メールを読んでね。

rebootすると、あとは、DomUの設定ファイルのとおり、いったんdestroyする。

 起動

下記のようなDomU設定ファイルを用意して、起動する。

 kernel = "/usr/pkg/lib/xen/boot/hvmloader"
 builder='hvm'
 memory = 256
 name = "openbsd32"
 vif = [ 'bridge=bridge0, type=ioemu, model=ne2k_pci' ]
 vfb = [ 'type=vnc, vnclisten=10.0.8.8' ]
 device_model = '/usr/pkg/libexec/qemu-dm'
 disk = [ 'file:/path/to/openbsd32,hda,w' ]
 acpi = '1'
 boot='c'
 on_reboot = 'restart'
 on_crash = 'restart'
 on_poweroff = 'destroy'
 serial='pty'

vncviewerで接続すると、

起動できた。

そのまま、vncviewer経由でrootでloginして、xm consoleが使えるようにする。

/etc/ttys を

 console   "/usr/libexec/getty std.9600"   vt220  on secure

とする。(off -> on。)

/etc/boot.conf を作成し、

 set tty com0

と書く。

いったんshutdown -hp nowして、xm shutdown したあと、再度、xm create -c すると、

xm console からも使えるようになった。

 その他

shutdown -hp now しても、destroy しない。

/etc/rc.shutdown のpowerdownの値を

 powerdown=YES

としてみたが、やっぱり destroy してくれない。なので、DomU 側からは、消えることはできません。

「最初にログインしたら、mailコマンドで、メールを読んでね。」って何があるの?

loginして、ねんのためPAGERを設定して、

 & more 1

すると、

Theo de Raadtさん(OpenBSDプロジェクトのリーダー)からのメールが来ているのです!

Theoさんからのメールの形をとって、OpenBSDシステムのイントロを説明しています。(OpenBSDらしいなぁと思います。)

OpenBSDには、afterboot、というマニュアルもあるので、最初に起動したら、まず見ましょう。;)

 man afterboot

DragonFly BSD/i386

 インストール

DragonFly BSDは、Xenへの対応は進んでいない。よって、完全仮想化で動かす。

最初に、2.10.1のiso image (dfly-i386-2.10.1_REL.iso.bz2)をダウンロードしてくる。

使ったインストール用DomU設定ファイル。

 kernel = "/usr/pkg/lib/xen/boot/hvmloader"
 builder = 'hvm'
 memory = 256
 name = "dragonflybsd32"
 vif = [ 'bridge=bridge0' ]
 vfb = [ 'type=vnc, vnclisten=10.0.8.8' ]
 device_model = '/usr/pkg/libexec/qemu-dm'
 disk = [ 'file:/path/to/dragonflybsd32,hda,w' ]
 disk += [ 'file:/path/to/dfly-i386-2.8.2_REL.iso,hdc:cdrom,r' ]
 boot = 'd'
 on_reboot = 'destroy'
 on_crash = 'destroy'
 on_poweroff = 'destroy'

準仮想化と違い、画面はVNCに出すことになる。上記の例では、10.0.8.8(Dom0)にVNCクライアントでアクセスすることになる。NetBSDの場合、pkgsrcのnet/vncviewerを使うとよい。

xm create して起動し、vncviewerで接続したところ。

ブートセレクタがみえる。しばらくしていると、

あとは、通常どおりインストールしていく。以下、簡単に説明する。(分かっている人はずっととばして下さい。ちゃんと知りたい人は、ハンドブック等で確認してね。)

Enterで選択、矢印キーで移動。

installerユーザでログインすると、この画面になる。いざゆかん。

バックアップとった?などなど。

ディスクみっけ。これにインストールするよ?

このディスクを全部使うよ? ※NetBSD風にいうと、MBRパーティションを操作するよ、という警告。

ほんとにいいよね。中身消えるよ!

フォーマットされました。 ※たぶん、MBRパーティションを切りました、の意味。

ファイルシステムをえらんでね。HAMMERはDragonFly BSDの新しいファイルシステム。UFSは、昔からBSDで使われてきたもの。もちろん、HAMMER。

サブパーティションの設定をしてね。デフォルト設定にまかせる。 ※これが、disklabelを書いているところ。

HAMMERは50GB未満だと、おすすめしない!!(あえてつかうなら、いろいろしなよ。)

HAMMERフォーマット中...。

ファイルのインストール開始するよ。

インストール中...。

bootblockをインストールする? そのまま進む。

"Packet Mode"という見慣れない言葉の説明。(一つ前の画面で、F1 で出る。)

ブートブロックインストール成功!

おめでとう!インストール完了。引き続き、設定を続ける。

いろいろあります。上から順番に片付けていきます。この画面に何回も戻ります。

まず、タイムゾーン。CMOS clock(= ハードウェアクロック)はUTCかい?

どこ? <Asia> -> <Tokyo> を選ぶ。

Asia/Tokyoに設定した。

つぎ、日時と時刻。

設定したよ。

つき、キーボードマップ。< jp.106x.kbd >を選ぶ。(jp.106.kbdとの違いは、Caps <-> Ctrl があるのが 106x。)

rootのパスワード。

パスワードは変更したよ。

つぎ、一つとんで、ネットワークの設定。< re0 >を選ぶ。

DHCPは使わないので、手動設定。

適当に入力。

結果。

さいごに、参考までに、いらないパッケージを選択して削除することもできる。(今回は、とりあえず、削除しない。)

"Return to Welcome Menu"を選ぶと、最初に戻るので、"Reboot this Computer"を選んで、再起動。

CD-ROM抜けよ!

あとは、DomUの設定ファイルのとおり、いったんdestroyする。

 起動

下記のようなDomU設定ファイルを用意して、起動する。

 kernel = "/usr/pkg/lib/xen/boot/hvmloader"
 builder = 'hvm'
 memory = 256
 name = "dragonflybsd32"
 vif = [ 'bridge=bridge0' ]
 vfb = [ 'type=vnc, vnclisten=10.0.8.8' ]
 device_model = '/usr/pkg/libexec/qemu-dm'
 disk = [ 'file:/path/to/dragonflybsd32,hda,w' ]
 acpi = '1'
 boot = 'c'
 on_reboot = "restart"
 on_crash = "restart"
 on_poweroff = 'destroy'
 serial = 'pty'

vncviewerで接続すると、

起動できた。

そのまま、vncviewer経由でrootでloginして、xm consoleが使えるようにする。

/etc/ttys を

 console	"/usr/libexec/getty std.9600"   cons25  on secure

とする。そして、ttyv0の行をコメントアウトする。

/boot/loader.conf を

 console="comconsole"

と書く。

いったんshutdown -p nowして、再度、xm create -c すると、

xm console側にちゃんと出てきて、

xm console からも使えるようになった。

ただし、xm console はviを使ったりしたときに、どうもおかしくなるので、vncviewer経由か、sshでリモートログインした方が、よいみたい。

FreeBSD/i386

 インストール

FreeBSDは、8.2でようやくXenがそれなりに使えるようになったっぽい。Google大明神に訊いてみると、まだ準仮想化は8.2-RELEASEではうまく動いていないみたいなので、まずは完全仮想化を試す。

最初に、8.2のiso imageをダウンロードしてくる。"disc1"だけでよい。

iso imageをとってくるには大きすぎる、なんてひとは、インストール用のiso imageを取ってこれば良い。bootonlyがそれで、必要なものはネットワークからそのつどダウンロードする、いわゆるネットワークインストールになる。

使ったインストール用DomU設定ファイル。

 kernel = "/usr/pkg/lib/xen/boot/hvmloader"
 builder='hvm'
 memory = 256
 name = "freebsd32"
 vif = [ 'bridge=bridge0' ]
 vfb = [ 'type=vnc, vnclisten=10.0.8.8' ]
 device_model = '/usr/pkg/libexec/qemu-dm'
 disk = [ 'file:/path/to/freebsd32,hda,w' ]
 disk += [ 'file:/path/to/FreeBSD-8.2-RELEASE-i386-disc1.iso,hdc:cdrom,r' ]
 acpi = '1'
 boot='d'
 on_reboot = 'destroy'
 on_crash = 'destroy'
 on_poweroff = 'destroy'

準仮想化と違い、画面はVNCに出すことになる。上記の例では、10.0.8.8(Dom0)にVNCクライアントでアクセスすることになる。NetBSDの場合、pkgsrcのnet/vncviewerを使うとよい。

xm create して起動し、vncviewerで接続したところ。

ブートセレクタがみえる。しばらくしていると、

あとは、通常どおりインストールしていく。以下、簡単に説明する。(分かっている人はずっととばして下さい。ちゃんと知りたい人は、FreeBSDハンドブック等で確認してね。)

Enter か Space で選択。矢印キーで移動。Tabも使えます。Japanを選ぶ。

106キーボードが最初から選ばれている。そのまま。(英語キーボード等の人は変えておくこと。)

インストーラ(sysinstall)のメインメニュー。ここから本番。Standardを選ぶ。

NetBSD風にいうと、MBRパーティションを操作するよ、という警告。(FreeBSDでは、スライス "slice"、と一般にいう。)全diskをFreeBSDにするなら、A でいいよ、と書いてあるので、そうする。

ジオメトリに関する注意。通常は、OK でよい。

A を入力して、全部FreeBSDに割り当てたところ。(末尾に少し未使用が残る。)Q を入力して次へ。

ブートマネージャをインストールするかどうか。この仮想HDDはFreeBSDだけなので、いらない。Standard が選ばれているので、そのまま。

BSDパーティションをつくるよー。

A (Auto Defaults) を入力して、全自動にまかせたところ。

MBRパーティションを切って、その中にBSDパーティションを切る(ディスクラベル(disklabel)を書く、ともいう)、というのは、どの *BSD でも変わらない。

Q を入力して、進む。

インストールタイプを選ぶ。User を選ぶと、

Handbookとか、FAQとかの文書の言語を選ぶ。せっかくなので、English と Japanese を選び、Exit する。

Portsコレクション(NetBSDでいう、pkgsrc)をインストールする? あとで、インストールすることができるので、ここではNo。

戻って来たので、Exit。

インストールメディアを何にしますか? CD-ROM なので、このまま。

いままでの設定をディスクに書き込んじゃうけど、いいよね?(データ消えちゃうよ!)

ここで、No を選んで、その先で、OK すると、インストールメニューに戻って、やり直すことができる。

こんな感じで、すすみます。

こんな感じで、すすみます。

インストール完了!おめでとう。最終の設定をするよ。

ネットワークの設定をする?

どっちの設定をする? 選ばれている方(re0)の方を設定する。

IPv6の設定をする? IPv6は使わないので、このまま。

DHCPを使う? 今回はつかわないので、このまま。(使うときは、Yes にしよう。)

ホスト名などはてきとーに。

インターフェースを今使えるようにしますか? はい。

ネットワークゲートウェイにしますか? しないので、このまま。

inetdに関係したサービスを起動しますか? 必要だったら、あとでするので、このまま。

SSHでログインできるようにしますか? するに変更。

匿名ftpアクセスさせるようにしますか? しないので、このまま。

NFSサーバにしますか? しないので、このまま。

NFSクライアントにしますか? しないので、このまま。

コンソールをカスタマイズしたものにしますか? しないので、このまま。

タイムゾーンを設定しますか? するので、このまま。

ハードウェアクロックは、協定世界時(UTC)ですか? いいえなので、このまま。

Asiaを選んで、

Japanを選ぶ。

JSTでいいんだよね?

PS/2 or シリアル or bus マウスついてる? いいえなので、このまま。

Packageコレクション(NetBSDでいう、バイナリーパッケージのこと)を見る? 必要なら、あとでインストールするので、いいえ。

localアカウント登録する? する。

Userを登録する?Groupを登録する? Userを選ぶ。

登録する。(wheelグループにユーザを追加しておくと、そのユーザからrootになることができる。ここらへんも、NetBSDと同じ。)

必要に応じて、登録を繰り返す。おわったら、Exit して戻る。

Rootパスワードつけよう。

入力を求められるので、入力する。

他になにか設定する? しないので、このまま。

最初のインストールメニューに戻るので、Exit Install を選ぶ。

おしまい。Yes すると、

CD-ROM/DVD-ROMをドライブから抜こうね!

あとは、DomUの設定ファイルのとおり、いったんdestroyする。

 起動

下記のようなDomU設定ファイルを用意して、起動する。

 kernel = "/usr/pkg/lib/xen/boot/hvmloader"
 builder='hvm'
 memory = 256
 name = "freebsd32"
 vif = [ 'bridge=bridge0' ]
 vfb = [ 'type=vnc, vnclisten=10.0.8.8' ]
 device_model = '/usr/pkg/libexec/qemu-dm'
 disk = [ 'file:/path/to/freebsd32,hda,w' ]
 acpi = '1'
 boot = 'c'
 on_reboot = 'restart'
 on_crash = 'restart'
 on_poweroff = 'destroy'
 serial = 'pty'

vncviewerで接続すると、

起動できた。

そのまま、vncviewer経由でrootでloginして、xm consoleが使えるようにする。

/etc/ttys を

 ttyu0   "/usr/libexec/getty std.9600"   dialup  on secure

とする。(off -> on。)

/boot/loader.conf を

 boot_multicons="YES"
 boot_serial="YES"
 comconsole_speed="9600"
 console="comconsole,vidconsole"

と書く。

いったんshutdown -p nowして、再度、xm create -c すると、

xm console側にちゃんと出てきて、(文字化けしているのはご愛嬌、)

xm console からも使えるようになった。

ただし、xm console はviを使ったりしたときに、なぜか固まるので、vncviewer経由か、sshでリモートログインした方が、よいみたい。

 準仮想化

xenの DomainU として FreeBSD を動かすによれば、準仮想化でも動くみたい。でも、NetBSD/xen (amd64) で試した限り、panicしてうまく動いてくれなかった。

その他

 DomUの設定ファイルにMAC Addressを書きたい

vifにMAC Adderessを書く場合は、

 vif = [ 'mac=00:16:3e:00:00:11, bridge=bridge0' ]

と書く。(書かないと適当に決められる。)先頭は、"00:16:3e"で始めること。(Xenで登録されているもの。)

 DomU側のパーティション単位でDom0側の物理媒体を分けたい

旧NetBSD Wiki等では、DomU側のパーティションを指定することができるような記載がある。たとえば、Linuxの例において、

 disk = [ 'phy:/dev/wd0i,hda1,w','phy:/dev/wd0j,hda2,w' ]

のように、Dom0のwd0のiパーティションをhda1パーティションに割り当てている。しかし、試してもうまくいかなかった。

 Dom0側のパーティションをDomU側のディスクにすると

例をあげれば、たとえば、NetBSDでいえば、Dom0:/dev/wd1j が、DomU:/dev/xbd0d になっている、というわけ。さて、どうやって、DomU:/dev/xbd0aの中を取り出せばいいんだろうね?

これは、LinuxをDomUにした場合にもいえる。

正攻法でいくと、NetBSDの場合は、dkctlを使って、mountできる。まず、wd1の全パーティションをumountする。次に、xbd0aの大きさを調べる。DomUを起動して、メモってもいいし、scan_ffsを使ってDom0側から調べてもいい。4194304だったとすると、あとは、wd1jの先頭の位置をdisklabelで調べて、555745343だったとすると、

 dkctl /dev/rwd1d addwedge dk0 555745343 4194304 ffs

などとすれば、

 mount /dev/dk0 /mnt

などとmountできる。

ただし、wd1の全パーティションをumountしないといけないので、あまり実用的ではない。

実は、NetBSDの場合は、無理やり

  # mount /dev/wd1j /mnt

などとやると、/dev/xbd0a のものは取り出せるみたい。この方法だと、wd1の全パーティションをumountしなくてもいい。(試したらできた。でも、壊れても保証しないよ。)

Dom0のパーティションを、DomUのディスク全体とするのは止めた方がよさそうだ。

根本的な解決は、Dom0側で、LVMを使うことだけど、NetBSDでは、6.0から使えるようになるので、もう少し先になりそう。

間違いの指摘や、ご意見などは、FrontPageにある連絡先にメールを下さるとうれしいです。

最終更新時間:2013年10月18日 20時49分20秒