Vagrantメモ

# Vagrantとは
## 概要
Vagnrant（ベイグラント）は仮想マシンを簡単に構築するソフトウェアです。作れる仮想マシンはVirtualBoxやVMWare、AWSのEC2等があります。

## なぜVagrantを利用するのか
仮想マシンを作るだけなら今まで通りVirtualBoxやVMWare等で作成すればよいのですが、Vagrantのすごいところはこの仮想マシンを構築する手順が恐ろしく簡単でシンプルだということです。

```
# テンプレートファイルを用意
$ vagrant box add centos64 sample.box 

# 仮想マシンを使う準備・設定
$ vagrant init centos64 

# 仮想マシン起動
$ vagrant up  
```
これだけで仮想マシンが使えます。
設定内容によってはChefやPuppet等を使って自動でミドルウェアもインストール・設定してくれます。

## 知っておくべきVagrant用語
### Boxファイル
* 仮想マシンを作成するために必要な雛形となるイメージファイル。※一般的なOSのISOファイルではないことに注意。
* 仮想環境ごとに必要。
* BOXファイルの入手は[http://www.vagrantbox.es/](http://www.vagrantbox.es/)か[http://developer.nrel.gov/downloads/vagrant-boxes/](http://developer.nrel.gov/downloads/vagrant-boxes/)かveeweeというもの使って自分で作成する

### プロバイダ
VirtualBoxやVMWare、AWSのEC2等の仮想環境のこと

### プロビジョニング
必要なミドルウェアのインストールや設定の処理を行うこと
プロビジョニングツールは上記処理をやってくれるツールのこと（ChefとかPuppetとかのこと）

### Vagrantfile
仮想マシンを起動時のスペックなどの設定やプロビジョニングを記述するファイル。

## Vagrantでできること
* ちょっとしたテスト等で使用する仮想環境をすぐに構築したい。
* 環境構築を自動化したい。
* 複数人で開発する際に開発環境を統一する。

簡単にいえばこんな会話がなくなります。

```
A「機能追加したからちょっと確認して！」
↓
B「確認したけどなんかエラーが出て動かないよ。」
↓
A「おかしいなぁ、俺の環境では動いたんだけど・・・」
```

## 基本機能

```
# Box list表示
$ vagrant box list

# 初期化
$ vagrant init [box名]

# sshログイン
$ vagrant ssh

# 仮想マシン起動
$ vagrant up

# 仮想マシン停止
$ vagrant halt

# 仮想マシン再起動
$ vagrant reload

# 仮想マシン削除
$ vagrant destroy

# 仮想マシンの状態確認
$ vagrant status

# 仮想マシンスリープ
$ vagrant suspend

# 仮想マシンスリープ解除
$ vagrant resume
```

## BaseBoxからカスタムBoxを作成する場合の注意点（CentOS）
ネットワーク設定が残っているとエラーが出てしまうのでちゃんと削除する

```
$ vagrant ssh
# iptablesサービスをストップ
vm> sudo service iptables stop
vm> sudo service ip6tables stop
vm> sudo chkconfig iptables off
vm> sudo chkconfig ip6tables off
vm> sudo chkconfig --list

# タイムゾーンを東京に変更する
vm> sudo vi /etc/sysconfig/clock
-----
ZONE="Asia/Tokyo"
UTC=true
-----
vm> source /etc/sysconfig/clock
vm> sudo cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
vm> date

# リポジトリをriken.jpに変更する
vm> sudo /etc/yum.repos.d/CentOS-Base.repo
・ mirrorlistをコメントアウト
・ baseurlを「http://mirror.centos.org/centos/」から「http://ftp.riken.jp/Linux/centos/」に変更。これをすべてのカテゴリで実施。

# パッケージを最新にする
vm> sudo yum update

# vimを入れる
vm> sudo yum install vim
# vimの設定をする（rootにも入れる。エイリアスも設定する）
$ mkdir ~/.vim
$ cd ~/.vim
$ mkdir colors
```

```~/.vimrc
"モードラインを有効にする
set modeline

"モードラインの検索行数を設定
set modelines=5

"新しい行のインデントを現在行と同じにする
set autoindent

"バックアップファイルを作るディレクトリ
"set backupdir=$HOME/vimbackup

"ファイル保存ダイアログの初期ディレクトリをバッファファイル位置に設定
set browsedir=buffer 

"クリップボードをWindowsと連携
set clipboard=unnamed

"Vi互換をオフ
set nocompatible

"スワップファイル用のディレクトリ
"set directory=$HOME/vimbackup

"タブの代わりに空白文字を挿入する
set expandtab

"変更中のファイルでも、保存しないで他のファイルを表示
set hidden

"インクリメンタルサーチを行う
set incsearch

"タブ文字、行末など不可視文字を表示する
"set list

"listで表示される文字のフォーマットを指定する
set listchars=eol:$,tab:>\ ,extends:<

"行番号を表示する
set number

"シフト移動幅
set shiftwidth=4

"閉じ括弧が入力されたとき、対応する括弧を表示する
set showmatch

"検索時に大文字を含んでいたら大/小を区別
set smartcase

"新しい行を作ったときに高度な自動インデントを行う
set smartindent

"行頭の余白内で Tab を打ち込むと、'shiftwidth' の数だけインデントする。
set smarttab

"ファイル内の <Tab> が対応する空白の数
set tabstop=4

"カーソルを行頭、行末で止まらないようにする
"set whichwrap=b,s,h,l,<,>,[,]

"検索をファイルの先頭へループしない
set nowrapscan

"カラー設定
syntax on

"カラースキーマを設定
colorscheme railscasts 
```

```
#ネットワーク設定を削除
vm> sudo rm /etc/udev/rules.d/70-persistent-net.rules
vm> sudo rm /etc/sysconfig/network-scripts/ifcfg-eth1
vm> sudo rm -rf /dev/.udev/
vm> sudo rm /lib/udev/rules.d/75-persistent-net-generator.rules
vm> exit
$ vagrant halt
$ vagrant package
```

rikenへ変更したあとのconfファイル＠Centos6.5

```
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
```