xenの DomainU として FreeBSD を動かす
ようやく作業が完了したので、まとめてみます。
環境と目的
ubuntu あたりを Xen のサーバとして使うほうが楽なのですが、家にいてまで必要以上に Linux は触りたくないので NetBSD で。
ちなみにノート PC には ubuntu 入れて使っています。軽作業ならこれで十分ですしおすし。
構築手順
FreeBSD の Xen 用カーネルを作る。
FreeBSD xen の ML を見ると pmap で panic する修正が入っているとのことだったので、CURRENT で作ります。
このあたりの色々な修正は RELENG 8.2 へ MFC されていないので、おとなしく CURRENT です。
(STABLE へは MFC されてます)
CURRENT を作るのは先日の日記を参照。
http://d.hatena.ne.jp/po3/20110515/1305460610
Xen 用のディスクイメージを作る
下記 URL を参照しました。
http://forums.freebsd.org/showthread.php?t=10268
ただし、ディスクイメージを作るときは truncate ではなくて dd コマンドで作っています。
# dd if=/dev/zero of=disk.img bs=1m count=2k
俗にいう穴あきファイル(sparse) はあんまりよく分からないし、VMWare でも qemu でもパフォーマンスがガタ落ちだったの dd でフルに容量を使って作成しています。
Linux だと virtio を使うとマシになるのですが、やっぱり根本的に遅いし、ディスクも安いのでキニシナイ!
作ったディスクイメージに色々するのは先日の日記を参照。
/etc/fstab を適当に弄って /etc/ttys に xc0 を追加してください。
http://d.hatena.ne.jp/po3/20110514/1305384444
Xen の設定ファイルを作る
これは単純に下記のようなファイルを用意します。
memory = 855 name = "FreeBSD_DOMU" kernel = '/usr/home/xen/FreeBSD-CURRENT/xen.kernel' disk = [ 'file:/home/xen/FreeBSD-CURRENT/disk.img,hda1,w', ] extra = 'boot_verbose,boot_single,kern.hz=100,machdep.idle_mwait=0,vfs.root.mountfrom=ufs:/dev/ad0s1a' vcpus = 1 on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
machdep.idle_mwait=0 はもういらないかもしれない。
起動してみます。
gomyway# xm create ./xen.cfg -c Using config file "././xen.cfg". Started domain FreeBSD_DOMU 3DNow!> AMD Features2=0x11f<LAHF,CMP,SVM,ExtAPIC,CR8,Prefetch> real memory = 896532480 (855 MB) avail memory = 866402304 (826 MB) [XEN] IPI cpu=0 irq=128 vector=RESCHEDULE_VECTOR (0) [XEN] IPI cpu=0 irq=129 vector=CALL_FUNCTION_VECTOR (1) [XEN] xen_rtc_probe: probing Hypervisor RTC clock rtc0: <Xen Hypervisor Clock> on motherboard [XEN] xen_rtc_attach: attaching Hypervisor RTC clock xenstore0: <XenStore> on motherboard xc0: <Xen Console> on motherboard Timecounters tick every 10.000 msec xenbusb_front0: <Xen Frontend Devices> on xenstore0 [XEN] hypervisor wallclock nudged; nudging TOD. xenbusb_back0: <Xen Backend Devices> on xenstore0 xctrl0: <Xen Control Device> on xenstore0 xbd0: 2048MB <Virtual Block Device> at device/vbd/769 on xenbusb_front0 xbd0: attaching as ad0 Timecounter "TSC" frequency 2109592000 Hz quality 800 WARNING: WITNESS option enabled, expect reduced performance. Trying to mount root from ufs:/dev/ad0s1a []... rtc0: [XEN] xen_rtc_gettime rtc0: [XEN] xen_rtc_gettime: wallclock 1306675669 sec; 965899053 nsec rtc0: [XEN] xen_rtc_gettime: uptime 665 sec; 6026720 nsec rtc0: [XEN] xen_rtc_gettime: TOD 1306676334 sec; 971925773 nsec Setting hostuuid: 0f12f2c1-8947-11e0-bda0-6389d0dd6e1d. Setting hostid: 0x419c4544. No suitable dump device was found. Entropy harvesting: interrupts ethernet point_to_point kickstart. Starting file system checks: /dev/ad0s1a: FILE SYSTEM CLEAN; SKIPPING CHECKS /dev/ad0s1a: clean, 835786 free (1474 frags, 104289 blocks, 0.1% fragmentation) Mounting local file systems:. /etc/rc: WARNING: $hostname is not set -- see rc.conf(5). Starting Network: lo0. lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 options=3<RXCSUM,TXCSUM> inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL> Starting devd. add net ::ffff:0.0.0.0: gateway ::1 add net ::0.0.0.0: gateway ::1 add net fe80::: gateway ::1 add net ff02::: gateway ::1 Creating and/or trimming log files. Starting syslogd. /etc/rc: WARNING: Dump device does not exist. Savecore not run. ELF ldconfig path: /lib /usr/lib /usr/lib/compat a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout Clearing /tmp (X related). Updating motd:. Starting cron. Starting background file system checks in 60 seconds. Sun May 29 13:39:02 UTC 2011 FreeBSD/i386 (Amnesiac) (xc0) login:
なんとか起動しました。
TODO
とりあえず動かすところまではできましたが、メモリを 855MBよりも多くすると、また pmap で落ちます。
ルータとして動かすのでメモリはそんなにいらないので、この問題についてはスルーします。