目次

VirtualBox クイックセットアップ

2013/06/05
FreeBSD/AMD64 9.1-RELEASE にVirtualBoxをインストールしVMをヘッドレスで動作させるためのインストールからあれこれ。

インストール

VirtualBox-oseインストール

インストール前に現在稼動中のFreeBSDのソースを取得しておくこと。cvsupのサービスは終わっているので subversion 等で取得することになる。 次にPortsの更新も実施。こちらは portsnap を使うことになるかと思う。

/etc/groupに vboxusers が存在するとインストールの最後でエラーになる。問題なければ抹消する。

下準備が済んだら、Portsで emulators/virtualbox-ose を導入する。

今回Configで指定したのはこんなオプション。

WEBSERVICE にチェックを入れた。WEBSERVICEは phpvirtualbox で使用する。

インストールが終わるとメッセージで設定を教えてくれる。

=============================================================================

VirtualBox was installed.

You need to load the vboxdrv kernel module via /boot/loader.conf:

vboxdrv_load="YES"

You also have to add all users to your vboxusers group in order to use vbox.

% pw groupmod vboxusers -m jerry

Reboot the machine to load the needed kernel modules.


Bridging Support:
=================

For bridged networking please add the following line to your /etc/rc.conf:

vboxnet_enable="YES"


USB Support:
============

For USB support your user needs to be in the operator group and needs read
and write permissions to the USB device.

% pw groupmod operator -m jerry

Add the following to /etc/devfs.rules (create if it doesn't exist):

[system=10]
add path 'usb/*' mode 0660 group operator

To load these new rule add the following to /etc/rc.conf:

devfs_system_ruleset="system"

Then restart devfs to load the new rules:

% /etc/rc.d/devfs restart


Troubleshooting:
================

Running VirtualBox as non-root user may fail with a fatal error
NS_ERROR_FACTORY_NOT_REGISTERED. In this case delete /tmp/.vbox-*-ipc file.

Check wiki page for known issues and troubleshooting:
http://wiki.freebsd.org/VirtualBox

Please report any problems to emulation@. Thanks!

=============================================================================

まず /boot/loader.conf への追記。

vboxdrv_load="YES"

今回、VMを外部から参照できるようにするため、ブリッジを有効にする。/etc/rc.confへの追記。

vboxnet_enable="YES"

グループ vboxusers に必要なユーザを参加させておく。

# pw groupmod vboxusers -m jerry

これはユーザ jerry をグループ vboxusers に追加する。筆者は自身のアカウントおよびrootを追加した。これが推奨されるものかどうかはわからないので注意。

また、グループ名と同じユーザvboxusersが作成されるが、筆者は気に入らないのでユーザvboxを別途作成し、これをvboxusers に追加した。 済んだら再起動実施。VirtualBoxのカーネルモジュールが読み込まれたシステムが起動する。kldloadコマンドでもいいかもしれない。

注意

Portsではコンパイル・インストールが成功しているように見えても、実はインストールに失敗している場合があった。 /boot/modules にあるVirtualBox関連モジュールの置き換えがうまくいかないことがある。関連モジュールの日付を見て、古いままだったら手動で置き換えを実施する。

root@amanda:# pwd
/boot/modules
root@amanda:# ls -l
total 440
-rw-r--r--  1 root  wheel     264  5月 19 03:10 linker.hints
-r-xr-xr-x  1 root  wheel  338120  5月 19 03:10 vboxdrv.ko    ←
-r-xr-xr-x  1 root  wheel    9664  5月 19 03:10 vboxnetadp.ko ←
-r-xr-xr-x  1 root  wheel   26808  5月 19 03:10 vboxnetflt.ko ←
root@amanda:#

phpVirtualBoxのインストール

名前のとおりPHPを使ったVirtualBoxのGUI。設定GUIをWebブラウザで操作できる。

ApacheをWebサーバに使う事にする。ApacheとPHPを先にインストールしておく。その後にphpVirtualBoxをインストールする。いずれもPortsで導入すればok。

環境設定

VirtualBox-oseをインストールした環境

VirtualBox-oseをインストールした環境下で、以下を実行。

root@amanda:# su -l vbox
You can disable tcsh's terminal beep if you `set nobeep'.
$ vboxwebsrv --host 192.168.1.20
Oracle VM VirtualBox web service Version 4.2.6_OSE
(C) 2007-2013 Oracle Corporation
All rights reserved.
VirtualBox web service 4.2.6_OSE r82870 freebsd.amd64 (May 20 2013 21:36:34) release log
00:00:00.000162 main     Log opened 2013-05-20T14:32:12.401313000Z
00:00:00.000180 main     OS Product: FreeBSD
00:00:00.000189 main     OS Release: 9.1-RELEASE
00:00:00.000198 main     OS Version: FreeBSD 9.1-RELEASE #16: Tue Dec 11 07:06:45 JST 2012     root@amanda.root.hgotoh.jp:/usr/obj/usr/src/sys/GENERIC
00:00:00.000205 main     Executable: /usr/local/lib/virtualbox/vboxwebsrv
00:00:00.000207 main     Process ID: 40011
00:00:00.000210 main     Package type: BSD_64BITS_GENERIC (OSE)
00:00:01.159858 SQPmp    Socket connection successful: host = 192.168.1.20, port = 18083, master socket = 8

vboxwebsrvコマンドでWebサービスが開始され、IPアドレス 192.168.1.20, ポート18083で待受けしている状態。
オプション

--host 待ち受けIPアドレス

を指定しないと、待ちうけが localhost になってしまうので外部(Webサーバ)から接続できなくなってしまう。

phpVirtualBoxをインストールした環境

次に、phpVirtualBoxをインストールした環境で設定を行う。

phpVirtualBoxは /usr/local/www/phpvirtualbox にインストールされる。

/usr/local/www/phpvirtualbox にある config.php の必要箇所を編集する。vboxwebsrvを起動したユーザのID/PASSと起動しているサーバのIPアドレスを指定するくらい。 今回編集したのは5行。

var $username = 'vbox';
var $password = 'パスワード';
var $location = 'http://192.168.1.20:18083/';
var $language = 'ja';
var $browserRestrictFolders = array('/home/vbox');

くりかえしになるが IPアドレス 192.168.1.20 はvboxwebsrvコマンドを実行しているサーバのIPアドレスになる。

次にWebサーバで/usr/local/www/phpvirtualboxを参照可能にする。面倒なんで以下でお茶を濁した。セキュリティ的にまずいので後でWebサーバの認証をかけるのを忘れないように。

ln -s /usr/local/www/phpvirtualbox /usr/local/www/apache22/data/phpvirtualbox

これでURL http://webserverhost/phpvirtualbox/ でアクセス可能となる。

Windowsで作成したVMをFreeBSDの上で動かす

先のURLでphpvirtualboxを呼び出す。 ログインダイアログが出るので、初期設定値である ユーザ名:admin パスワード:adminを入力。

もしこの表示が出たなら、PHPのSOAPエクステンションが入っていないかバージョンがあっていない。インストールもしくはバージョンアップグレードを実施。

ログインできるとこんな画面が出る。

古いマシンとバレバレだなこりゃ。 あとはWindows版でのGUIと同じ操作を実施すればよし。驚くほど忠実。

さて、おもむろにOSのインストールを始めてもいいけど、すでにWindows版でVMを作ってしまっているので、どうせならそのVMを利用して一からVMを作る手間を省く。VMのエクスポートを行い、これをFreeBSD上へ転送してインポートすればいい。

エクスポートは、VirtualBoxのGUIでメニューにある『仮想アプライアンスのエクスポート』を使ってエクスポートする。

エクスポートしたいVMの一覧が出るので、選択する。このとき、ターゲットのVMは停止状態でなければ駄目。 この例ではエクスポートしたVMは“samba4-machine-amd64.ova”という名称のファイルにまとめられる。中身はXMLで、VMのHDDもこの中に入っている。VMDKの形式の模様。

VirtualBox-oseをインストールした環境に作成した、ユーザvboxのホームディレクトリに“VirtualBox VMs”というディレクトリが作成されていて、インポートされたVMはこの中に格納される。 とりあえず /home/vbox にエクスポートしたファイルをコピーする。

コピーしたら、phpVirtualBoxの『仮想アプライアンスのインポート』を使ってインポートを行う。



インポート中のプログレスバーが出てくる。完了するとVMの一覧に追加される。
WindowsとFreeBSDではネットワークアダプタの名称が異なるので、そこは修正しなくてはならない。注意。

無事実行できた。

以降、このGUIを閉じても webserviceを終了させても VMは動作し続ける。