成らぬは人の為さぬなりけり

エンジニアライフをエンジョイする為のブログ

VMWareからVirtualBox+Vagrantに移行する時の話

普段、VMWareFusionを使って開発してるのですが、 特にVMWareに依存していないので 「Vagrant+VirtualBoxにしてみようかな」と思い立ち、 年末にちょこちょこ作業したのでやったことをメモしておきます。

PackerやVeeweeを使って1からVagrantのBoxを作る方法は ググれば大量に出てきますが、 既存のvmdkから作る方法はあまり情報がなかったです。 なのでそんなに需要はないのかもしれませんね、、、

環境

VirtualBoxのインストール

https://www.virtualbox.org/wiki/Downloads

今回は4.3.6を選択しました。

vmdkをvdiに変換する

VirtualBoxを入れるとVBoxManageコマンドが使えるようになるので、 以下の感じのコマンドでvmdkvdiに変換します。

VBoxManage clonehd --format VDI XXXX.vmwarevm/仮想ディスク.vmdk output.vdi

※vmdkのパスは各自の環境のパスを設定

output.vdiの名前はなんでも良いです

とりあえず起動してみる

  • VirtualBoxを起動(GUI
  • 先程作成したoutput.vdiを起動ディスクにして新規作成
  • 起動できる事が確認できたら、とりあえずシャットダウン

ネットワーク設定

VirtualBox上のゲストOSの設定

Settings > Network

Adapter1 => NAT

Adapter 1Attached toNATにしておきます。

Terminal等からsshでログインして作業したい場合は、advancedでPortフォワーディングの設定をしておきます。 host:2222 -> guest:22

ゲストOS内の設定

eth0 (NAT)

/etc/sysconfig/network-scripts/ifcfg-eth0 こいつを変更しておきます

DEVICE=eth0
ONBOOT=yes
HWADDR=08:00:27:8F:56:EE
TYPE=Ethernet
BOOTPROTO=dhcp
NM_CONTROLLED=yes
UUID=6d8d1ced-b056-42cd-b7a3-195eff064f1d

ポイントは

  • ONBOOTyes
  • HWADDR(MACアドレス)はVirtualBox上のゲストOSの設定のアダプタの所(Advanced)に表示されている値を指定

networkをrestart

$ sudo service network restart
$ ifconfig

eth0が上がっている事を確認する

あとはping等で外部にアクセスできる事を確認しておきます。 (yumでインストールしたりするので)

ローカルにvagrantをインストールする

http://www.vagrantup.com/downloads.html

現時点での最新版1.4.1を入れる事をおすすめします。

あとは以下の通りにやる

http://futurismo.biz/archives/1678

※元のイメージのサイズが大きいと、boxを作ったり、box addしたり、結構時間がかかります。

上記手順の注意点

Rubyのバージョン

現在最新のchefはRuby1.9系以上じゃないと入らないので、Rubyのバージョンを上げておかないといけないです。 rpmを作るか、自分でビルドしてPATH通すか、rbenvもしくはRVM入れるか、方法はなんでも良いかと思います。

Vagrantfileの編集

名前解決がめっちゃ遅い

http://shibayu36.hatenablog.com/entry/2013/08/12/090545

ということらしいので、以下を入れておきます

Vagrant.configure("2") do |config|
  config.vm.provider :virtualbox do |vb|
    ...
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
  end
end