harry’s memorandum

おれおれメモ

GPLPVドライバをインストールしてベンチマークをとってみた

構成

Domain-0の情報
  • Domain-0
    • CentoOS5.3
    • Xen3.3.1
    • HDD 1TB x 3 (RAID5)
  • Domain-U
    • WindowsXPSP3
    • DiskはXenのファイルイメージタイプ
Domain-0のHDDの情報
# hdparm -tf /dev/mapper/VolGroup00-LogVol00
/dev/mapper/VolGroup00-LogVol00:
 Timing buffered disk reads:  416 MB in  3.04 seconds = 137.05 MB/sec
NICの情報
マシン NIC
Windows(WindowsXP/hostname:crimson) ReadtekRTL8168 PCI-E Gigabit Ethernet NIC
Domain-0(CentOS5.3/hostname:epitaph) Broadcom NetXtreme BCM5722 Gigabit Ethernet NIC
Domain-U(WindowsXP/hostname:wolf) NOGPLPV - RealtekRTL8139
Domain-U(WindowsXP/hostname:wolf) GPLPV - Xen Net Device Driver

HDDのベンチマーク

CrystalDiskMark22を使ってHDDの簡単なベンチマークを取ってみました。
結果は値がおかしい。PVドライバを入れる前でもSSD並に速い。しかもPVドライバいれたらさらにとんでもない値が出ているし。XenのDomain-UにCrystalDiskMark22だと正しくベンチマークが取れないのかな?
f:id:dharry:20090609043057j:image f:id:dharry:20090609043056j:image

これではベンチマークとして信用できないので、参考レベルですがCygwinのddコマンドでディスクアクセスの簡単な確認することにしてみた。/dev/zero や /dev/null だとテストにならないので/dev/urandomを使用。

GPLPVインストール前。

$ time dd if=/dev/urandom bs=1M count=512 of=bench.img
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 98.481 s, 5.5 MB/s

real    1m38.515s
user    0m36.252s
sys     0m2.723s

GPLPVインストール後。

$ time dd if=/dev/urandom bs=1M count=512 of=bench.img
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 63.976 s, 8.4 MB/s

real    1m4.000s
user    0m35.841s
sys     0m2.443s

あまり信用置けるベンチマークではありませんが、少しは速くなっているようです。

ネットワークの簡単なベンチマーク

Netperfを使ってネットワーク速度をベンチしました。

パターンは4つ

  1. get Windows(hostname:crimson) <= NOGPLPV Domain-U Windows(hostname:wolf)
  2. put Windows(hostname:crimson) => NOGPLPV Domain-U Windows(hostname:wolf)
  3. get Windows(hostname:crimson) <= GPLPV Domain-U Windows(hostname:wolf)
  4. put Windows(hostname:crimson) => GPLPV Domain-U Windows(hostname:wolf)

数値は Mbit/sec です。

パターン 1回目 2回目 3回目
crimson <= wolf (NOGPLPV) 24.06 24.20 24.50
crimson => wolf (NOGPLPV) 55.64 55.74 55.33
crimson <= wolf (GPLPV) 433.38 463.18 420.73
crimson => wolf (GPLPV) 470.82 453.16 508.85

ネットワークの性能は約10-20倍にアップしています。これはかなりうれしい結果になりました。

追記

HDDベンチマークのありえない値を叩き出している件ですが、どうもDomain-Uがファイル形式だとおかしな値になるようです。
デバイス指定でインストールしたWindowsXPにGPLPVをインストールして再度確認してみた結果です。
f:id:dharry:20090610025937j:image
こっちはCygwinのddコマンド。

$ dd if=/dev/random bs=1M count=512 of=bench.img
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 125.596 s, 4.3 MB/s

GPLPV入れても書き込み速度は遅すぎるままでした。大丈夫か?
読み込みが速いのはDomain-0がRAID5だからかな。ディスクアクセスに関してはGPLPV入れてもまだ効果は期待できないということでしょうね。GPLPVはまだまだ開発中ですし、しばらくはウォッチしていきたいです。

GPLPVドライバをインストールしてみた

Citrix社のXenServerにはWindows-PVDrivers、Novell社のSuSEだと仮想マシンドライバパック、このようにXenのベンダーはDomain-U用のPVドライバを用意してパフォーマンスの優位性を出しています。RedHat社もPVドライバを出していますが、CentOSには当然ありません。この時点でCentOSを使うアドバンテージはないです。しかしそれだと面白くないのでオープンソースのWindowsPVドライバを導入してみました。

GPLPVドライバインストール

ダウンロードはここになります。
インストーラがたくさんあり、どれをダウンロードしたらよいのかわかりにくいですが、http://wiki.xensource.com/xenwiki/XenWindowsGplPv をみると、32bitのWindowsXPのPVドライバの場合 は gplpv_fre_wxp_x86_X.XXX.msi のようです。

Recent binaries are available from http://www.meadowcourt.org/downloads/

    * There is now one download per platform/architecture, named as follows:

      gplpv_<chk/fre>_<platform>_<arch>_<version>.msi
    * chk is a 'checked' build which contains debug info (please use these if you want any assistance in fixing bugs)
    * fre is a 'free' build which contains no debug info
    * platform is 'wxp' for XP, 'wnet' for 2003, and 'wlh' for Vista/2008
    * arch is 'x86' for 32 bit and 'AMD64' for 64 bits 

2009.06.10時点で最新のgplpv_fre_wxp_x86_0.10.0.69.msiをインストール。
f:id:dharry:20090609041039j:image


新しいバージョンではboot.iniにオプションは必要ないようだけど、いちおう設定しておく。*1

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional GPLPV" /GPLPV /noexecute=optout /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional NOGPLPV" /NOGPLPV /noexecute=optout /fastdetect

インストールが終わったら一度シャットダウンして、/etc/xen/hoge.cfg設定ファイルのmacアドレスを消します。

 vif = [''] 

起動したあとのデバイスマネージャ。IDEのHDDとNICにエラーのマークがつき、XenのPV SCSIディスクとXen Net Device Driverが増えています。
f:id:dharry:20090609041036j:image

次はPVドライバを導入して本当にパフォーマンスがあがっているかどうか確認してみたいと思います。

*1:/NOGPLPVだとGPLPVを読み込まないモードで起動します

Domain-0経由で仮想マシンにVNCで接続してみる

普段はDomain-Uの中にVNCをインストールして接続しているのですが、Xen3.3.1が原因なのか、Domain-UのWindowsXPにUltraVNCで接続するとマウスのカーソルがうまく動かず使いにくくなってしまいました。仕方がないので、直接Domain-U経由で仮想マシンの外から直接VNCで接続してみることにしました。*1

Xen3.1以降はsxpファイルで管理されるのですが、virshの使い方やフォーマットに慣れていないので旧式の設定ファイルに変更します。*2


対象Domain-Uを停止します。(winxp_wolfがvncもっさりになったうちの windows xp)

# virsh destroy winxp_wolf

sxpのファイルの情報を確認。uuidやmacアドレスなどを覚えておく。

# virsh dominfo winxp_wolf
Id:             -
名前:         winxp_wolf
UUID:           31b42c35-2d7b-7649-f7e0-d832f2f9d429
OS タイプ:   hvm
状態:         シャットオフ
CPU:            1
CPU 時間:     1.5s
最大メモリー: 1048576 kB
使用メモリー: 1048576 kB
Autostart:      disable
# grep mac /var/lib/xend/domains/31b42c35-2d7b-7649-f7e0-d832f2f9d429/*
            (mac 00:16:36:02:89:4b)

sxpファイルをバックアップ

# cd /var/lib/xend/domains
# tar cvzf winxp.tgz ./31b42c35-2d7b-7649-f7e0-d832f2f9d429

対象Domain-Uの定義を削除

# virsh list --all
 Id 名前               状態
----------------------------------
  0 Domain-0             実行中
  1 centos_zappa         ブロックされています
  - winxp_wolf           シャットオフ

# virsh undefine winxp_wolf
ドメイン winxp_wolf の定義は削除されています

/etc/xen以下にxen3.0.x系までの定義を作成。先ほどのuuidとmacを忘れずに。

# vim /etc/xen/winxp_wolf.cfg
name = "winxp_wolf"
uuid = "31b42c35-2d7b-7649-f7e0-d832f2f9d429"
maxmem = 1024
memory = 1024
vcpus = 1
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "c"
pae = 1
acpi = 0
apic = 0
localtime = 1
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
device_model = "/usr/lib64/xen/bin/qemu-dm"
usbdevice = "tablet"
sdl = 0
vnc = 1  #=> VNCを有効に
vncunused = 0
vnclisten="0.0.0.0" #=> listenはオールカマー
keymap = "ja"
vncdisplay = "1" #=> vncdisplay番号が (vncポート5900 + vncdisplay)になるので1だと5901
disk = [ "file:/var/lib/xen/images/winxp_wolf.img,hda,w" ]
vif = [ "mac=00:16:36:02:89:4b,bridge=xenbr0,script=vif-bridge" ]
serial = "pty"

Domain-Uを起動

# xm create -f /etc/xen/winxp_wolf.cfg
Using config file "/etc/xen/winxp_wolf.cfg".
Started domain winxp_wolf

ポートスキャンしてvncのポートが開いているか確認

# nmap localhost -p 5900-5910

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2009-06-09 02:22 JST
Interesting ports on localhost (127.0.0.1):
PORT     STATE  SERVICE
5900/tcp open   vnc
5901/tcp closed vnc-1
5902/tcp closed vnc-2
5903/tcp closed vnc-3
5904/tcp closed unknown
5905/tcp closed unknown
5906/tcp closed unknown
5907/tcp closed unknown
5908/tcp closed unknown
5909/tcp closed unknown
5910/tcp closed unknown

VNC-Viewerを使って接続。hostname:{vncdisplay} の形式で接続します。Domain-0が 192.168.1.4 なら 192.168.1.4:1 とします。
f:id:dharry:20090609022804j:image

Thanks!

これでまた快適になりました。ありがとう vnc, virsh. あとmanpagerもありがとう。

*1:リモートデスクトップを使えというのはなしで。。

*2:virshとか覚えないと

CentOS5.3 + Xen3.3.1 にしてみた

少し前にRedHat社は正式に仮想アプライアンスKVMにすることを発表しています。そのせいかRHEL5Xenのバージョンを更新する気はまったくない感じです。Novell SuSE Enterprise Linux 11 は Xen3.3.1になっているのに、RHEL5(CentOS5)は Xen3.0.3。それはないよなーと思います。ここの人が http://www.gitco.de/repo/ Xenの3.3.1を用意してくれておりましたので、SuSE11にあわせてうちのCentOS5.3もXen3.3.1にアップデートしてみました。

最初に万が一があるといやなのでノーマルカーネルをインストール

$ sudo yum install kernel.x86_64

リブートしてノーマルカーネルで起動。

$ sudo reboot

www.gitco.deさんのyumリポジトリを追加。

$ cd /etc/yum.repos.d/
$ sudo wget http://www.gitco.de/repo/CentOS5-GITCO_x86_64.repo
$ sudo yum clean all
$ sudo yum list

そのまま、yum update をしてみたところ、なんだかコンフリクトしている警告でまくり。問題の衝突しているっぽいものをアンインストール。

$ sudo yum remove libvirt-python
==========================================================================================
 Package                 Arch           Version                   Repository         Size
==========================================================================================
Removing:
 libvirt-python          x86_64         0.3.3-14.el5_3.1          installed         230 k
Removing for dependencies:
 gnome-applet-vm         x86_64         0.1.2-1.el5               installed         121 k
 python-virtinst         noarch         0.300.2-12.el5            installed         614 k
 virt-manager            x86_64         0.5.3-10.el5              installed         3.9 M
 xen  

xen-libが抜けてた。そもそもi386,x86_64のものが2つ入ってたのか。よろしくない構成だったのね。。

$ sudo yum remove xen-libs
==========================================================================================
 Package              Arch            Version                    Repository          Size
==========================================================================================
Removing:
 xen-libs             i386            3.0.3-80.el5_3.2           installed          252 k
 xen-libs             x86_64          3.0.3-80.el5_3.2           installed          250 k
Removing for dependencies:
 libvirt              i386            0.3.3-14.el5_3.1           installed          3.4 M
 libvirt              x86_64          0.3.3-14.el5_3.1           installed          3.4 M
 virt-viewer          x86_64          0.0.2-2.el5                installed           48 k

新しいxenをインストール。

$ sudo yum install xen
==========================================================================================
 Package                    Arch              Version              Repository        Size
==========================================================================================
Installing:
 xen                        x86_64            3.3.1-0              gitco            8.8 M
Installing for dependencies:
 libvirt                    x86_64            0.4.4-3              gitco            1.8 M
 libvirt-python             x86_64            0.4.4-3              gitco            111 k
 python-virtinst            noarch            0.400.0-5            gitco            333 k
 xen-libs                   x86_64            3.3.1-0              gitco            159 k

virt-manager忘れてた。

$ sudo yum install virt-manager
==========================================================================================
 Package                   Arch              Version               Repository        Size
==========================================================================================
Installing:
 virt-manager              x86_64            0.6.0-1               gitco            1.3 M
Updating:
 gtk-vnc                   x86_64            0.3.7-2               gitco             78 k
 gtk-vnc-python            x86_64            0.3.7-2               gitco             13 k
Installing for dependencies:
 gtkglext-libs             x86_64            1.2.0-6               gitco            143 k

リブートしてxenカーネルで起動。

$ sudo reboot

問題なく起動できた。xenのバージョンもちゃんと3.3.1になってる。

$ sudo xm dmesg
 __  __            _____  _____  _
 \ \/ /___ _ __   |___ / |___ / / |
  \  // _ \ '_ \    |_ \   |_ \ | |
  /  \  __/ | | |  ___) | ___) || |
 /_/\_\___|_| |_| |____(_)____(_)_|

(XEN) Xen version 3.3.1 (root@gitco.tld) (gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)) Tue Jan 20 23:00:48 CET 2009

virt-managerもちょっと良くなった。

  • Console、概要、ハードウェアプロパティがタブで切り替えられる。
  • ハードウェアプロパティでBoot Optionsが増えた。AutostartVMとか設定できる。

f:id:dharry:20090607085440j:image

Xen.orgの3.3.1のページにあるようにかなりいい感じです。*1
http://www.xen.org/download/index_3.3.1.html

  • Power management (P & C states) in the hypervisor
  • HVM emulation domains (qemu-on-minios) for better scalability, performance and security
  • PVGrub: boot PV kernels using real GRUB inside the PV domain
  • Better PV performance: domain lock removed from pagetable-update paths
  • Shadow3: optimisations to make this the best shadow pagetable algorithm yet, making HVM performance better than ever
  • Hardware Assisted Paging enhancements: 2MB page support for better TLB locality
  • CPUID feature levelling: allows safe domain migration across systems with different CPU models
  • PVSCSI drivers for SCSI access direct into PV guests
  • HVM framebuffer optimisations: scan for framebuffer updates more efficiently
  • Device passthrough enhancements
  • Full x86 real-mode emulation for HVM guests on Intel VT: supports a much wider range of legacy guest OSes
  • New qemu merge with upstream development
  • Many other changes in both x86 and IA64 ports

RHELの古いXenから開放されたのでやっとGPLPVが使えそうです。

*1:最初からXenServer使えばいいっていうのはなしで。

Xenのディスクイメージファイルを拡張してみた

Xenのディスクイメージファイルを拡張してみました。]]Ubuntu Japan[[ にXenのディスクイメージの拡張方法が書いてあったので試してみたのですが、なかなかうまくいきませんでした。

# cd /etc/xen/images
# mv sarge-root.img sarge-root.img.old
# dd if=/dev/zero of=zero-1gb.img bs=1024k count=1024
# cat sarge-root.img.old zero-1gb.img > sarge-root.img
# e2fsck -fv sarge-root.img
# resize2fs sarge-root.img
# e2fsck -fv sarge-root.img
# xm create /etc/xen/sarge -c

上記の手順だと少なくともOSがLinuxでLVMでインストールした場合はうまくいきません。とりあえず色々調べてみて、一応できるようになったので備忘録として残しておきます。

手順はこんな感じ

作業はすべてrootでおこなっています。

  1. DomainUを停止
  2. ddやcatでディスクイメージのサイズを大きくする
  3. losetupでXenイメージファイルをループバックデバイスで制御できるようにする
  4. fdiskで区画を変更する
  5. 使ったループバックデバイスを削除する
  6. DomainUを起動
  7. pvresizeでFree領域を拡張する
  8. lvresizeでlvを拡張
  9. resize2fsでスライス拡張

DomainUを停止

適当に停止してください。

$ xm destroy test001

ディスクイメージのサイズを大きくする

通常の場合。ここでは3GB増やしてみる。

$ mv test001.img test001.img.bak
$ dd if=/dev/zero bs=1M count=0 seek=3072 of=./zerofile.img
$ cat test001.img.bak zerofile.img > test001.img

スパースファイルの場合(ここ参考)

$ cp -p --sparse=auto test001.img test001.img.bak # sparse-fileを維持してコピー
$ ls -ls test001.img
1081764 -rwxr-xr-x 1 root root 2147483649 Apr 16 03:16 test001.img
$ ruby -e 'File.open("test001.img","a").truncate(5<<30)'
$ ls -ls test001.img
1081764 -rwxr-xr-x 1 root root 5368709120 Apr 16 03:45 test001.img

losetupでXenイメージファイルをループバックデバイスで制御

空きloopbackデバイスを調べてループバックデバイスを設定します。

$ losetup -f
/dev/loop0
$ losetup /dev/loop0 ./test001.img
$ losetup -a
/dev/loop0: [fd00]:19367365 (./test001.img)
$ fdisk -lu /dev/loop0

Disk /dev/loop0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders, total 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *          63      208844      104391   83  Linux
/dev/loop0p2          208845     4192964     1992060   8e  Linux LVM

fdiskで区画を変更する

fdiskで対象のスライスをいったん削除してシリンダサイズを再設定します。

$ fdisk  /dev/loop0

Command (m for help): d
Partition number (1-4): 2

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (14-652, default 14):
Using default value 14
Last cylinder or +size or +sizeM or +sizeK (14-652, default 652):
Using default value 652

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/loop0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *           1          13      104391   83  Linux
/dev/loop0p2              14         652     5132767+  8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

使ったループバックデバイスを削除する

マナーとしてちゃんと後処理をする。

$ losetup -d /dev/loop0

DomainUを起動

$ xm create test001 -c

pvresizeでFree領域を拡張する

最初のpvscanでは "0 free" だが、pvresizeのpvscanでは "3.00 GB free" になっていることを確認。

$ pvscan
  PV /dev/xvda2   VG VolGroup00   lvm2 [1.88 GB / 0    free]
  Total: 1 [1.88 GB] / in use: 1 [1.88 GB] / in no VG: 0 [0   ]
$ pvresize /dev/xvda2
  Physical volume "/dev/xvda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized
$ pvscan
  PV /dev/xvda2   VG VolGroup00   lvm2 [4.88 GB / 3.00 GB free]
  Total: 1 [4.88 GB] / in use: 1 [4.88 GB] / in no VG: 0 [0   ]

lvresizeでlvを拡張

$ lvscan
  ACTIVE            '/dev/VolGroup00/LogVol00' [1.47 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [416.00 MB] inherit
$ lvdisplay /dev/VolGroup00/LogVol00
  --- Logical volume ---
  LV Name                /dev/VolGroup00/LogVol00
  VG Name                VolGroup00
  LV UUID                oeAdv9-Cml8-04Ja-uZDM-3cvt-ZwIn-KXzEAM
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1.47 GB
  Current LE             47
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

$ lvresize -L +3G /dev/VolGroup00/LogVol00
  Extending logical volume LogVol00 to 4.47 GB
  Logical volume LogVol00 successfully resized

resize2fsでスライス拡張

resize2fsでスライスを拡張します。LV Sizeは 先ほどは 1.47GBだったのが 4.47GBになっていることを確認。

$ resize2fs /dev/VolGroup00/LogVol00
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
Performing an on-line resize of /dev/VolGroup00/LogVol00 to 1171456 (4k) blocks.
The filesystem on /dev/VolGroup00/LogVol00 is now 1171456 blocks long.

$ lvdisplay /dev/VolGroup00/LogVol00 | grep "LV Size"
  LV Size                4.47 GB
$ df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                      4.4G  901M  3.3G  22% /
/dev/xvda1             99M   13M   81M  14% /boot
tmpfs                 151M     0  151M   0% /dev/shm

OpenSolaris 2008.11版インストールしてみた

日本製のOpenSolarisディストリビューションの「Jaris」がクールな感じで使ってみたかったのですが、僕のDELL Inspiron 1420 ではNICが認識しませんでした。無線NICは認識しているんだけど私の家は無線使ってないのでアウト。Compiz Fusionもグリグリできてクールなのに残念。

DELL Inspiron 1420 の NICドライバ は BCM5906M。ぐぐってみるとOpenSolarisの snv_100 で 対応してくれているようです。*1
http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6603710

Bug ID 6603710
Synopsis Request: support for Broadcom NetLink BCM5906M Fast Ethernet PCI Express(pci14e4,1713.17aa.3861.2)
State 10-Fix Delivered (Fix available in build)
Category:Subcategory driver:bge
Keywords
Responsible Engineer Yong Tan
Reported Against snv_83 , snv_85 , snv_87 , osol_2008.05
Duplicate Of
Introduced In solaris_nevada
Commit to Fix snv_100

2008.11版のOpenSolarisは snv_101b(Solaris Nevada build バージョンでいいのかな?) ですので、こっちに乗り換えてみました。

OpenSolaris 2008.11版ダウンロード

OpenSolarisダウンロードセンターから2008.11版をダウンロード。適当にDVDにでも焼いてください。

wget http://dlc.sun.com/osol/opensolaris/2008/11/osol-0811.iso

OpenSolaris 2008.11版インストール

OpenSolarisのメディアをbootさせるとそのままLiveCDとして起動します。
デスクトップにある「OpenSolarisをインストールする」アイコンをクリックしてインストールを始めます。
f:id:dharry:20090405232016p:image

ようこそ画面
f:id:dharry:20090405232027p:image

パーティション設定
f:id:dharry:20090405232026p:image

タイムゾーン
f:id:dharry:20090405232025p:image

ロケール
f:id:dharry:20090405232022p:image

ユーザ
f:id:dharry:20090405232020p:image

インストール確認画面
f:id:dharry:20090405232019p:image

インストール中
f:id:dharry:20090405232017p:image

ネットワークの設定

ネットワークの設定をします。スタティックにIPを割り振るので[手動](Manually)で設定します。[システム] -> [システム管理] -> [ネットワーク]

f:id:dharry:20090406025011p:image
f:id:dharry:20090406025010p:image

名前解決でDNSをちゃんと参照するように/etc/nsswitch.confを修正

$ vi /etc/nsswitch.conf
hosts: files dns

extraリポジトリの追加

ここを参考。Sun Online Account を取得してSun ID と Passoword を入れログインして2つのファイルを取得。Sun ID は登録時のメールアドレスになります。

  • Download(key)
  • Doenload Certificate
$ pfexec mkdir -m 0755 -p /var/pkg/ssl
$ pfexec cp -i ./OpenSolaris_extras.key.pem /var/pkg/ssl
$ pfexec cp -i ./OpenSolaris_extras.certificate.pem /var/pkg/ssl
$ pfexec pkg set-authority \
> -k /var/pkg/ssl/OpenSolaris_extras.key.pem \
> -c /var/pkg/ssl/OpenSolaris_extras.certificate.pem \
> -O https://pkg.sun.com/opensolaris/extra/ extra

パッケージマネージャで必要なアプリをインストール

好みのアプリをインストール。

$ sudo pkg install SUNWgcc SUNWruby18 SUNWscreen

Xenを使えるように設定

Domain0に必要なものをインストール。ここ参考。あとxvmとかvirtと付くものは適当にインストール。

 $ sudo pkg install SUNWvirt-manager SUNWvirtinst SUNWxvmhvm SUNWvirtinst SUNWlibvirt SUNWurlgrabber

Xen-kernelをgrubのmenu.lstに追加

$ sudo vim /rpool/boot/grub/menu.lst
title OpenSolaris 2008.05 snv_101b_rc2 X86 xVM
bootfs rpool/ROOT/opensolaris
kernel$ /boot/$ISADIR/xen.gz
module$ /platform/i86xpv/kernel/$ISADIR/unix /platform/i86xpv/kernel/$ISADIR/unix -B $ZFS-BOOTFS
module$ /platform/i86pc/$ISADIR/boot_archive

Domain0で起動するkernelを追加したgrubのmenu.lstをリンク

 $ sudo ln -s /rpool/boot/grub/menu.lst /boot/grub/menu.lst

リブートして、Xen-Kernelで起動。virt-managerでXenDomainUの起動もOK!.
f:id:dharry:20090406025008p:image

感想

  • まったく違和感なく使えてびっくり。
  • 体感でVMwareESXiやLinuxXenより若干重い感じ。
  • XenSolaris Containerは併用できそう。
  • Xen-KernelでもCompiz Fusionでぐりんぐりん画面できた。

*1:Jarisの2008.10リリース版は nv_98 みたい。

ネットワーク上にある仮想マシンを探す方法

仮想マシンがたくさん増えるとその管理も大変になります。仮想化を推し進めればコストダウンになると思いきや、単純にサーバの数が増えるので管理コストが増えしまいます。いいかげんな開発環境によっては勝手にIPを振り仮想マシンをボコボコ起動させる人もいますので、ネットワーク上にある仮想マシンを探すようにしてみました。

準備

  • nmap(なるべく新しいversion)*1
  • ruby
  • nmap-parser

検索方法

nmapを使うだけで検知できます。仮想マシンはMACアドレスのベンダー部が決まっているのでそこから判別しています。これだと少し見難いです。

C:\admin>nmap  -sP  192.168.1.0/24

Starting Nmap 4.76 ( http://nmap.org ) at 2009-02-07 02:44 東京 (標準時)
Host 192.168.1.1 appears to be up.
MAC Address: 00:0D:02:23:7D:91 (NEC AccessTechnica)
Host crimson (192.168.1.3) appears to be up.
Host epitaph (192.168.1.4) appears to be up.
MAC Address: 00:22:19:19:98:F8 (Dell)
Host moonchild (192.168.1.10) appears to be up.
MAC Address: 00:1C:23:FB:7C:74 (Dell)
Host bound (192.168.1.11) appears to be up.
MAC Address: 00:0C:29:98:0D:33 (VMware)

コード

もう少し綺麗に出力したいので、nmap-parserを使った簡単なコードを書いてみました。

  • nmap-parserをインストールします。
C:\admin>gem install nmap-parser
Successfully installed nmap-parser-0.3.1
1 gem installed
Installing ri documentation for nmap-parser-0.3.1...
Installing RDoc documentation for nmap-parser-0.3.1...
  • サンプルコード
#!/usr/bin/ruby
require 'rubygems'
require 'nmap/parser'

array = []
parser = Nmap::Parser.parseread($stdin)
parser.hosts {|host| array << [host.addr, host.mac_addr] }

xen_mac = /^00:16:3E/
vmw_mac = /^00:0C:29/
array.select {|a|
  puts "#{a.join(" ")} xen"    if a[1] =~ xen_mac
  puts "#{a.join(" ")} vmware" if a[1] =~ vmw_mac
}

使用方法ですが上記コードを適当な名前で保存して実行してください。nmap の -oX は結果をXMLで出力します。

C:\admin>nmap -oX - 192.168.1.0/24  | ruby vir_scan.rb
192.168.1.11 00:0C:29:98:0D:33 vmware
192.168.1.12 00:0C:29:4D:B4:61 vmware
192.168.1.31 00:0C:29:57:ED:E6 vmware
192.168.1.41 00:16:3E:67:F3:E7 xen
192.168.1.43 00:16:3E:0C:DC:55 xen
192.168.1.44 00:16:3E:7E:09:A5 xen

nmapには対象ホストのOSを推測する OS fingerprinting 機能があります。 この機能を使えばさらに詳細に調べることができると思います。

*1:centos5.2のNmap4.11ではnmap-parserを使ったコードが失敗してしまった