理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

Vagrant + Sahara メモ

Vagrant とは

もはやおなじみかもしれませんが、vagrantコマンドラインから仮想マシンを作成したり破棄したり、プラグインと連携させることで特定時点の仮想マシンの状態にロールバックさせたりすることができるツールです。
公式ページはこちらですが、まぁなんというか、vagrant が何かがよくわからないですね。

Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team.

Why Vagrant? - Vagrant Documentation

仮想マシンの構築は従来、OS をダウンロードして、VM に OS をインストールして、一々構築して…という作業で数時間かかっていましたが、vagrant を使うと、マジメに数分で終わります。

インストール

最初は gem で vagrant 入れてたんですがなんかそれバージョン 1.0 らしくて、今の vagrant は 1.1 *1 です。1.1 は gem ではなく、pkg からインストールするので、以下から最新版をダウンロード+インストールしましょう。

仮想マシンを立ち上げる

vagrant がインストールされたら、次は box ファイルのダウンロードです。
box ファイルというと新出の単語ですが、仮想マシンの素といいますか、仮想マシンのスケルトンとなるファイルです。

Boxes are the skeleton from which Vagrant machines are constructed.

Boxes - Vagrant Documentation

ぼくはこちらから CentOS をダウンロードしました。後述しますが、vagrant 自体にダウンロードさせることもできますが、何回か失敗しており、何回もダウンロードする羽目になったのでブラウザでダウンロードしました。余談ですが、ファイルサイズは 500 MB くらいなのに、ダウンロード速度がかなり遅いです。


その後ですが、

### box ファイルを "centos" という名前で登録
$ vagrant box add centos ~/Downloads/CentOS-6.4-x86_64-v20130309.box

### 仮想マシンの初期化 -> カレントディレクトリに Vagrantfile というファイルができる。
### これがこの仮想マシンの設定ファイル
$ vagrant init

### 仮想マシンの起動!!
$ vagrant up

これで仮想マシンが立ち上がります。簡単ですね。実際に ssh ログインも当然可能です。vagrant ssh でログインしていますが、通常の ssh コマンドでもログイン可能です。

$ vagrant ssh
Last login: Mon May  6 11:22:50 2013 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
$ cat /etc/redhat-release 
CentOS release 6.4 (Final)

仮想マシンの commit/rollback

冒頭に述べたロールバックやコミットといったものは、Sahara と呼ばれるプラグインで実現します。
Sahara の公式はこちらですが、開発が止まっており vagrant 1.1 には対応していません。fork された Sahara で 1.1 に対応していますので、こちらをインストールしましょう。

$ git clone https://github.com/ryuzee/sahara
$ bundle install
$ bundle exec rake build
$ vagrant plugin install pkg/sahara-0.0.14.gem

これにより、vagrant で sandbox コマンドが使用できるようになります。
sandbox コマンドで実際に rollback を使用した例が次になります。ここでは、rollback.txt というファイルを仮想マシン上に追加した後、rollback させています。rollback した後、当然 rollback.txt はなくなっています。

### サンドボックスモードに入る
$ vagrant sandbox on
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

### 仮想マシンにログイン
$ vagrant ssh
Last login: Mon May  6 11:53:05 2013 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.

### 仮想マシン内で rollback.txt つくる
$ touch rollback.txt
$ ls -l rollback.txt
-rw-rw-r-- 1 vagrant vagrant 0  5月  6 12:16 2013 rollback.txt
$ logout

### ロールバックや!
$ vagrant sandbox rollback
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

### 仮想マシン上のファイルを確認
$ vagrant ssh
$ ls -l
合計 0
$ logout

### サンドボックスモードから出る
$ vagrant sandbox off

*1:公式ページのパスが /v2/ で切られているので、もしかしたら ver.2 の扱いかもしれませんが