読者です 読者をやめる 読者になる 読者になる

圧倒亭グランパのブログ

圧倒的おじいちゃんを目指して

Vagrant のインストールから仮想環境立ち上げまでを、オプションなどと共にちょっと細かく追ってみた

こんにちは。@at_grandpaです。

前回宣言したとおり、Vagrant について書こうと思います。

Vagrant は御存知でしょうか。

Vagrant とは、簡単に言うと「仮想環境を容易に構築できるツール」です。
コマンド一つで VirtualMachine 上に仮想環境を立ち上げることができ、
コマンド一つでその仮想環境を電源OFFにしたり破棄できたりします。

詳しくは、公式サイトかその他のサイトを参照してください。

今回はこのVagrantのインストールから、仮想環境立ち上げまでを、
主要コマンドのオプションと共に ちょっと細かく 追っていこうと思います。

備忘も兼ねて。

※かなり長くなってしまったので、サクッと終わらせたい方はほぼ最後までスクロールし、「まとめ」まで飛ばしてください

 

環境

OSとRubyGems

今回の環境は以下のようになっています。

gem は Ruby のライブラリ群です。
あまり Ruby には詳しくないのでググりました。

RubyGems は (Ruby に特化した apt-get と同じようなパッケージングシステムで)
ライブラリの作成や公開、インストールを助けるシステムです。

https://www.ruby-lang.org/ja/libraries/

RubyGemsRuby1.9以降に標準添付されています。
MacOSXの標準搭載のRubyは1.8.7なので、私は2.0.0にアップデートしました。
(後から調べると、Macにも RubyGems が標準で入っているみたいですが)

アップデートに関しては、このあたりが参照できると思います。(Macportsです)

Macのruby を最新のバージョンにアップデート

後々、Chef-Soloを触ります。Chef-solo は Ruby1.9 以降で動作するので、
このタイミングでバージョンをアップしておくのが良いでしょう。

 

VirtualBox

Vagrant で立ち上げる仮想環境は VirtualBox を使用したものです。
以下から環境に合ったものをインストールしてください。

Download VirtualBox

私の場合は、

でした。インストールの説明は割愛させていただきます。

 

Vagrantのインストール

インストール方法はいくつかありますが、ここでは先ほどのRubyGemsを用いてインストールします。

※注:RubyGemsでインストールされるVagrantのバージョンは1.0.7です

バージョンが少し古いですが、今回はこちらのバージョンで進めさせていただきます。

2013-09-27 時点でのVagrantの最新バージョンは1.3.3です。
こちらから参照できます。

http://downloads.vagrantup.com/

ここにはdmgファイルもあるので、最新版をGUIでインストールしたい方はどうぞ。

追記:いろいろ調べてみると、Vagrant1.1 以降は RubyGems での配布を行っていないみたいです。

 

RubyGemsでインストール

簡単です。以下のコマンドでインストールします。

$ sudo gem install vagrant

依存関係のあるものもいくつかインストールされます。もしアンインストールしたい場合は、

$ sudo gem uninstall vagrant

とすれば良いです。が!
綺麗にするには 依存関係のライブラリも手動で アンインストールしないといけませんので注意してください。

インストールが完了すればvagrantコマンドが使えるようになります。 バージョンを確認しましょう。

$ vagrant -v
Vagrant version 1.0.7

インストール先はこちらです。

$ which vagrant
/opt/local/bin/vagrant

PATHを通していない方は通してください。

vagrantコマンドは、サブコマンドを用いる形です。

$ vagrant hoge fuga ...

hoge の部分がサブコマンドで、それに続く fuga が引数になります。
git と同じようなものです。 各コマンドは -h オプションでマニュアルが見れますので、参考にしたい方はそちらを。

以上でインストールは終わりです。

次はいよいよ開発環境を立ち上げてみましょう。

 

Vagrantを用いてVirtualBox上に仮想環境を立ち上げる

boxファイルからOS設定ファイルを生成する

Vagrantで仮想環境を構築するには、仮想環境のOSの核となる boxファイル が必要です。

以下からboxファイルのURLを取得できます。

http://www.vagrantbox.es/

私は CentOS-6.3-x86_64-minimal.box を選択しました。
中には壊れているファイルもあり、 Vagrant init コマンドでエラーが出ることがあります。
その時は別のboxファイルを用いてください。

このboxファイルを用いて、仮想環境の設定ファイルを生成します。
それには vagrant box コマンドを使用します。

$ vagrant box -h
Usage: vagrant box <command> [<args>]

Available subcommands:
     add
     list
     remove
     repackage

よく見るとサブコマンドのさらにサブコマンドがあります。
今回使用するのは add コマンドです。

$ vagrant box add -h
Usage: vagrant box add <name> <url>

    -f, --force    Overwrite an existing box if it exists.
    -h, --help     Print this help

■ \<name>:
・通称 box-name
・ダウンロードしたboxファイルごと、つまりOSの設定ごとにbox-nameとして名前を付けられる
■ \<url>:
・boxファイルのURL
・ローカルにあるboxファイルならそのPATH

このような使い方をします。実際に開発環境の設定ファイルを作成しましょう。

$ vagrant box add cent_os ~/vagrant/CentOS-6.4-x86_64-v20130427.box

「cent_os」というbox-nameで、CentOS-6.4-x86_64-v20130427.boxを用いてOS設定ファイルを作成

ここで一つ注意があります。

\<url>の部分に「http://〜」のURLを用いるとvagrantがboxファイルをダウンロードして実行してくれるのですが、

このダウンロードが非常に遅い!

少なくとも私の環境はそうでした。他サイトでも報告されています。

ですので、例のようにブラウザからダウンロードしてローカルパスを用いる方法をおすすめします。

さて、vagrant box add コマンドを実行したら何が起こるのでしょうか。

このコマンドは、 ~/.vagrant.d ディレクトリを作成しています。

$ tree -d ~/.vagrant.d/
~/.vagrant.d/
├── boxes
│   └── cent_os
├── gems
└── tmp

~/.vagrant.d/boxes 以下に、box-nameのディレクトリがあり、ここに設定ファイルが入っています。
編集することはほぼ無いので、このような構成とだけ覚えておけばよいでしょう。

boxesのディレクトリはどんどん追加できます。

$ vagrant box add cent_os2 ~/vagrant/CentOS-6.4-x86_64-v20130427.box
...

$ tree -d ~/.vagrant.d/
~/.vagrant.d/
├── boxes
│   ├── cent_os
│   └── cent_os2
├── gems
└── tmp

複数のbox-nameを扱うことができ、立ちあげたいOSをbox-nameで指定することができます。

 

Vagrant init コマンドで Virtual Machine (VM) の設定ファイルを作成する

上記までで、OSの設定ファイルが作成されました。
次はこれを用いてVMの設定ファイルを作成します。

VMの設定ファイルを作成するコマンドは、 vagrant init コマンドです。

$ vagrant init -h
Usage: vagrant init [box-name] [box-url]
    -h, --help                       Print this help

■[box-name]:
・OSの設定ごとに名づけた box-name がここに入る
■[box-url]:
・boxファイルのURLも指定できる
・しかし、後述する vagrant up コマンドの際にダウンロードするので若干遅い
■どっちがいいの?:
・[box-name]だけだと、~/.vagrant.d/boxes を検索し、一致するbox-nameがあればそれを用いて設定ファイルを作成
・[box-name][box-url] と指定すると、box-nameを新しく設定し、立ちあげ時にURLのファイルをダウンロードする

 

では実行してみましょう。新しいディレクトリを作成してください。

$ mkdir test_dir
$ cd test_dir
$ vagrant init cent_os
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.
$ ls
Vagrantfile

Vagrantfile というファイルができあがっています。
このファイルは、「指定したbox-nameのOS」で立ち上がるVMの設定ファイルです。
中にはネットワークの設定や、指定しているbox-nameなどが記載されています。

Vagrantfileは今後いろいろと書き換えていきます。
まずはネットワークの設定をしましょう。

vimなどのエディタでVagrantfileを開き、23行目あたりにある以下の行のコメントを外してください。

# config.vm.network :hostonly, "192.168.33.10"  # この行の先頭コメントを外す

・ホストとゲストの間を「Host Only Network」で接続する際に用いるIP
・Host Only Network → ホストとゲスト間を仮想のLANで接続する方式

これで、ホストコンピュータと仮想マシンが接続されます。

以上で、VMの設定ファイルの作成は終わりです。
次はいよいよVMの立ち上げです。

 

VMの起動とシャットダウン

Vagrantfileの設定が終わったら、 vagrant up コマンドでVMを立ち上げます。

$ vagrant up -h
Usage: vagrant up [vm-name] [--[no-]provision] [-h]

        --[no-]provision             Enable or disable provisioning
        --provision-with x,y,z       Enable only certain provisioners, by type.
    -h, --help                       Print this help

■ [vm-name]:
・VirtualMachine の名前
■ [--[no-]provision]:
・provisonを実行するかどうか
■ [--provision-with x,y,z]:
・provisionのタイプ別実行

vm-nameはVMの名前を表します。vagrantは複数のVMを簡単に立ち上げられるのも特徴です。
その際に判別するための名前がvm-nameです。

複数のVMを立ち上げるには、Vagrantfileを編集しなければいけません。
このことに関しては、また後日、記事を書かせていただきます。

provisionは、vagrant up の際に、指定されたプログラムを走らせるかどうかを決めます。
立ち上げた後にシェルを走らせたり、Chefの設定を自動で走らせたりできます。
provisionに関しても、後日書かせていただきます。

今回は複数のVMを立ち上げないため、VMにも名前を振っていません。
デフォルトのままで良いので、引数なし・オプションなしで vagrant up を実行してみましょう。

$ vagrant up

... # いろいろな出力

[default] -- v-root: /vagrant
$

いろいろと設定が出力されています。1分程度待てば立ち上がるでしょう。 [default] というのはVMの名前です。今回は名前を付けていないのでdefaultになっています。

VMが立ち上がったかどうかは、 vagrant status で確認できます。

$ vagrant status
Current VM states:

default                  running

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

VMが立ち上がっているのがわかります。

その後の出力からもわかるように、

  • シャットダウン:vagrant halt
  • 一時停止:vagrant suspend
  • 再開:vagrant up

となっています。いずれも、引数に取り得るのはvm-nameです。

試しにvagrant haltでシャットダウンしてみましょう。

$ vagrant halt
[default] Attempting graceful shutdown of VM...
$ vagrant status
Current VM states:

default                  poweroff

The VM is powered off. To restart the VM, simply run `vagrant up`

 

VMにログインする

vagrant up コマンドでVMが起動している状態にします。
この状態でVMにログインするには、 vagrant ssh コマンドを実行します。

$ vagrant ssh -h
Usage: vagrant ssh [vm-name] [-c command] [-- extra ssh args]

    -c, --command COMMAND            Execute an SSH command directly.
    -p, --plain                      Plain mode, leaves authentication up to user.
    -h, --help                       Print this help

■ [-c]:
ssh コマンドを直接たたける
・-c の後に記述したコマンドを接続先のサーバーで実行し、結果をホスト側に表示する
■ [-p]:
・ユーザーの認証を行う
・現在のユーザーでのパスワードを求められる

Vagrantssh 設定を見るには vagrant ssh-config コマンドを使います。

$ vagrant ssh-config -h
Usage: vagrant ssh-config [vm-name] [--host name]

        --host NAME                  Name the host for the config..
    -h, --help                       Print this help

■ [--host name]:
・~/.ssh/config に書き出す際のhostの名前を指定できる

 

では、 vagrant ssh でログインしてみましょう。
vm-nameもコマンドも必要ないので、引数は何もなしで大丈夫です。

$ vagrant ssh
Last login: Fri Sep 27 00:00:00 2013 from 10.0.2.2
[vagrant@localhost ~]$

仮想環境にログインできました!

ユーザー名は「vagrant」となっています。
rootのパスワードは「vagrant」となっていますので、必要であれば変更しましょう。

いやー、ついにできましたねー。

お疲れ様でした!

 

まとめ

ちょっと細かく書いてしまったので、おおまかな流れをここでまとめます。
具体的に書いていますので、必要箇所は適宜変更してください。


  1. Virtual Box のインストール Download VirtualBox
  2. $ sudo gem install vagrant
  3. boxファイルの取得 http://www.vagrantbox.es/
  4. $ vagrant box add cent_os ~/vagrant/CentOS-6.4-x86_64-v20130427.box
  5. $ vagrant init cent_os
  6. $ vagrant up
  7. $ vagrant ssh

以上が仮想環境ログインへの道のりです。
こう見るとシンプルですね。

これでやっとスタートラインに立つことができました。

試行錯誤のための仮想環境として、バンバンupし、バンバンdestroyしましょう!
これがvagrantの醍醐味です!
 

ちなみに、VM上で保存したデータは、vagrant destroy で環境を破棄するまでは保存されています。

$ vagrant destroy -h
Usage: vagrant destroy [vm-name]

    -f, --force                      Destroy without confirmation.
    -h, --help                       Print this help

 

次回

次回以降は、以下のことを考えています。

  1. 複数VMの立ち上げ方
  2. provisionについて
  3. vagrant + chef

のんのんと更新していきますので、お暇があればお茶でも飲みながらどうぞ。