VirtualBox on Mac OS X で、ゲスト OS に ssh/http アクセスするまで
背景
ちょっとてこずったので、メモを残しておきます。
- ホスト OS ... Mac OS X 10.5
- 仮想化ソフト ... VirtualBox 1.6.2
- ゲスト OS ... debianミラーサイト にある debian-40r4a-i386-netinst.iso
やりたいことは、
- ゲスト OS 上でプログラミング、ウェブプログラミングを勉強・実験するテスト環境を構築したい
- ・・・だけなので、ゲスト OS にデスクトップ環境はいらない
- できるだけ軽く動作させたい
- ホスト OS から ssh でログインしてプログラムを打ち込む
- ホスト OS のブラウザからゲスト OS の httpd にアクセスして実験する
です。
ゲスト OS のインストール
VirtualBox のインストールは省きます。
ゲスト OS として、ごくごくふつうに debian をインストールしました。詳細は省きますが、今回は軽い動作を求めていたので [ソフトウェアの選択] のところで [標準システム] のみチェックしました ([デスクトップ環境] にはチェックなしです)。
- ThinkIT 第1回:Debianの最新版「etch」をインストールしませんか?(前編) (1/3)
- ThinkIT 第2回:Debianの最新版「etch」をインストールしませんか?(後編) (1/3)
$ apt-get install ssh apache2
のようにしておきます。
ゲスト OS への ssh/http アクセス設定
あまり正確には把握していないのですが、
- VirtualBox 上のゲスト OS にアクセスするには、VBoxManage コマンドで各種設定を行う必要がある
- これについては、VirtualBox 付属のマニュアルの 6.4.1 章「Configuring port forwarding with NAT」に書かれている
ようです。
Mac OS X では、VBoxManage コマンドは /usr/bin にインストールされるので、ターミナルからそのまま打ち込めば OK です。仮想マシンを停止した上で、下記のコマンドを打ち込みました。
/* ssh の設定 */ $ VBoxManage setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP $ VBoxManage setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22 $ VBoxManage setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 50022 /* http の設定 */ $ VBoxManage setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol" TCP $ VBoxManage setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort" 80 $ VBoxManage setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort" 50080
"debian" と書かれたところは、仮想マシンの名前に読み替えてください。
上記のコマンドでは、
- 1-3行目 ... ゲストの 22 ポート (sshポート) をホストの 50022 ポートへ転送
- 4-6行目 ... ゲストの 80 ポート (httpポート) をホストの 50080 ポートへ転送
の対応をしています。ホストのポート番号は何でもいいのですが、仮想マシン "debian" に関してはすべて 50000 番台を選ぶことにしました。
この VBoxManage コマンドですが、うまく機能したかどうかが今ひとつよくわかりません。が、大丈夫なときは、
$ VBoxManage setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22 VirtualBox Command Line Management Interface Version 1.6.2 (C) 2005-2008 Sun Microsystems, Inc. All rights reserved.
のように表示され、ダメなときは、
$ VBoxManage setextradata "Linux Guest" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22 VirtualBox Command Line Management Interface Version 1.6.2 (C) 2005-2008 Sun Microsystems, Inc. All rights reserved. [!] FAILED calling virtualBox->FindMachine(Bstr(argv[0]), machine.asOutParam()) at line 6742! [!] Primary RC = NS_ERROR_INVALID_ARG (0x80070057) - Invalid argument value [!] Full error info present: true , basic error info present: true [!] Result Code = NS_ERROR_INVALID_ARG (0x80070057) - Invalid argument value [!] Text = Could not find a registered machine named 'Linux Guest' [!] Component = VirtualBox, Interface: IVirtualBox, {2d3b9ea7-25f5-4f07-a8e1-7dd7e0dcf667} [!] Callee = IVirtualBox, {2d3b9ea7-25f5-4f07-a8e1-7dd7e0dcf667}
のように表示されるようです (今回は "Linux Guest" という仮想マシンがなかったためエラーになったようです)。
ちなみに上記の設定をした場合、~/Library/VirtualBox/Machines/debian/debian.xml に反映されます (例によって debian の部分は仮想マシン名に読み替えてください)。
今回の場合、下記のようになっていました。
/* ~/Library/VirtualBox/Machines/debian/debian.xml */ <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" value="TCP"/> <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" value="22"/> <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" value="50022"/> <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol" value="TCP"/> <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort" value="80"/> <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort" value="50080"/>
確認
実際にホスト OS からゲスト OS にアクセスしてみます。
ssh でアクセスするには、
$ ssh -p 50022 -l (ユーザー名) localhost
http でアクセスするには、
- ブラウザで http://localhost:50080 にアクセスしてみる
で確認できます。