vagrantのインストール

最近、Chefに興味を持って触っています。Chef便利です。Chefを使うとレシピと言われるファイルを用いてサーバにnginxなどをインストールすることができます。

  • 使いこなせるようになると以下のような嫌な事から解放されます
    • Aのサーバにはemacsがインストールされてたけど、Bのサーバにはemacsがインストールされてなかった
    • Aのサーバにはnginxの設定が反映されていて、Bのサーバにはnginxの設定が古いままだった
    • AとBのサーバにnginxに対して同様の設定を行いたい時にsshでログインしていて面倒だ
    • nginxの設定を確認するのに各サーバにsshでログインしてから確認する必要がある
    • サーバ台数が増えすぎて各サーバが何をインストールしているのかExcelやwikiで管理をしている
    • ...etc

Chefが使えるようになるとサーバ環境を簡単にセットアップできるだけでなく、環境をGemfileでライブラリを管理するかのように設定ファイルで環境を管理できます。設定ファイルで管理できるためgitでサーバ状態を履歴管理できるようになります。これが本当のchefの目的でセットアップするためのツールではないようです。

ただ、いざ始めようとするとChef Server / ClientとChef-Solo、knife、knife-solo、vagrant、berkshelfなど覚えなくてはイケナイことがたくさんあります。正直わかりにくいです。・・と思っていましたが下記の本が出版されて全てが繋がりました。感謝と同時におすすめです!

このエントリーではvagrantをインストールする方法をメモしておこうと思います。

vagrantのインストール

vagrantはベイグラントと読むようです。そもそもchefやるのになんでvagrantの話しが出てくるかと言うとchefはnginx, mysqlなどのミドルウェアをインストールするもので手持ちのPC(私はMacBookAir)にnginxをインストールしたくなかったりするので、壊してもいいlinux環境が欲しいのです(chefはwindowsでも動作するらしいです)。そこで、容易にトライアンドエラーが試せるようにvagrantで環境を作ります。

vagrantは仮想環境上で動作します。今回は無料のvirtualboxを使います。

%vagrant init precise32 http://files.vagrantup.com/precise32.box
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

これでprecise32.boxというマシンイメージをprecise32という名前でvagrantが管理します。precise32の部分をubuntuなど好きな名前に変更してもいいです。 マシンイメージは下記のサイトで配布されています。

自分でマシンイメージ(box)を作りたい場合はveeweeを利用すると良さそうです。

vagrant box listで追加したboxを確認できます

%vagrant box list
precise32                           (virtualbox)

vagrant initするとVagrantfileが作成されます。Vagrantfileにどのboxを利用するのかひも付けしてあります。実態となる.vmdkファイルはmacの場合は~/VirtualBox VMs/のディレクトリにできてます。(vagrant initは第三引数にurlがあるとそのboxをダウンロードして、vagrant box add した事にしてくれます。)

vagrant initでOSが出来たらあとは

  • サーバ起動
%vagrant up
  • sshでログイン
%vagrant ssh
  • サーバ終了
%vagrant halt
  • 再起動
%vagrant reload
  • サーバが不要になったらdestroyで削除
%vagrant destroy
  • 新たなサーバを用意する場合は(precise32はbox名)
%vagrant init precise32