WindowsからVirtualbox上のUbuntuで動作するプロセスにポートフォワードする
MacBook(今は亡き黒ポリカーボネート)を24inchモニタにつなぐと世界が止まるので、泣く泣く自宅のマシンで最強のスペックを誇るThinkpad X201sで作業しています。
なんとかしてLinux環境を手に入れたくてVirtualBox(Ubuntu)+putty+ssh(ポートフォワード)という荒業に落ち着いています。基本的に作業はターミナルで完結するものばかりですし。
ポートフォワードの設定(GUIマネージャ経由)
追記: VirtualBoxのGUIマネージャからポートフォワードを設定できることを知りました。
GUIマネージャ上で、ゲストOSを選択して設定->ネットワーク->ポートフォワーディング
という流れで設定画面にたどり着けます。そこで名前、プロトコル、ホストポート、ゲストポートを設定するとポートフォワードされます。こっちのほうがどう考えても便利ですね。
ポートフォワードの設定
WindowsのVirtualBox上でubuntuサーバを動かしsshで接続するを参考に。VirtualBoxをインストールしたディレクトリにVBoxManage.exe
があるのでこれを実行して引数にゲスト名やプロトコルなどを渡す。
$ VBoxManage.exe setextradata "ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP $ VBoxManage.exe setextradata "ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22 $ VBoxManage.exe setextradata "ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 10022
RailsアプリをCygwinで作るのはさすがに限界を感じてきたのでHTTPもポートフォワードさせて、クライアントはWindowsにしてしまおうという魂胆です。HTTPもポートフォワード可能で、
$ VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP $ VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 3000 $ VBoxManage setextradata "ubuntu" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 13000
ゲストOSの画面を立ち上げない
sshでログインして作業するのであれば、ゲストOSの画面を立ち上げる必要はない。VBoxHeadless.exe
を実行すればよいがコンソール(NyaOS使っています)が必ず一つ占有されてしまう。
$ VBoxHeadless.exe -startvm "ubuntu"
これでうまくいくと思いきや、
Error: failed to start machine. Error message: Configuration error: Failed to get the "MAC"
というエラーが発生する。つらつらと調べているとまったく同じようなことをしている人を発見。Vista Host Configuration error: Failed to get the "MAC"
ここでゲストOSの設定ファイルやログファイルを確かめてみてよって教えてくれてるので見直すと、最初に設定したsshが
<Forwarding name="guestssh" proto="1" hostport="10022" guestport="22"/>
という設定があったので
<Forwarding name="guesthttp" proto="1" hostport="13000" guestport="3000"/>
という項目をすぐ下に追加して、ubuntu.xmlファイルの上の方に定義されている以下の、
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" value="3000"/> <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" value="13000"/> <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" value="TCP"/>
設定を削除したら起動するようになりました。わー。どうやらVBoxManage.exeを使うのが間違いだったようです。
ただ、ポートフォワードされるのでリクエストが遅い? と思いきやどうやらRailsアプリであればthin使うとかなり速くなります。これでサーバ側はUbuntu(Linux)だしクライアント側はWindowsと、ほぼ本番環境に近い構成で開発できるので、あれ、別にMacなくてもいいやってなってきています。