labunix's blog

labunixのラボUnix

vmplayer内のdebianにvirtualboxを導入

■vmplayer内のdebianにvirtualboxを導入。
 以前にもsqueezeでやってたりもするが、
 今回はWheezy。VT-xを有効、virshで操作する。

 Squeezeのvmplayerの仮想マシンのvmsqueezeにVirtualboxを導入する
 http://labunix.hateblo.jp/entry/2012/06/03/165405

■以下のニュースもあったので、色々行き詰まってるのでしょうね。

 米Oracle、Sun仮想化プロダクトの開発終了へ
 http://news.mynavi.jp/news/2013/07/16/162/index.html

---抜粋---
 Oracle Secure Global Desktopおよび
 Oracle VM VirtualBoxの開発に関しては引き続き提供
----------

■ホストOS(debian wheezy)とVMWare Player + VMWare VIX は普通にインストール。
 ※別にXDMCP経由でやる必要ないですし、Wheezyでも手順は同じです。。。

 ネットノート(V5-171-F58D/S)をWheezy化
 http://d.hatena.ne.jp/labunix/20130708

 XDMCP経由でVMware-Player、VMware-VIXをインストールする。
 http://ameblo.jp/labunix/entry-10989332569.html

■vmware-tools用。
 リモート操作時には必要性を感じたことが無いのと、
 VMWare固有のゲストOSにしたくないので、最近はどのゲストOSにも入れてません。

 vmplayerのVyattaにvmware-toolsを導入
 http://d.hatena.ne.jp/labunix/20120806

$ echo "build-essential dh-make debhelper devscripts linux-headers-`uname -r`" | \
  sudo apt-get install -y `xargs`

■Virtualbox用の仮想マシンの導入
 Intel VT-xを有効にした1CPUを割り当て。
 ※ホストOSのGnome3がフォールバックモードなので、
  GUIはインストーラではなく別途導入、classicモードでログインします。

$ grep flags /proc/cpuinfo | sed s/" "/"\n"/g | grep vmx
vmx
$ sudo apt-get install -y gdm3 gnome-session gnome-terminal uim-anthy
$ sudo apt-get build-dep uim-anthy

■nfsv4でマウント、ISOイメージが見えるようにする。
 ※普通にダウンロードすれば良いです。。。
  scpでもftp/ftpsでもsmbclientでもその他なんでも。。。

 NFS+Xenのライブマイグレーションを試す
 http://labunix.hateblo.jp/entry/20130715/1373888357

■VirtualBoxの導入
 現在の最新版はVirtualBox 4.2.16。

 Download VirtualBox
 https://www.virtualbox.org/wiki/Downloads

$ sudo apt-get install -y virtualbox
$ virtualbox --help | head -1
Oracle VM VirtualBox Manager 4.1.18_Debian

■virshコマンドを使えるようlibvirt-binを導入

$ sudo apt-get install -y libvirt-bin uuid-runtime

$ sudo virsh list
 Id    Name                           State
----------------------------------------------------

■今回はvmrunのnoguiオプションで起動、「ssh -X」でGUI起動。

$ vmrun -T player start vmware/vbox-wheezy/vbox-wheexy.vmx nogui
$ ssh -X vbox-wheezy
$ virtualbox &

■ゲストOSのインストール
 ハードディスクはvmdkも選べます。
 ストレージでISOイメージをCDドライブに割り当て。
 入れるのは、当然Wheezy。

■virshで確認
 ユーザ権限で実行されているので、ユーザ権限でvirshコマンドを実行する。

$ ps aux | grep virtualbox | grep -v grep | \
  sed s%" .* /"%" "%g | sed s/"\(--startvm\) .* \(--no-startvm\)"/"\1 \"UUID\" \2"/
labunix usr/lib/virtualbox/VirtualBox
labunix usr/lib/virtualbox/VBoxXPCOMIPCD
labunix usr/lib/virtualbox/VBoxSVC --auto-shutdown
labunix usr/lib/virtualbox/VirtualBox --comment vdebian --startvm "UUID" --no-startvm-errormsgbox

$ virsh list
 Id    Name                           State
----------------------------------------------------
 1     vdebian                        running

$ virsh vcpucount 1
maximum      config         1
maximum      live          32
current      config         1
current      live           1

■autostart には対応していない様子。

$ virsh autostart vdebian
error: Failed to mark domain vdebian as autostarted
error: this function is not supported by the connection driver: virDomainSetAutostart

■自動起動にはそれなりに手間をかける必要がある様子。

 VirtualBox init.d service autostart script
 http://www.amiryan.org/2009/11/04/virtualbox-init-d-service-autostart-script/

■テンプレートの作成は可能なので、以下4箇所を変更すれば使えるはず。

 名前の変更
 uuidgenコマンドで得たUUIDに変更
 vdiディスクのコピー、場所を指定
 MACアドレスの変更

$ virsh dumpxml vdebian > vdebian.xml
$ wc -l vdebian.xml 
43 vdebian.xml

■IPは特に設定していないし、テンプレート内にも無いが、ログに出る。
$ grep DHCP VirtualBox\ VMs/vdebian/Logs/VBox.log
00:13:49.641 NAT: DHCP offered IP address 10.0.2.15
00:13:49.721 NAT: DHCP offered IP address 10.0.2.15

■上記を参考にテンプレートを修正
 「-t」で「uuidgen」を時刻ベースに強制、MACアドレスの下4桁分の16進数に割り当てている。
 テンプレート元の仮想マシンからのコピー操作だけは、仮想マシンをシャットダウンした状態で行う。

$ cp vdebian.xml vdebian2.xml
$ sed -i s/"name>vdebian"/"name>vdebian2"/ vdebian2.xml
$ sed -i s%"<uuid>.*</uuid>"%"<uuid>`uuidgen`</uuid>"% vdebian2.xml 
$ cp -r ~/VirtualBox\ VMs/vdebian/ ~/VirtualBox\ VMs/vdebian2
$ sed -i s%"/[a-z]*.vdi"%"2&"% vdebian2.xml
$ MYMAC=`uuidgen -t | cut -c 1-4 | sed s/"^.."/"&:"/`
$ sed -i s%"\(<mac address=...:..:..:..:\)[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]\(./>\)"%"\1${MYMAC}\2"% vdebian2.xml

■おまけに今回はCPU数も他の仮想ツールのゲストOSに合わせて2CPUに変更。
 また、vmplayerとの同時比較を行うためにメモリを512MBに変更

$ sed -i s%"\(<vcpu placement=.static.\)>1<\(/vcpu>\)"%"\1>2<\2"% vdebian2.xml
$ echo "512" | awk '{print $1*1024}'
524288
$ sed -i s/"393216"/"524288"/g vdebian2.xml

■テンプレートから新しいゲストOSを生成

$ virsh define vdebian2.xml

$ virsh list

■VBOXManageコマンドではUUIDで管理しているので、
 稼働中ならそれを変数に入れて次回の起動コマンドに渡せる。

$ VBoxManage list vms | sed s/"{.*}"/"{ UUID }"/
"vdebian" { UUID }

$ UUID=`VBoxManage list vms | sed s/".*{\|}"//g`
$ VBoxHeadless --startvm $UUID

■virsh dumpsmlにはUUIDがあるので、上記同様に変数に渡せる。

$ UUID=`grep uuid vdebian2.xml  | sed s%" *<[/u]*id>"%%g`
$ VBoxHeadless --startvm $UUID
$ VBoxManage list vms | sed s/"{.*}"/"{ UUID }"/g
"vdebian" { UUID }
"vdebian2" { UUID }

■vmdkと以下のサイトのテンプレートを修正すればすぐに使えそう。
 vmplayer用もあるということは?。。。

 ※メモリ640MBとかVCPUが1個とかslaxとか。。。
  要件は自身で気にしてください。

 VirtualBox hypervisor driver
 http://libvirt.org/drvvbox.html

 VMware Workstation / Player hypervisors driver
 http://libvirt.org/drvvmware.html

■参考

 ■[VirtualBox] VirtualBoxをCUIで使う
 http://d.hatena.ne.jp/ao3/20110212/1297541305

■まとめ
 体感ではあるが、Virtualboxの動作は意外と(?)びっくりするほど遅い。
 あまりに遅いので、VMWare Playerも入れてみたがこちらの方が全然速い。	

 3年位前にVMWare Playerと比較して、ネットワークをきちんと制御できないとか、
 ゲストOSでブルースクリーンが拝める確率が高いとかは経験上記憶にあるけど、
 あまり進歩していないどころか、他の仮想化ツールに比べて大きく遅れをとっている印象。

 Virtualboxの構成を他の仮想化ツールに合わせて2CPUに変更したが、そういう問題ではないようだ。
 GUIを出さずに起動するとずっとマシになるがそれでも遅い。

 速さなので、小さいほど速いとすると、
 同じvmplayer上にゲストOSとして構成した仮想化ツールは、
 以下のような位置づけとなる。

 qemu-kvm >> virtualbox >>>>> vmplayer > Xen,ESXi

 ※Xen4.1とESXi5.1が一番速くて、体感速度は同じくらい。
  「>」の数は「3年単位の何世代前か」というイメージで付けた。
  Virtualboxは18年前のマシン性能、qemu-kvmは24年前の。。。
  ベンチマークして数字を出すと面白いかも知れないが、
  そこまでして遅い仮想化ツールを使う気にはならない。
  意味があるベンチマークはXenとESXiの比較くらいだろう。

■vmplayer上に構成した他の仮想化ツールは以下。

 vmplayer内のWheezyにXenを導入
 http://d.hatena.ne.jp/labunix/20130702

 vmplayer内のXenを、ルーティングモードでブリッジする。
 http://labunix.hateblo.jp/entry/20130714/1373786242

 Xenの設定
 http://labunix.hateblo.jp/entry/20130715/1373882921

 NFS+Xenのライブマイグレーションを試す
 http://labunix.hateblo.jp/entry/20130715/1373888357

 WheezyにQEMU-KVMを導入
 http://labunix.hateblo.jp/entries/2013/07/16