仮想化ソフト「VirtualBox」をopenSUSE10.3上で動作させる

ここではオープンソースの仮想化ソフトVirtualBoxの手順について解説します。

※openSUSE11.2へVirtualBox3.xをインストールする新しい情報があります 2010/03/06
VirtualBoxOSE 3.x
VirtualBox3.x


 ・VirtualBoxのインストール
 ・仮想端末を使用するように設定する
 ・ネットワークを設定する
 ・Windowsをインストールするポイント

 ITの分野では近頃「仮想化」という話題が非常にホットです。
 これは企業のみならず、一般の家庭に住むパワーユーザにさえ恩恵を与えてくれます。
 それは最新のOSの上に、レガシーなOSを同時に動作させることで異なる環境を扱うことが出来ます。
 企業においてはサーバの台数を減らして一台のサーバにすることでコストを削減したり、老朽化したハードウェアを捨ててシステムだけ最新のハードウェア上で動作させることでシステムの延命を図ったりします。
 一般の家庭でも異なるOSを同時に動作させたり、セキュリティのチェックのための実験マシンを用意できます。
 これはパソコンを二台所有しているのと同じ意味があります。
 ただし気を付けてください。パソコンの性能も二倍必要であることを意味するのですから。

 Linuxにおいてはもっと率直な効果があります。
 それはLinux上でWindowsを動作させることで、Windowsアプリケーションを引き続き使うことが出来るからです。
 異なるバージョンのLinuxを同時に動作させることも可能です。

 仮想化ソフトには大別して二種類があります。
 それは動作している仮想OSをバックグラウンドで動かす「サーバ向け仮想化ソフト」と、動作しているOSの画面をフォアグランドで動作させる「デスクトップ向け仮想化ソフト」です。
 サーバ向け仮想化ソフトは、バックグラウンドで複数のサーバOSを動かす用途に適しています。普段はOSの画面が見えません。
 ・Xen
 ・VMWare Server

 デスクトップ向け仮想化ソフトは、他のOSをウィンドウ内で動作させるのに適しています。
 ・VMWare Player
 ・VirtualBoox


 完成度という点ではVMWareのほうが一日の長があるのですが、ここでは発展途上のオープンソース「VirtualBox」を動作させるまでの手順を取りあげます。
 というより苦労して動かしたのでその備忘録です。(ちなみにinnotekは2008年2月にSunに買収されました)

VirtualBoxのインストール

 openSUSE10.2でも動かないことはないですが、10.3のほうが簡単に動きます。
 まずVirtualBoxをダウンロードしてきます。
 VirtualBoxにはバイナリパッケージ版と、USB機能やRDP機能の省かれたオープンソース版とがあります。
 openSUSE10.3の「リポジトリの追加」にはVirtualBoxリポジトリがあるので、リポジトリを追加すればYaSTからインストールできるのですが、そちらからインストールできるのはオープンソース版(OSSEdition)です。
 ここはVirtualBoxの本家からバイナリ版をダウンロードしてきましょう。
 VirtualBox本家

 

 特にopenSUSEのバージョン別にあるので、それぞれ合ったものを選びましょう。
 ここでは10.3をダウンロードして、ローカルに保存します。
 RPMをダウンロードしてきたら、クリックしてインストールしてはいけません。
 というよりここでインストールを開始するとその後、なんかVirtualBoxの調子が悪いです。
 コマンドラインからインストールしましょう。

 >su
 #rpm -ivh VirtualBox-1.5.4_27034_openSUSE103-1.i586.rpm


 コマンドラインからインストールを実行すると、以下のように依存が足りない旨が表示されます。
 

 これらをYaSTから一つずつインストールして解決していきます。見つからない場合はリポジトリを追加しましょう。
  pam-devel
  libxalan-c.so.110
  libxerces-c.so.27

 
 ライブラリを追加後、VritualBoxパッケージを改めてインストールします。

 インストール後、VirtualBoxのカーネルモジュールを実行する必要があります。
 root権限でカーネルハックコマンドを実行します。

 >su
 #/etc/init.d/vboxdrv setup


 
 するとデフォルト環境ではfailedが出ます。これはカーネルソースがインストールされていないからです。
 YaSTからパッケージを選択してインストールします。

 ソフトウェア管理で「フィルタ」に「パターン」を選択し、「Linuxカーネル開発」を選択します。
 

 カーネルソースがインストールできたら、もう一度「/etc/init.d/vboxdrv setup」コマンドを実行すると成功します。
 環境によっては時間がかかるかもしれません。
 

仮想端末を使用するように設定する

 スタートメニューの「システム」の中にVirtualBoxが追加されているので起動してみましょう。
 

 起動が確認できましたでしょうか。
 仮想端末の中にインストールするOSのことを「ゲストOS」、本来動作している実物のOSを「ホストOS」と呼びます。

 試しに仮想端末を作成しましょう。
 まずは作成します。
 
 ウィザードに沿って、マシンの名前、仮想ディスクなどを作成します。

 仮想端末の作成後、起動させるとエラーが出ます。
 
 どういうことでしょう。仕方ないですね。
 メッセージをよく読むと「vboxusersにグループ追加しろ」みたいなことが書いてあります。

 VirtualBoxはいろいろなシステムファイルにアクセスする都合上、使用するユーザは特別なグループに所属する必要があるのです。
 YaSTの「セキュリティとユーザ」の「ユーザを作成あるいは編集する」を選択して、VirtualBoxを起動するユーザを選択し「編集」とします。
 ユーザ情報から「詳細」を選択し、右側にあるグループ一覧から「vboxusers」にチェックを入れます。
 
 グループ追加後は、一度ログアウトして再度ログインしないとグループ変更が有効になりません。
 これでユーザがVirtualBoxを起動できるようになります。

 VirtualBoxを起動します。
 仮想端末を新規作成して、設定をクリックします。

 またエラーがでます。
 
 USBサブシステムのアクセスに失敗しました。
 この様子ではVirtualBoxでUSBは使えそうにありません。

 実際にプロパティのハードウェア情報を見ると、USBの項目はありません。
 

 これはvboxusersがUSBデバイスにアクセスできないからです。
 http://en.opensuse.org/VirtualBox_USB_Support
 USBへのアクセスを、openSUSEに設定してあげる必要があります。

 まず「vboxusers」のグループIDを確認します。YaSTの「セキュリティとユーザ」の「グループを作成あるいは編集する」を選択します。
 グループ一覧には「users」しか表示されていませんが、「フィルタの設定」でシステムグループを選択してシステムグループ一覧を表示します。
 一覧からvboxusersを探し、グループIDを確認します。
 
 この環境では108でした。

 次にコマンドラインから「/etc/fstab」ファイルを編集します。もちろんシステムファイルなので、root権限で行う必要があります。
 ここには通常、自動マウントする情報が記述されているのですが、ファイルの最終行に

 none /proc/bus/usb usbfs devgid=108 devmode=664 0 0

 と記述します。
 

 編集後、システムを再起動します。これでVirtualBoxの設定を確認するとエラーが消えて、ハードウェア情報にUSBコントローラが追加されています。
 ですがまだ無効のままです。
 

 USBを有効にする場合仮想マシンの設定から「USBコントローラを有効にする」にチェックを入れます。
 

ネットワークを設定する

 次にネットワークの設定です。
 VirtualBoxのネットワークにはNAT、内部、ホストインターフェイス(HIF)の三種があります。
 
 仮想OS同士だけを通信させたければ「内部」を選択します。
 仮想OSも普通のOS同様、外部と通信したければNATかHIFを選択します。

 しかしNATを構築した場合は、ホストOSにルーティング機能を導入しなくてはなりません。LAN内の他のパソコンと異なるIPを使うことにもなります。
 仮想OSを「起動しただけで実物のPCと変わりなく使いたい」というのであれば、ホストインターフェイスを選択します。
 そこでホストインターフェイスを選択して、起動してみると…エラーが出ます。
 
 内容を見ると、HOST_IFが初期化できないとかなんとか。
 これは「ホストインターフェイスの設定」に使用できる有効なネットワークインターフェイスがないからです。
 有効なインターフェイスを作成しましょう。

 そう、ここからホストインターフェイスを使うための長い道のりが始まります。
 仮想マシンのNICはブリッジポートを介して物理NICからネットワークへ接続します。
 仮想マシンのための仮想NIC(TAP)を作成して仮想マシンに割り当て、ブリッジポートを作成し、ブリッジポートに仮想NICと物理NICを接続するという手順になります。
 まずブリッジポートを作成するのに必要なソフトウェアをインストールします。
 まだ諦めないでください。

 VirtualBoxのスクリプトから仮想アダプタを作成します。VirtualBoxはこのアダプタを使って通信をします。

 #VBoxAddIF vbox0 username

 ここではvbox0という仮想NICを作成しています。使用するusernameはVirtualBoxを実行するユーザ名を使用します。
 ここでうっかりrootを使用するとroot権でインターフェイスが作られてしまい、一般ユーザで使用するときに初期化が失敗してしまいます。
 作成したら、ifconfigで作成できていることを確認します。
 ifconfigで見えない場合はまだアクティブになっていない状態です。ifconfig -aとすると見えます。
 ifconfig vbox0 upとしてアクティブにします。

 ゲストOSが外部と通信するためにはホストOSのネットワークインターフェイスにVirtualBoxのための仮想インターフェイスを作成して、それを連結(ブリッジ)させる必要があります。
 そのためにはLinuxにネットワークをブリッジさせるbridge-utilsというブリッジ用のソフトウェアをインストールします。
 
 するとbrcntlというコマンドが利用可能になります。

 br0というブリッジを作成します。
 #brctl addbr br0

 ブリッジの一端に先ほど作成したvbox0を連結します。
 #brctl addif br0 vbox0

 ブリッジのもう一端にホストのインターフェイスを連結します。
 #brctl addif br0 eth0

 brctl showで連結できていることを確認します。

 最後に物理インターフェイスのIPアドレスを消し、br0にホストOSのIPアドレスを割り当ててアップさせます。
 #ifconfig eth0 0.0.0.0 up
 #ifconfig br0 192.168.1.99 up


 仮想端末にネットワークアダプタを設定します。
 

 ですがここでなぜかホストOSがデフォルトゲートウェイを見失ってしまいます。
 コマンドからデフォルトゲートウェイを指定します。
 #route -F add -net 0.0.0.0 gw 192.168.1.1

 ちなみにブリッジは再起動すると消えます。毎回コマンドを打つのが面倒なら、VirtualBoxの起動時にスクリプトを使用する必要があります。
 あるいはinit.dにブリッジを作成するスクリプトを配置します。

 もちろんゲストOSのネットワーク設定は、ゲストOS内で行います。

 ようやく準備が整い、ゲストOSをインストールします。
 ところがゲストOSがDHCPを取得できなかったり、外部と通信できなかったりします。
 なぜでしょう。
 実は単純な話なんです。それはホストOSのファイアウォールが、ゲストOSへの転送を遮断しているのです。
 本当ならポート単位で検討すべきなのですが、ここではてっとり早くファイアウォールを無効にしましょう。
 
 ファイアウォールを無効にするとホストOSであるLinuxも無防備になるので気をつけましょう。

Windowsをインストールするポイント

 トラブル:Windowsをインストールしようとすると、画面がブラックアウトしたまま停止してしまう
 対処 「設定 高度 拡張機能」のIO APICのチェックを外す必要があります。
 
 (そうしないとインストーラが巧く起動しません)
 (しかしインストールファイルをコピーして再起動した後、Windowsのインストールウィザードが完了するためにはチェックが要ります)
 ・APCIのチェックを外す(デフォルト)
 ・Windowsのインストールを開始(ファイルのコピー)
 ・再起動
 ・ここで仮想マシンの電源を落とす。APCIのチェックを入れる
 ・Windowsのインストールウィザードが走り出す
 ・インストールウィザードを完了する。
 VirtualBoxのマニュアルには「WindowsはIO APICにチェックいれる必要がある」と読み取れる部分があります。

 トラブル:Windows2000のインストール時に何度も再起動してしまう
 対処 ディスクの遅延を変更する必要があります。
 VirtualBoxのユーザマニュアルにWindows2000について「Windowsのバグで、ディスクに書き込み遅延を設定してやらないと、Windowsのインストール中、とくにコンポーネントのコピーの部分で落ちて、再起動を繰り返します」とあります。
 VirtualBoxを使うユーザで以下のコマンドを実行して、ディスク書き込みの遅延情報を変更します。

 #VBoxManage setextradata VirtualMachineName "VBoxInternal/Devices/piix3ide/0/Config/IRQDelay" 1

 コマンド実行後にエラーが出るようなら、再起動してもう一度実行します。
 これでインストール中に再起動してしまうトラブルを回避します。

 トラブル:「comオブジェクトの作成に失敗」というエラーが出るよう
 対処 /tmp/.vbox-username-ipcディレクトリをrootから削除しましょう。


 このように、VirtualBoxの動作は長い道のりになります。





prev.gif