cygwin + vagrant + virtualbox 環境構築

###やりたいこと
***
cygwinからvagrant（インストールして）で、仮想マシン（vm:今回はvirtualboxを使います）起動できるようにする（ローカル環境を構築）。


###vagrantを利用するために...
***
まず、boxファイルというものが必要となります。
ちなみにですが、boxファイルの作成方法には、既存のものを入手するか、自作するかの2通りありますが、今回は自作します。
手順覚えておけば、今後配布とか、自分でも有効利用ができるので。

総じていうと、これまで、xamppでのローカル環境でしたが、ちょうどいい機会なので、もろもろ試す意図が大きいです。

実際のローカル環境は

+ Windows7　64bit
+ メモリ：8G
+ SSD 128GB (残20GB未満)ヤバイ・・・


###手順
***
1. 必要なもの入手（cygwin、virtualbox、vagrant）
2. virtualbox設定
3. 2.からbox作成
4. 作成したboxからvmを起動する

macにしたい。。

###1. 必要なもの入手

+ [cygwin](https://cygwin.com/install.html)

> [Windows7にCygwinを入れてみた。 - まりうすメモ](http://mariusz137.hatenablog.com/entry/2014/01/12/230118)

=>　上記とおり、インストールまで完了する。

+ [vagrant](https://www.vagrantup.com/downloads.html)

=>　win版でインストールまで完了しておく

※【[Cygwinで Vagrantを利用するための設定](http://futurismo.biz/archives/1651)】をしておいてください。
> dos2unix /cygdrive/c/HashiCorp/Vagrant/bin/vagrant

>[vagrantがスゲエ！コマンドラインからVirtualBoxを自由自在に操る方法 | Futurismo](http://futurismo.biz/archives/1651)

+ [virtualbox](https://www.virtualbox.org/wiki/Downloads)

> [VagrantのVirtualBoxで利用するboxを作成 CentOS(6.4) ver. - Done is better than Perfect](http://d.hatena.ne.jp/banrui/20140702/1404311383)

=> virtualboxのインストールまで行っておく。ほぼこの通りに実行していきますが、vmの設定やbox作成等の詳細は、後の手順でも詳述します。

また、上記で使うイメージファイルがなければ、下記より取得しておいてください。

+ [centos6.6イメージファイル:minimalのもの](http://ftp.riken.jp/Linux/centos/)

※ご使用になりたいバージョンのものを選択してください

###2.VirtualBox の設定
***

1. VirtualBoxを起動し、「新規」を選択（以降GUIで設定）

　　ex) 名前: vagrant-centos66
2. 続けるを選択して、メモリの設定

　　メモリ: 512MB
3. ハードドライブの設定

　　仮想ハードドライブを作成する
4. ハードドライブのファイルタイプ

　　VDI(VirtualBox Disk Image)
5. 物理ハードドライブにあるストレージ

　　可変サイズ
6.ファイルの場所とサイズ

　　初期設定
ここで一旦、vm側の初期設定は完了、以下の設定も加えておく。

+ USB：OFF
+ ポートUSBを選択し、USBコントローラーを有効化のチェックを外す
+ オーディオ：OFF
+ オーディオを選択し、オーディオを有効化のチェックを外す
+ ポートフォワーディング：ネットワークからアダプター１を選択、高度のタブを開きポートフォワーディングを選択

以下の設定を右上の＋ボタンから追加

+ 名前: SSH
+ プロトコル：TCP
+ ホストIP：127.0.0.1
+ ホストポート：2222
+ ゲストIP：10.0.2.15
+ ゲストポート：22

###vmにOSをインストールする
***
対象のマシンをVirtualBox上で選択し、起動を選択するとOSのisoイメージの選択画面となるので、上記で予め手元にダウンロードしておいたイメージファイル を選択して、START


1. 起動すると、最初に「Welcome to CentOS 6.4!」の画面が表示されます。
　
　　「Install or upgrade an existing system」を選択してEnter
2. Disc Found　　　Skipを選択
3. Unsupported Hardware Detected　　OK
4. CentOS　　OK
5. Language Selection
　　English
6. Keyboard Selection
　　US
7. Warning
　Warningがでるが、ここは「Re-initialize-all」を選択

8. Time Zone Selection
　Asia/Tokyoを選択

9. Root Password
　vagrant
　※Weak Passwordのアラートがでるが、ここはvagrantで設定する必要がある。

10. Partitioning Type
　　Use entire drive
11. Writing storage configuration to disk
　　Write changes to disk

以上、vmの設定が終わったところでrebootし、以下の内容でログインする。
localhost login : root
Password : vagrant

今回はminimalでインストールを実施したので、起動時にupしていないNICの設定を見直す。
以下のとおり。
***
> sed -i -e "s:^ONBOOT=no$:ONBOOT=yes:" /etc/sysconfig/network-scripts/ifcfg-eth0
cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep ONBOOT
service network restart
ip addr show eth0

続けて、MACアドレスとUUIDを無効化
***
> sed -i -e "s:^ONBOOT=no$:ONBOOT=yes:" /etc/sysconfig/network-scripts/ifcfg-eth0
cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep ONBOOT
service network restart
ip addr show eth0

sshの設定後。 UseDNS を起動
***
> sed -i -e "s:^ONBOOT=no$:ONBOOT=yes:" /etc/sysconfig/network-scripts/ifcfg-eth0
cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep ONBOOT
service network restart
ip addr show eth0

###vagrant用のユーザー設定
***
ここからはcygwinから作業を行う。

+ ssh root@localhost -p 2222
+ groupadd vagrant
+ useradd vagrant -g vagrant -G wheel

 sudo設定

+ echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers


 requiretty を無効

+ sed -i -e "s:^.*requiretty:#Defaults requiretty:" /etc/sudoers


 vagrantユーザ用の公開鍵を配置

+ su - vagrant
+ mkdir ~/.ssh
+ chmod 0700 ~/.ssh
+ curl -L -o ~/.ssh/authorized_keys https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
+ chmod 0600 ~/.ssh/authorized_keys


###VirtualBox の Guest Additions をインストール
***

ここからは、cygwin（じゃなくていいんですが、）でvmにログイン後、まず、wgetできるようにしてから、[vagrant公式ドキュメント](http://docs.vagrantup.com/v2/virtualbox/boxes.html)のとおりにインストールしてきます。

+ yum install -y wget
+ wget wget http://download.virtualbox.org/virtualbox/4.3.20/VBoxGuestAdditions_4.3.20.iso

※[virtualbox Guest Additionsバージョン](http://download.virtualbox.org/virtualbox/4.3.20/)は、ご自身のインストしたものを選んでください。

+ mkdir /media/VBoxGuestAdditions
+ mount -o loop,ro VBoxGuestAdditions_4.3.20.iso /media/VBoxGuestAdditions
+ sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run

とやっても、karnel-develのバージョンが古いと怒られるので、yumではなくrpmで
[インストール](http://mirror.switch.ch/ftp/pool/4/mirror/scientificlinux/6.3/i386/updates/security/)する。

【error】
> The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.
The missing package can be probably installed with
yum install kernel-devel-2.6.32-504.el6.i686.rpm
:
Building the main Guest Additions module                   \[失敗]
(Look at /var/log/vboxadd-install.log to find out what went wrong)
Doing non-kernel setup of the Guest Additions              [  OK  ]
Installing the Window System drivers                       \[失敗]
(Could not find the X.Org or XFree86 Window System.)

+ cd /usr/local/src/
+ wget http://mirror.switch.ch/ftp/pool/4/mirror/scientificlinux/6.3/i386/updates/security/kernel-devel-2.6.32-504.el6.i686.rpm
+ rpm -ivh kernel-devel-2.6.32-504.el6.i686.rpm 
rm VBoxGuestAdditions_4.3.8.iso
+ sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run (再度実行)

がエラー。。。gccがないとのことなので、
※64bit版でやってみたところmakeも足りてなかった・・・

+ yum install -y gcc make
+ sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run (再度実行)

で、Guest Additions をインストール完了。

###3. 2.からbox作成
***
boxファイルを作成する。on cygwin
※この時点で仮想マシンが起動中だったら、シャットダウンしておくこと。

+ cd ~/VirtualBox VMs/centos66
+ vagrant package --base centos66 --output centos66.box
+ ls -la centos66

###4. 作成したboxからvmを起動する
***
+ vagrant box add centos66 centos66.box
+ vagrant init centos66
+ vagrant up

自分の場合、ここで、vagrantでmountエラーとなったので、

> Failed to mount folders in Linux guest. This is usually beacuse
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

> mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group apache | cut -d: -f3`,dmode=777,fmode=777 /vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g apache`,dmode=777,fmode=777 /vagrant /vagrant

再度、ログインして、vboxをリビルドして、

+ vagrant ssh 
+ sudo /etc/init.d/vboxadd setup

vagrantを再起動します。

+ vagrant halt
+ vagrant up

で完了。

#####※参考URL
[vagrantでmountエラー解決](http://qiita.com/osamu1203/items/10e19c74c912d303ca0b)