2013/06/05
FreeBSD/AMD64 9.1-RELEASE にVirtualBoxをインストールしVMをヘッドレスで動作させるためのインストールからあれこれ。
インストール前に現在稼動中の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:#
名前のとおりPHPを使ったVirtualBoxのGUI。設定GUIをWebブラウザで操作できる。
ApacheをWebサーバに使う事にする。ApacheとPHPを先にインストールしておく。その後にphpVirtualBoxをインストールする。いずれもPortsで導入すればok。
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は /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/ でアクセス可能となる。
先の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は動作し続ける。