NetBSD/xen DOM_0 for DOM_U Ubuntu i386

NetBSD6/amd64 で Ubuntu を動かそう,おー。

Xen 4.2のインストール

pkgsrcの,sysutils/xenkernel42/ と sysutils/xentools42/ にて make install clean する。xenkernel42のときに 「……pkg/xen42-kernel/xen.gz こぴれ」とかメッセージが出るので 分かりやすい場所(以下の例では / )にコピーする。

DOM0カーネル作成

/usr/src/sys/`uname -m`/conf の XEN3_DOM0 でカーネルを作る。 わかんなければ ftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-6.1.3/amd64/binary/kernel/ とかから入手。gz のままでよいので / に置く。

boot.cfg作成と起動

/boot.cfg にこんな行を追加。

menu=Xen:load /netbsd-XEN3_DOM0.gz console=pc;multiboot /xen.gz dom0_mem=512M

netbsdカーネル起動に console=pc を足しておかないと dom0 のコンソールがなくなる。 シリアルコンソール化してあるときは console=com0 とか。

2014/8/27 シリアルコンソール使用時の場合

で,リブートして上記のmenuに該当する番号を選んで起動。 一発でうまく行ったらおめでとう。画面が消えちゃったりしたら xen.gz のかわりに xen-debug.gz を読ませたり,あるいは xen.gz(xen-debug.gz) のオプションに sync_console なんかを追加してエラーメッセージを見て なんとかしよう。

Ubuntuのインストール

どっかからisoイメージを持って来よう。わしは ftp.jaist.ac.jp:/pub/Linux/ubuntu-jp-cdimage/releases/13.10 から ubuntu-ja-13.10-desktop-i386.iso を頂いた。藤枝さんいつもありがとう。

インストール用ディスクイメージは8GBでいいかな。 NetBSD6でも「穴空き(sparse)」ディスクで行けるのでこんな感じで。

dd if=/dev/zero of=ubuntu.img bs=1m seek=8191 count=1
ls -lFh
-rw-r--r--  1 root   wheel  1.0G Nov  6 11:16 ubuntu-ja-13.10-desktop-i386.iso
-rw-r--r--  1 root   wheel  8.0G Mar  2 10:28 ubuntu.img

ブリッジインタフェースを作っとく。 メインのNICがalc0だとするとこんな感じ。

ifconfig bridge0 create
brconfig bridge0 add alc0
ifconfig bridge0 up

この作業を /etc/ifconfig.bridge0 に書いておける。こんな感じ。

create
!brconfig $int add alc0
up

次回ホスト側起動時に有効になる。

さて,ホスト側準備OK。 domUへのUbuntuインストールはhvmで。confはこんなふう。

# ramdisk = "/opt/xen/kern/initrd.img"
# kernel = "/opt/xen/kern/vmlinuz"
kernel = "/opt/pkg/lib/xen/boot/hvmloader"

memory = 1024
name = "ubuntu"
vif = [ 'bridge=bridge0' ]
builder = 'hvm'
# root = '/dev/xvda1 rw'

vcpus = 2
disk = [ 'file:/opt/xen/img/ubuntu.img,ioemu:hda,w',
      'file:/opt/xen/img/ubuntu-ja-13.10-desktop-i386.iso,ioemu:hdc:cdrom,r' ]
boot = 'dc'
usb = 1
usbdevice = 'tablet'
sdl = 0
vnc = 1
vncdisplay = 1

このファイルを ubuntu という名前で保存したならこんな風に起動。

xl create ubuntu

すかさず別の端末からvncで接続。ああそうそう,先に vncviewer を入れとかないとね。pkgsrc/net/tightvnc あたりをどうぞ。

vncviewer :1

起動直後の画面:
Plex86/Bochs VGABios

画面モードが切り替わるとvncviewer自体がバキっと落ちちゃうかもしれないが, そしたら再度vncviewerを起動すればよろし。はい,Ubuntuデスクトップ 上がって来ました。
UbuntuDesktop

めちゃんこ,モッサリ動きます。 クリックの反応が悪くて,どこを何回クリックしたか分かんなくなっちゃう 程なので,できればカーソルキーでアイコンを選んでEnterで進む方が いいと思う。がんばって「Ubuntuのインストール」を起動してインストール。 20分くらいで入ったかな。遅いっちゃ遅いが, ホストシステムは1.6GHzなのでそれ考えるとまあ悪くない。 でも,常用したいかっつーと嫌なレベル。

「こんなん使い物にならんわー」と嘆くことなかれ。 あとで準仮想化モードにすればサクサクでっせ。

Ubuntuインストール直後の設定

できたら一度 xl destroy ubuntu してから,ディスクから起動。 やりかた色々。xl create してすぐにvncviewerでつないで, F12を押して「Hard Disk」から起動を選ぶとか, configファイルの disk= から iso イメージの方を削るとか。

で,めでたく起動したらターミナルエミュレータを起動して sshd をenable しておく。あれ,どうやったっけ。 service ssh enable だったかな。ちゃうわ, apt-get -y install openssh-server か。

それから,次のステップの準仮想化に備えて, カーネルとinitrdファイルをdom0側にscpしておく。 ようはこんな風。まず,domU ubuntu内から,

scp /boot/{vmlinuz,initrd.img} dom0:

その後,dom0ホストで2つのファイルをしかるべき場所に移動しておく。 以下の例では /opt/xen/kern にした。

準仮想化へ

Para-Virtualizationモードに変更しませう。 設定用に起動したdomU-ubuntuを落とす。xl destroy ubuntu とかでも桶。 で,xenの定義ファイルを以下のように変更。

#kernel = "/opt/pkg/lib/xen/boot/hvmloader"
kernel = "/opt/xen/kern/vmlinuz"
ramdisk = "/opt/xen/kern/initrd.img"

memory = 1024
name = "ubuntu"
vif = [ 'bridge=bridge0' ]
# builder = 'hvm'
root = '/dev/xvda1 rw'

vcpus = 2
disk = [ 'file:/opt/xen/img/ubuntu.img,ioemu:hda,w',
      'file:/opt/xen/img/ubuntu-ja-13.10-desktop-i386.iso,ioemu:hdc:cdrom,r' ]
boot = 'c'
usb = 1
usbdevice = 'tablet'
sdl = 0
vnc = 1
vncdisplay = 1

kernelとramdiskとboot変更, builder除去,root追加。 「root=」の行が大事ネ。これに気付かなくて随分苦労した。できたら起動。

xl create -c ubuntu

行ったー。

ちなみに root= の行がないとこんなエラーが出る。

Daemon running with PID 3452
[    0.000000] Reserving virtual address space above 0xf5800000
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.11.0-12-generic (buildd@komainu) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu7) ) #19-Ubuntu SMP Wed Oct 9 16:12:00 UTC 2013 (Ubuntu 3.11.0-12.19-generic 3.11.3)
[    0.000000] KERNEL supported cpus:
	:
	:(中略)
	:
mount: can't read '/etc/fstab': No such file or directory
Begin: Running /scripts/local-bottom ... done.
done.
Begin: Running /scripts/init-bottom ... mount: mounting /dev on /root/dev failed: No such file or directory
done.
mount: mounting /sys on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed: No such file or directory
Target filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.


BusyBox v1.20.2 (Ubuntu 1:1.20.0-8.1ubuntu1) built-in shell (ash)
Enter 'help' for a list of built-in commands.

(initramfs) 

ついで

コンソールログイン

xlでコンソール画面を見てそのまま使えないのもあれだから コンソールにgetty走らせよう。えー,inittabじゃないのー? わかんねー

/etc/init のなかの tty6.conf とかの真似をして ttyなんちゃら.conf を作ればいいらしい。へえー。

cd /etc/init
sed 's/tty6/hvc0/' tty6.conf > ttyHVC.conf

このあとどうしたらいいかワカラン。kill -1 1 じゃないのけ。 わかんねー。reboot。/dev/hvc0 がxenコンソール。

vncでリモートログイン

なんかさー,/etc/X11/Xsession がうまく走らないの。うちだけ? unityもよくわかんないし,xfce4でいいよねー。

apt-get -y install xfce4

lightdmってのもxdmcpうまく飛ばせなーい。なんでー? わからんときは xdm じゃ。

apt-get -y install xdm
vi /etc/X11/xdm/xdm-config
(DisplayManager.requestPortの行を ! でコメントアウト)

domU リブートして外からログインしてvncserverを起動。 1回目はダミーで起動して ~/.vnc/xstartup を作らせてから 以下のように変更。

#!/bin/sh

case "$VNCDESKTOP" in
  query)  ;;
  *)
	xrdb $HOME/.Xresources
	xsetroot -solid grey
	export XKL_XMODMAP_DISABLE=1
	unset SESSION_MANAGER
	export GTK_IM_MODULE=scim XMODIFIERS=@im=SCIM
	scim &
	xfwm4 &
	xfce4-session
	;;
esac

あー,そうそう,なんかiBusがうまく起動できなかったのさ。 てのはおいといて,さらに ~/.xsession をこう。

export GTK_IM_MODULE=scim XMODIFIERS=@im=SCIM
scim&
xfce4-session

vncserverをいったんkillしてから再起動。

vncserver -name query -query localhost -geometry 1024x700

外から vncviewer で繋ぐ。
xdm login of Ubuntu

ログインする。こんな感じ。
Deskopt of Ubuntu XFCE4

Firefoxとかgimpとか,親のNetBSDでの起動と大差ない速さで行ける。 ていうか,LibreOfficeとかは圧倒的にdomUのubuntuの方が速い。あれまあ。