Macで Vagrant を導入してCentOSを入れる

最近はやりのVagrant を触ってみようかとおもってくねくねしてみました。

きっかけはこの本

入門Chef Solo - Infrastructure as Code
伊藤直也 (2013-03-11)
売り上げランキング: 196

参考にしたのはこのへんです。

vagrant にboxを追加

一般に公開されていたり自分で作ったVirtualMachineの元になるvagrant用のboxファイルをどっかかからひっぱってきて、vagrantに登録します。

$ vagrant box add example_name http://example.com/example.box

vagrant box add なコマンドで第一引数にboxを登録する際のラベル、第二引数に .boxファイルを指定します。

インターネットにつながっていれば、公開されているboxのURLを指定してもいいですし、MacやLinuxなどはローカルのパスを指定することで登録することができます。

ただ、Windowsのコマンドプロンプトではローカルのパス指定はうまくいかなかったので、オンラインのURLを直接していするか、Webの環境がローカルにある場合はそこにboxファイルを置いてaddすることができます。

作業用のディレクトリを作ってVirtualMacineを登録する

vagrantで操作する仮想マシンは vagrant コマンドを使うディレクトリの Vagrant ファイルに書かれた内容をもとにVirtual Machineを操作します。

ですので、複数の案件でVirtual Machineを分けた場合は作業用ディレクトリを個別に用意したほうがいいかもしれません。

Macのホームディレクトリで vagrant init を行った場合は以下のようになります

$ pwd
/Users/username
$ li -a
.vagrant
.vagrant.d
Vagrantfile

.vagrant.d ディレクトリはvagrant本体の設定ファイルでvagrantをインストールすると作られます。

一方で .vagrant ディレクトリと Vagrantfile ファイルは vagrant init した段階で作られます。

ここでは以下の様な感じでVirtual Machineを作るようにしてみます。

  • Macで
  • ホームディレクトリは/Users/username
  • Virtural Machineの作業用ディレクトリはホームディレクトリの下に sample-vm ディレクトリを作る
  • sample-vmに関するVirtual Machineの操作は/Users/username/sample-vm内で行う

以下のような作業になります。

$ pwd
/Users/username
$ vagrant box add sample-vm /Users/username/vagrant_box/CentOS-6.4-x86_64-ja.box
Downloading or copying the box...
Extracting box...te: 38.1M/s, Estimated time remaining: --:--:--)
Successfully added box 'sample-vm' with provider 'virtualbox'!
$ mkdir sample-vm
$ cd sample-vm
$ pwd
/Users/username/sample-vm
$ ls -a1
.
..
$ vagrant init
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 -a
.
..
.vagrant
Vagrantfile

これでVirtual Machineをvagrantを使って操作できるようになりました。

vagrantを使ってVirtual Macineを起動する

vagrantを使ってVirtualMachineを起動するにはvagrant upします。

$ vagrant up

時々、vagrant upで以下のようなエラーが出る時があります。

Bringing machine 'default' up with 'virtualbox' provider...
There are errors in the configuration of this machine. Please fix
the following errors and try again:

vm:
* The box 'base' could not be found.

これはVagrantfileファイルに書かれたbaseというboxがないというエラーなのでここを書き換えてあげます。

$ vi Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  # All Vagrant configuration is done here. The most common configuration
  # options are documented and commented below. For a complete reference,
  # please see the online documentation at vagrantup.com.

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "base"

ファイルの中身はさらに続きますが、config.vm.box = "base"の部分をconfig.vm.box = "sample-vm"に変更したうえでもういちどvagrant upを試してみます。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'sample-vm'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] The guest additions on this VM do not match the installed version of
VirtualBox! In most cases this is fine, but in rare cases it can
cause things such as shared folders to not work properly. If you see
shared folder errors, please update the guest additions within the
virtual machine and reload your VM.

Guest Additions Version: 4.2.12
VirtualBox Version: 4.1
[default] Mounting shared folders...
[default] -- /vagrant

後半にはVirtualBoxにインストールされているGuest AdditionsのバージョンがVirtualBoxとずれているメッセージが出ていますが、Guest Additionsを導入していなかったり、バージョンがあっていれば問題なくこれでVirtualBoxに登録されVirtualMachineが起動しました。

VirtualMachineにSSHでつなぐ

作られたVirtualMachineに接続したいわけですが、この場合、設定されたVirtualMachineはCentOSなので、Virtual Machineに接続するための

  • IP(と、ポート番号)
  • ユーザ
  • パスワード(認証情報)

が必要になるのですが、このVirtualBoxにSSHするにはvagrant sshするだけでとりあえずは接続出来ます。 (本当はちゃんとあります)

$ vagrant ssh
Last login: Mon Jun  3 19:49:53 2013
Welcome to your Vagrant-built virtual machine.

Virtual Machineをシャットダウンする

VirtualMachineを終了(シャットダウン、電源を落とす)にはVirtual Macineからログアウトしてvagrant haltするだけです。

[vagrant@localhost ~]$ exit
logout
Connection to 127.0.0.1 closed.
$ vagrant halt
[default] Attempting graceful shutdown of VM...

Virtual Machineを削除する

Virtual MachineをVirtualBoxから削除するにはvagrant destroyでVirtualBoxから削除出来ます。 vagrant destroyしないかぎり、変更は保持されたまま利用し続けることができます。

$ vagrant destroy
Are you sure you want to destroy the 'default' VM? [y/N] y
[default] Destroying VM and associated drives...

この状態でVirtualBoxへ登録されたVirtual Macineが削除された状態になりましたが、Vagarant のboxは追加されたままなので、また必要になればvagrant upvagrant box addした時と同じ状態になるので、作って潰してがより簡単にできるようになります。

$ vagrant up

vagrantはVirtualBoxのバージョンに依存している部分が大きいので最新のVirtualBoxではvagrant upができない場合があります。

その時にはVirtualBoxの古いビルドをインストールしてみてください。

ちなみにこの記事で利用してるバージョンは以下のとおりです。

Vagrantに登録されたboxを確認する

vagrant destroyしても最初にvagrant box addしたボックスは残っています。 それらのボックスを確認するにはvagrant box listで確認ができます。

$ vagrant box list
centos64_64   (virtualbox)
sample-vm     (virtualbox)

前にあるのがVirtualMacineのラベル、()の中にはいっているのがVirtualMacineのプロバイダーになります。

Vagarantに登録されたboxを削除する

登録されたボックスを削除するにはvagrant box removeを使います。これにはVirtual Macineのラベル、プロバイダーを指定する必要があります。

プロバイダーを指定し忘れると、以下のようなエラーがでるので忘れないようにしてください。

$ vagrant box remove sample-vm
This command was not invoked properly. The help for this command is
available below.

Usage: vagrant box remove <name> <provider>
    -h, --help                       Print this help

ちゃんと削除するとこのようになります。

$ vagrant box remove sample-vm
Removing box 'sample-vm' with provider 'virtualbox'...

これで元通りになりました。

Rlated & Feedbacks

http://www.trapon.jp/cms/mt-tb.cgi/303