chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

Debian wheezyにXenをインストール、ゲストOSとしてXPをインストール

AWSで使われているXenを理解するため、自宅のPCに入れてみた。

ハード仕様
Intel CPU Core i5 3570K 3.4GHz 6M
ASUSTek Intel Socket 1155 DDR3メモリ対応 P8Z77-V PRO
・CFD DDR3 W3U1600HQ-4G DDR3 PC3-12800 CL9 4GB x 4 (16GB)
・HDD (適当なS-ATAハードディスク(250G)においてパーティションを3つ作成)

インストール計画
・管理OS:Debian wheezy (64bit版)
・ゲストOS(1):XP(完全仮想化環境(HVM))
・ゲストOS(2):Ubuntu(準仮想化)
・ゲストOSとの接続はブリッジを利用
・ゲストOSのディスクは論理ボリューム(LVM)より切り出し

作業方針
・デスクトップにDebianが入った後はリモートPC(ノートPC)から作業を行う
Debianは最小限のパッケージに留める(X等は入れない)
・GUI画面等はノートPC上でVNC走らせて表示


==作業内容==

(0)マザーの設定

VT-dの項目を有効化する

(1)管理OSのインストール

Debian Weezyをネットインストール(Wheezy、amd64(64bit版)を利用)
管理OS(Debian)は極力何もない素で稼動させたいのでメタパッケージは何も選択せず、sshdだけあとから追加(確か下記の操作だったはず)

apt-get install ssh

(2)Xenのインストール


apt-get install xen-linux-system-amd64
OS再起動、Domain-0が動いていることを確認

(コマンド↓)
xm list
(出力↓)
Name ID Mem VCPUs State Time(s)
Domain-0 0 14926 4 r----- 6.1
上記の通り、Domain-0(仮想環境制御用ドメイン)が稼動

(3)Kernel起動順番の変更


dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen
update-grub
上記手順で、linux_xenが最初のブート候補になる(と理解)

(4)論理ボリュームの作成


apt-get install lvm2
pvcreate /dev/sda5
vgcreate VG00 /dev/sda5
lvcreate -L40G -n WinXP VG00
補足:
・/dev/sda5に物理ボリューム(Physical Volume)を作成
・ボリュームグループ(VG00)を/dev/sda5上に作成
・ボリュームグループ(VG00)から40Gを切り出して、WinXPという名前で論理ボリューム(Logical Volume)を作成

(5)ブリッジの設定


apt-get install bridge-utils

(bridge-utilsはすでに入っていた)

file: /etc/network/interfaces の修正(ブリッジ記述追加)


auto lo xenbr0
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet manual
iface xenbr0 inet static
bridge_ports eth0
address 10.0.128.130
netmask 255.255.255.0
network 10.0.128.0
broadcast 10.0.128.255
gateway 10.0.128.1
dns-nameservers 10.0.128.1

補足:
・xenbr0という名称でブリッジを作成
・xenbr0にはeth0を組み込み
・ブリッジのIPは10.0.128.130
networkサービス再起動で確認できるけど、OSの再起動もしてifconfigで結果確認
下記ifconfig実行結果。。xenbr0が追加したブリッジ設定

eth0 Link encap:Ethernet HWaddr 30:85:a9:41:b5:52
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:128 errors:0 dropped:0 overruns:0 frame:0
TX packets:119 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16900 (16.5 KiB) TX bytes:21651 (21.1 KiB)
Interrupt:20 Memory:f7c00000-f7c20000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

xenbr0 Link encap:Ethernet HWaddr 30:85:a9:41:b5:52
inet addr:10.0.128.130 Bcast:10.0.128.255 Mask:255.255.255.0
inet6 addr: fe80::3285:a9ff:fe41:b552/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:122 errors:0 dropped:0 overruns:0 frame:0
TX packets:117 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:14122 (13.7 KiB) TX bytes:20977 (20.4 KiB)


(6)ゲストOS(Windows XP)のインストール
上記作業で、ネットワーク(ブリッジ)とディスクの用意ができたので、ゲストOSを作る

file:/etc/xen/xp.cfg


builder = 'hvm'
name = 'xp'
memory = 512
kernel = '/usr/lib/xen-4.1/boot/hvmloader'
disk = [ 'phy:/dev/VG00/WinXP,hda,w' , 'phy:/dev/cdrom,hdc:cdrom,r' ]
vif = [ 'bridge=xenbr0' ]
device_model = '/usr/lib/xen-4.1/bin/qemu-dm'
boot = 'd'
sdl = 0
serial = 'pty'
vnc = 1
localtime = 1
keymap = 'en-us'
vnclisten = '0.0.0.0'
vncpasswd = ''
usb = 1
usbdevice = 'tablet'
・完全仮想化環境(HVM)を利用
・ディスクはHDDとCDで構成
・CDから起動(boot = d)
・ネットワークはブリッジ(xenbr0)を利用

XPのdiskを挿入しておいてから、以下で立ち上げ


xm create xp.cfg

ノートPC側で、ultraVNCを走らせて、 10.0.128.130:5900 で仮想化環境内のXPと接続

無事インストールできたら、インストール順番を変更

file:/etc/xen/xp.cfg


builder = 'hvm'
name = 'xp'
memory = 512
kernel = '/usr/lib/xen-4.1/boot/hvmloader'
disk = [ 'phy:/dev/VG00/WinXP,hda,w' , 'phy:/dev/cdrom,hdc:cdrom,r' ]
vif = [ 'bridge=xenbr0' ]
device_model = '/usr/lib/xen-4.1/bin/qemu-dm'
boot = 'c'
sdl = 0
serial = 'pty'
vnc = 1
localtime = 1
keymap = 'en-us'
vnclisten = '0.0.0.0'
vncpasswd = ''
usb = 1
usbdevice = 'tablet'

残る作業は、、インストールに使ったCDがSP2版XPだったので、SP3パッチをMSからダウンロードして当てて、それでもWindows Updateでエラーが出るので、MSのサポートページの手順に従ってあれこれやった。最終的にはたまたまUpdateが動くようになった。

Xenの解説本も買ったけどすでにXenのバージョンが上がっていて細かい所で仕様が変わっています。結構あちこちのサイトで情報を集めて動かしました。今は動いているけど、これで本当に最適なのかどうかは不明です。なお、PVドライバはまだ入れていません。

■補足
左の画面は作業を行ったノートPCの画面。画面左のウインドウは、ノートPCからデスクトップの仮想サーバ上のXPに対してVNCで接続しているところ(xpのパッチ適用作業中)。画面右のウインドウは、ノートPCからデスクトップの管理OS(Debian)にSSHで繋いで動作状況を見ていることろ。

■不明な点
管理OS(Debian)から仮想OS(XP)には疎通できるし、仮想OS(XP)から外部には通信できるのだけど、同一セグメント上のノートPCから仮想OS(XP)と疎通できない。ブリッジといいながら、なにかフィルタされているのか。。あるいは、、実はNATしているのか。。あるいは、物理NICと仮想NICMACが同じだったというオチか。。
/etc/xen/xend-config.sxpに(network-script network-bridge)を追加しないといけないのかも。ブリッジのセットアップが本来だれの仕事(Debianのnetwork管理下、または、Xenアプリ側でスクリプト起動?)なのか理解できていない。

■追記(130908)
ノートPCと仮想OS(XP)との疎通ができない件は結論から言うと、確認操作のまずさによるものであり、実際には疎通していた。補足すると、、PINGを使ってノートPC→仮想OS(XP)間の疎通確認をしたが、そもそもXPはPINGを返さないのであった(詳細不明)。このため疎通していないと誤解していた。改めて、ノートPC上でリモートデスクトップを走らせ、仮想OS(XP)に接続すると正常に表示された。

■やりたいこと。。仮想OSからUSBを操作する
仮想環境はほぼこれでOKと思うけど、実用に耐えるには仮想OSからUSB経由のデバイス操作が正しく行えるようにしたい。これはもう少し調べないと可能かどうか分からない。。VMWareだったら可能だったはずだけど。(XPの時計が+9時間ずれているのを直さないといけない。GMT->LocalTime変換している?)

■仮想サーバの時計を調整
XPを起動すると9時間時計がずれて表示される。9時間は、ローカルタイム/グローバルタイムの時差と思われる。そこで、xp.cfgに、ローカル時間を明示する以下を追加した。


localtime = 1
すると、時差9時間が補正されることなく、通常の時刻表示に戻った。

■参考URL

Xen Beginners Guide
http://wiki.xen.org/wiki/Xen_Beginners_Guide

HowTo: Xen 4.1.3 Windows 8 HVM domU with Intel HD4000 VGA Passthrough on Debian Wheezy
http://linux-bsd-sharing.blogspot.jp/2012/10/howto-xen-413-windows-8-hvm-domu-with.html

Stray Penguin様;Xenネットワーク
http://www.asahi-net.or.jp/~aa4t-nngk/xen2.html

xen dom0 networking
http://gentoovps.net/xen-dom0-networking/

Xen Wiki USB passthrough (これが動けば仮想OSでUSBをつかるはず)
http://wiki.xen.org/wiki/Xen_USB_Passthrough

参考にした本:
最新版のXenと差が出ていますが、Xenのインストール、仮想環境上へのOSインストール、論理ボリューム、仮想ネットワーク等、Xen環境を構築する上で必要なる情報が網羅されています。

Xen徹底入門 第2版 (CD-ROM付)

Xen徹底入門 第2版 (CD-ROM付)