Xenは動作するがhvmが動作しない環境においてOpenSolarisをインストールする。Xen環境はNetBSD/amd64 5.0_BETAをDomain-0とした64bit環境である。
例によって、ここでは以下の環境を使用する。Xen環境としては非常に貧弱なものである。
CPU | Intel Celeron D 336 2.8GHz (LGA775) |
---|---|
Memory | 2GByte |
ChipSet | Intel 865G |
HDD | 60GB EIDE Seagate ST360021A |
HyperVisor | Xen 3.3.0 (pkgsrcからinstall) |
Domain-0 | NetBSD/amd64 5.0_BETA (2008.12.20頃のソースを自分でbuildしたもの) |
OpenSolarisのインストール用CDはLiveCDとなっており、Installなしでそのまま使うことができる。また、このInstall CDには、通常のi386, amd64用のSolaris kernel以外に、Xen Domain-U用のkernelも含まれている。そのため、このカーネルを利用すれば簡単にSolarisをXen環境上で起動することができる。
まずはboot用にcd imageから起動に必要なファイルを取り出す。
具体的には以下。/xendata/OpenSolaris/以下にファイルを置くことにする。
# vnconfig vnd0 /path/to/osol-0811.iso # mount -t cd9660 /dev/vnd0a /mnt # cp /mnt/platform/i86xpv/kernel/amd64/unix /xendata/OpenSolaris/ # cp /mnt/boot/x86.microroot /xendata/OpenSolaris/ # umount /mnt # vnconfig -u vnd0
なお、32bit Domain-U用kernelも存在するのだが、これはPAE環境用のもののため、NetBSD/i386をDomain-0とした32bit Xen(PAEなし用)では起動できないので注意。NetBSD/amd64をDomain-0とする64bt Xen環境では起動できるのだが64bit環境でわざわざ32bitにする必要もないだろう。
まずはLiveCDで起動できるようにする。インストール先用のストレージは例によってファイル。最低3.5GBくらいは必要らしいのでここでは8GB確保する。
# dd if=/dev/zero of=/xendata/OpenSolaris/opensolaris.img bs=1m count=8k
設定ファイルを/usr/pkg/etc/xen/op_installとして作成する。内容は nstalling an OpenSolaris domU on a Linux dom0を参考にして以下のようにした。
name = 'OpenSolaris' memory = '512' disk = [ 'file:/xendata/OpenSolaris/osol-0811.iso,6:cdrom,r', 'file:/xendata/OpenSolaris/opensolaris.img,0,w' ] vif = [ 'mac=00:16:3e:00:01:17,bridge=bridge0' ] kernel = '/xendata/OpenSolaris/unix' ramdisk = '/xendata/OpenSolaris/x86.microroot' extra = '/platform/i86xpv/kernel/amd64/unix - nowin -B install_media=cdrom'
作成した設定ファイルでとにかく起動してみる。
# xm create -c /usr/pkg/etc/xen/op_install ing config file "/usr/pkg/etc/xen/op_install". v3.3.0 chgset 'unavailable' Started domain OpenSolaris SunOS Release 5.11 Version snv_101b 64-bit Copyright 1983-2008 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Hostname: opensolaris Remounting root read/write Probing for device nodes ... NOTICE: xdf@6: failed to read feature-barrier NOTICE: xdf@0: failed to read feature-barrier Preparing live image for use Done mounting Live image USB keyboard 1. Albanian 22. Latvian 2. Belarusian 23. Macedonian 3. Belgian 24. Malta_UK 4. Bulgarian 25. Malta_US 5. Croatian 26. Norwegian 6. Czech 27. Polish 7. Danish 28. Portuguese 8. Dutch 29. Russian 9. Finnish 30. Serbia-And-Montenegro 10. French 31. Slovenian 11. French-Canadian 32. Slovakian 12. Hungarian 33. Spanish 13. German 34. Swedish 14. Greek 35. Swiss-French 15. Icelandic 36. Swiss-German 16. Italian 37. Traditional-Chinese 17. Japanese-type6 38. TurkishQ 18. Japanese 39. TurkishF 19. Korean 40. UK-English 20. Latin-American 41. US-English 21. Lithuanian To select the keyboard layout, enter a number [default 41]:
とりあえずもうこれでOpenSolarisが動いていることには違いない。GUIではないのでキーボードは適当に、次に言語を聞いてくるが、とりあえず英語のままにする。
elect the keyboard layout, enter a number [default 41]: 1. Chinese - Simplified 2. Chinese - Traditional 3. English 4. French 5. German 6. Italian 7. Japanese 8. Korean 9. Portuguese - Brazil 10. Russian 11. Spanish To select desktop language, enter a number [default is 3]: User selected: English Configuring devices. Mounting cdroms Reading ZFS config: done. opensolaris console login:
そのままconsole loginまで進んでしまう。ここでOpenSolarisのドキュメントに従い、ユーザ/パスワードを'jack/jack'でログインしてみる。
opensolaris console login: jack Password: Sun Microsystems Inc. SunOS 5.11 snv_101b November 2008 jack@opensolaris:~$
普通にログインできる。デフォルトでdhcp設定になっているようで、dhcpサーバが存在すればネットワークも有効となっている。なお、標準でXvncが起動しているようなので、外部からvncviewerで繋げられるようだが今回は使っていない。
設定ファイルで指定したディスクイメージは、/devices/xpvd/xdf@0として認識されているようだ。ここにシステムをインストールする。OpenSolaris 2008.11ではインストーラはGUIインストーラしか提供されていない。つまりX環境が必要となる。色々な方法はあるが、ここではDomain-0でXserverを動作させ、そこにremote Xとして出力することにする。
jack@opensolaris:~$ export DISPLAY=(Domain-0のIPアドレス):0 jack@opensolaris:~$ /usr/bin/pfexec /usr/bin/gui-install &
すると以下のようにOpenSolarisのインストーラが実行される。
これ以降は基本的に手順どおりなのでOpenSolarisのインストールドキュメントにしたがえばよい。ディスクは全体を選択してしまえば良いだろう。ただし、ファイルのコピーが終了した後、最後のRebootボタンを押す前に必ずやらねばならないことがある。
以下の作業はインストーラの[Reboot]ボタンを押さずにshell上で操作する必要がある。
OpenSolaris 2008.11ではfile systemがZFSになっており、この構成情報がないとカーネルが起動できてもrootパーティションを見つけられずまともに起動できなくなってしまう。そのための情報を含んだroot imageであるboot_archiveをDomain-0環境にコピーする必要がある。
まず、インストール先パーティションがmount済みか否かを確認する。インストール先パーティションは/aにmountされるのだが、インストーラの終了時にunmountされている可能性がある。この場合は以下のようにmountする。
$ pfexec beadm mount opensolaris /a
次に、念のためboot_archiveを更新する。
$ pfexec bootadm update-archive -R /a Creating boot_archive for /a updating /a/platform/i86pc/boot_archive updating /a/platform/i86pc/amd64/boot_archive
よくわからないが、ここではなぜか/a/platform/i86pc/amd64/boot_archiveが作られた(i86xpvではなく)。これをDomain-0に何らかの方法でコピーする。同時に念のためinstallされたkernelもコピーしておく。
jack@opensolaris:~$ scp /a/platform/i86pc/amd64/boot_archive (ユーザ)@(Domain-0のIPアドレス):(ディレクトリ) jack@opensolaris:~$ scp /a/platform/i86xpv/amd64/kernel/unix (ユーザ)@(Domain-0のIPアドレス):(ディレクトリ)
次に、rootパーティションのIDを求めるため、zpoolのguidを求める。
jack@opensolaris:~$ zpool get guid rpool NAME PROPERTY VALUE SOURCE rpool guid 4947722999548392110 -
このguidを使って次にzpool内のROOTのIDを得る。
jack@opensolaris:~$ pfexec zdb -d -e 4947722999548392110 Dataset mos [META], ID 0, cr_txg 4, 792K, 109 objects Dataset 4947722999548392110/export/home/oshima [ZPL], ID 64, cr_txg 288, 20.5K, 6 objects Dataset 4947722999548392110/export/home [ZPL], ID 58, cr_txg 286, 19.0K, 5 objects Dataset 4947722999548392110/export [ZPL], ID 52, cr_txg 284, 19.0K, 5 objects Dataset 4947722999548392110/dump [ZVOL], ID 30, cr_txg 8, 256M, 3 objects Dataset 4947722999548392110/ROOT/opensolaris@install [ZPL], ID 108, cr_txg 2776, 2.21G, 101425 objects Dataset 4947722999548392110/ROOT/opensolaris [ZPL], ID 46, cr_txg 280, 2.21G, 101425 objects Dataset 4947722999548392110/ROOT [ZPL], ID 40, cr_txg 277, 18.0K, 4 objects Dataset 4947722999548392110 [ZPL], ID 16, cr_txg 1, 72.0K, 12 objects
ここのROOT/opensolarsのIDを記録しておく。
これらが終わったなら、インストーラの[Reboot]ボタンではなく、shell上からinit 0で終了させる(リブートさせても意味がないため)。
インストール環境からコピーしたunixとboot_archiveを/xendata/OpenSolarisに置き、次のような設定ファイルを/usr/pkg/etc/xen/opensolarisとして作成する。
kernel = "/xendata/OpenSolaris/unix" ramdisk = "/xendata/OpenSolaris/boot_archive" memory = 512 name = "OpenSolaris" vif = [ 'mac=00:16:3e:00:01:17, bridge=bridge0' ] disk = [ 'file:/xendata/OpenSolaris/opensolaris.img,0,w'] extra = '/platform/i86xpv/kernel/amd64/unix - nowin -B bootpath=/xpvd/xdf@0:a -B console=xen -B zfs-bootfs=rpool/46'
最後のrpool/の数値は、インストール環境で取得したROOT/opensolarisのID値を指定する。
作成した設定ファイルを使ってOpenSolarisを起動する。
# xm create -c /usr/pkg/xen Using config file "/usr/pkg/etc/xen/opensolaris". Started domain OpenSolaris v3.3.0 chgset 'unavailable' SunOS Release 5.11 Version snv_101b 64-bit Copyright 1983-2008 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. NOTICE: xdf@0: failed to read feature-barrier Hostname: opensolaris Configuring devices. Loading smf(5) service descriptions: 148/148 Reading ZFS config: done. Mounting ZFS filesystems: (6/6) Creating new rsa public/private host key pair Creating new dsa public/private host key pair opensolaris console login:
これで正しく起動した。インストーラで指定したユーザでloginし、あとはSolarisのシステム設定を行えばよい。さしあたってはgdmなど余分なサービスてんこ盛りなので、それらを停止させることが必要だろう。
ちなみに、prtconfでcpuの情報を参照すると、ちゃんとCeleronになっている。
oshima@opensolaris:~$ prtconf -v (略) name='brand-string' type=string items=1 value='Intel(r) Celeron(r) CPU 2.80GHz' (略)
Domain-0でxm listを見ると以下のようになる。
# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 512 1 r----- 2462.1 OpenSolaris 17 512 1 -b---- 142.9