Vagrantで作るUbuntu-12.04環境¶
Vagrantを使うための環境構築¶
step 1: 読む http://www.ryuzee.com/contents/blog/4292
step 2: VirtualBoxインストール https://www.virtualbox.org/ で最新版(今は4.2.6)をインストール
step 3: Vagrantインストール http://vagrantup.com/ から最新版(今は1.0.6)をインストール
step 4: 有志で提供されているVagrant Box (OSテンプレート)の一覧を確認 http://www.vagrantbox.es/
step 5: Ubuntu 12.04 をVagrantに追加:
$ vagrant box add ubuntu-12.04-x64 http://files.vagrantup.com/precise64.box
この追加でローカルにboxファイルが
ubuntu-12.04-x64
という名前で インストールされる。
ここまでで事前準備完了。
注釈
2/14追記: boxにはVirtualBoxのGuest Additionsがインストール済みですが、 VirtualBoxのバージョンが高くなると古いboxのGuest Additionsの互換性が 無くなる場合があります。
対策はいくつかあります。
vagrantbox.esから対応するGuest Additionsインストール済みのboxを入手する
VirtualBoxのバージョンを上げない
あとでvagrant sshして自力で対応するGuest Additionsをインストールする
Ubuntuのインスタンスを作る¶
ここからはインスタンス作る度に行う。
step 6: Vagrantのインスタンス置き場を作成して初期化:
$ mkdir /path/to/vagrant_work/ubuntu1204 $ cd /path/to/vagrant_work/ubuntu1204 $ vagrant init ubuntu-12.04-amd64
これでインスタンスの設定ファイル
Vagrantfile
が作成される。step 7: VirtualBoxインスタンスを起動:
$ vagrant up
VirtualBoxインスタンスが無ければ作成し、起動。あれば作成はスキップして起動。
step 8 母艦からsshでログイン:
$ vagrant ssh
注釈
MacOS Xでlucid32の場合、Networkが起動しなかった場合の対処
起動したOSにVirtualBoxのコンソールを使って
vagrant
/vagrant
でログインする設定を変更:
$ vi /etc/network/interfaces #pre-up sleep 2
ネットワークの自動設定を行う:
$ sudo apt-get install sysv-rc-conf $ sysv-rc-conf networking on $ /etc/init.d/networking restart $ exit
母艦側でVMを再起動:
$ vagrant reload
step 9 使い終わったらゲストOSを終了:
$ vagrant halt
step 10 不要になった仮想環境を削除:
$ sudo vagrant destroy
おまけ: VirtualBoxのsnapshotを作成するプラグインをVagrantに追加¶
vagrantのプラグインはgemで提供されているので、例えばsnapshotを作るためのコマンドが以下の設定で使えるようになります。
vagrantにsandbox機能を追加する:
$ vagrant gem install sahara
使い方:
$ vagrant sandbox on #sandboxモードon
$ vagrant sandbox commit #on以降の変更を確定する
$ vagrant sandbox rollback #on時点に戻す
$ vagrant sandbox off #sandboxモードoff
感想¶
使えるようになってみて思ったこと
VirtualBoxは普通の使い方だとGUI画面が表示されるけどVagrantで起動するとGUIが無いのでスッキリ
VirtualBoxのコントローラとしてだけ使うのもあり
VirtualBoxのスナップショット機能を簡単に使いたくてsahara入れたけどchefと組み合わせて使っているとあまり使わなかった
ChefやPuppetなどのprovisioning機能と組み合わせるとVMインスタンスは気軽に壊したり使い捨てたり出来るようになる
次のエントリでchefを使った例を紹介します。