Mac OS X で VirtualBox を使って Linux を併用する

会社から借りているマシンを、Ubuntuデスクトップをインストールした ThinkPad X200 から MacBook Air 13" 2012 に交換してもらった。

人生初Macなんだけど、いきなり開発環境を総入れ替えするのは難しいし、オフラインでも使える Linux 開発環境はずっと欲しいから、とりあえず VirtualBox を利用することに。仮想マシンUbuntuクリーンインストールしてから X200 のホームディレクトリ配下をまるごと rsync するという手段でVM化して、X200はちゃっちゃと返却。 Guest Addition のインストールを自分でしなくても、なんか Ubuntu が勝手にドライバをインストールできるよって通知してくれて、それをOKするだけで Ubuntu デスクトップが快適に使える環境が完成した。すごい楽ちん。

ネットワーク構成は、 NAT と Host Only Network の2本構成。 Host Only Network は Mac OS 側から ssh などで Ubuntu に接続するようで、NATはUbuntuから外に出るため。 なので Host Only Network の方は Ubuntu 側では /etc/network/interfaces を編集して static にしておく。

ここで問題. ホストマシンが接続しているネットワークが切り替わった時(自宅→会社有線→会社無線など)に、Ubuntu側から名前解決できなくなってしまう。これは VirtualBox の NAT のデフォルトの設定が、DNSのProxyになっていて、ホスト側のネットワークの切り替えに追随できないためらしい。 解決策は http://www.virtualbox.org/manual/ch09.html#nat_host_resolver_proxy にあるとおり、次のように設定して名前解決をホストOSに丸投げすること。

$ VBoxManage modifyvm "VM name" --natdnshostresolver1 on

次は、ファイルの共有方法。Mac側でダウンロードした tarball を Ubuntu 側で展開してビルドしたりしたい。最初は共有フォルダを ~/share にして、 Downlaods などのディレクトリを ~/share/ 配下において ~/Downloads => ~/share/Downloads のようにシンボリックリンクにしていたんだけど、これはあまりMac OS Xにとっては良くないみたいで、 mv Downloads share/ するときにパーミッションエラーが発生したりする。結局、 ホスト側のホームディレクトリをまるごと共有することにした。共有ディレクトリの設定で、自動でマウントするを On にすると、 Ubuntu 側で guest addition が勝手に /media/sf_XXXX みたいなパスで、一般ユーザーがアクセス出来ない設定でマウントしてしまうので、自動マウントはオフにして /etc/fstab を自分で書いてマウントする方がいい。

慣れてきて、Ubuntuの利用は ssh で事足りるようになったので、ヘッドレス運用をはじめる。VMの設定で 3D Accelaration を有効にしてしまっていたんだけど、これだとヘッドレスモードで起動しようとするとすぐにセグフォになってしまうのでOFFに設定する。あとはヘッドレスモードで起動するだけ。 Dock に邪魔なアイコンが出なくなって快適。

$ VBoxManage startvm air --type headless

と、いくつかハマリポイントはあったけど、VirtualBox と Ubuntu のおかげでUbuntuデスクトップからスムースにMac OS X に移行できた。めでたしめでたし。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。