OpenSolaris Domain-UをNetBSD/amd64 Domain-0 Xen環境に

はじめに

Xenは動作するがhvmが動作しない環境においてOpenSolarisをインストールする。Xen環境はNetBSD/amd64 5.0_BETAをDomain-0とした64bit環境である。

用意するもの

例によって、ここでは以下の環境を使用する。Xen環境としては非常に貧弱なものである。

CPUIntel Celeron D 336 2.8GHz (LGA775)
Memory2GByte
ChipSetIntel 865G
HDD60GB EIDE Seagate ST360021A
HyperVisorXen 3.3.0 (pkgsrcからinstall)
Domain-0NetBSD/amd64 5.0_BETA (2008.12.20頃のソースを自分でbuildしたもの)

CD boot用カーネルの取得

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 boot用Xen設定ファイルの作成

まずは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'

LiveCDイメージで bootする

作成した設定ファイルでとにかく起動してみる。

# 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で繋げられるようだが今回は使っていない。

ディスクへinstallする

設定ファイルで指定したディスクイメージは、/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ボタンを押す前に必ずやらねばならないことがある

zfs boot環境のコピー

以下の作業はインストーラの[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で終了させる(リブートさせても意味がないため)。

実行環境用Xen設定ファイルの作成

インストール環境からコピーした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値を指定する。

実行環境用Domain-Uの起動

作成した設定ファイルを使って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

$Id: xen64_solaris.html,v 1.1 2008/12/28 12:50:39 oshima Exp $