vagrant box作成メモ（CentOS 6.6）


CentOS 6.6のboxを作ったときのメモ。

## 事前準備

* VirtualBoxインストール
	↓からダウンロード
	https://www.virtualbox.org/wiki/Downloads


* vagrantインストール
	↓からダウンロード
	https://www.vagrantup.com/downloads.html

* CentOSインストールメディアのダウンロード
	↓からダウンロード
	http://vault.centos.org/6.6/isos/x86_64/
	* CentOS-6.6-x86_64-minimal.iso
	* CentOS-6.6-x86_64-bin-DVD1.iso


## VM作成
VirutalBoxでVMを作成。

* 名称：centos66
* タイプ：linux
* バージョン：Red Hat(64bit)
* メモリーサイズ：768MB
* ハードディスク
	* ファイルタイプ：VDI
	* 可変/固定：可変
	* サイズ：100GB

## VM作成後の変更
VM作成後に、VirtualBoxのVM設定画面で以下を実施。

* オーディオ無効化
* USBコントローラを無効化

## CentOSインストール
CentOS-6.6-x86_64-minimal.isoを使用してインストール（Box化する上で特別な考慮は無い）。
rootパスワードは __vagrant__ とする。

## ネットワークIFの有効化
VM作成完了後、コンソールにログインし、ネットワークIFを有効化。

```shell-session
[root@localhost ~]# ifup eth0

Determining IP information for eth0... done
[root@localhost ~]#                                                           
```

## sshポートフォワードの設定（操作しやすいようにするため）
VMの設定画面（「設定」→「ネットワーク」→「アダプター1」→「ポートフォワーディング」）でSSHポートフォワードの設定をする。

| 項目 | 設定値 |
|:--|---|
|名前|ssh|
|プロトコル|TCP|
|ホストIP|<空白>|
|ホストポート|任意（今回は2223に設定）|
|ゲストIP|<空白>|
|ゲストポート|22|

## VMログイン（SSH）
VMにSSHでログインする。

```shell-session
dev hishi$ ssh root@127.0.0.1 -p 2223
root@127.0.0.1's password:
Last login: Sat Jan 16 10:43:04 2016
[root@localhost ~]#
```

## ネットワークIFの有効化（OS起動時）
ネットワークIFがOS起動時に自動で有効化されるように変更。

```shell-session
[root@localhost ~]# cp -p /etc/sysconfig/network-scripts/ifcfg-eth0  /etc/sysconfig/network-scripts/bk.ifcfg-eth0
[root@localhost ~]#
[root@localhost ~]# sed -i -e 's/^ONBOOT=no/ONBOOT=yes/' /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]#
[root@localhost ~]# diff /etc/sysconfig/network-scripts/bk.ifcfg-eth0  /etc/sysconfig/network-scripts/ifcfg-eth0
5c5
< ONBOOT=no
---
> ONBOOT=yes
[root@localhost ~]#
```

## vagrantユーザ作成
vagrantユーザのパスワードは **vagrant** とする。


```shell-session
[root@localhost ~]# useradd vagrant
[root@localhost ~]#
[root@localhost ~]# echo "vagrant" | passwd vagrant --stdin
ユーザー vagrant のパスワードを変更。
passwd: 全ての認証トークンが正しく更新できました。
[root@localhost ~]#
```

## sudo設定
vagrantユーザに対して以下の許可を入れる。

1. パスワードレスでsudoを許可
2. tty（コンソール接続）でない場合（pts:ssh接続の場合）もsudoを許可

※2.を入れないと、`vagrant up`した際に下記エラーが出る。

```shell-session
dev hishi$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
..
..省略
..
    default: /vagrant => /Users/hishi/dev
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mkdir -p /vagrant

Stdout from the command:

Stderr from the command:

sudo: sudo を実行するには tty がなければいけません。すみません

dev hishi$
```



```shell-session
[root@localhost ~]# cp -p /etc/sudoers /etc/sudoers.bk
[root@localhost ~]#
[root@localhost ~]# visudo
[root@localhost ~]#
[root@localhost ~]# diff /etc/sudoers.bk /etc/sudoers
56a57
> Defaults:vagrant    !requiretty
98a100
> vagrant	ALL=(ALL) 	NOPASSWD:ALL
[root@localhost ~]#
```

## ssh接続時の名前解決を無効化
```shell-session
[root@localhost ~]# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bk
[root@localhost ~]#
[root@localhost ~]# sed -i -e 's/^#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
[root@localhost ~]#
[root@localhost ~]# diff /etc/ssh/sshd_config.bk /etc/ssh/sshd_config
122c122
< #UseDNS yes
---
> UseDNS no
[root@localhost ~]#
```

## ssh公開鍵の設定

```shell-session
[root@localhost ~]# su - vagrant
[vagrant@localhost ~]$
[vagrant@localhost ~]$ mkdir .ssh
[vagrant@localhost ~]$
[vagrant@localhost ~]$ curl -L https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub > ~/.ssh/authorized_keys
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
102   409  102   409    0     0    393      0  0:00:01  0:00:01 --:--:--   393
[vagrant@localhost ~]$
[vagrant@localhost ~]$ chmod 700 .ssh
[vagrant@localhost ~]$
[vagrant@localhost ~]$ chmod 600 .ssh/authorized_keys
[vagrant@localhost ~]$
[vagrant@localhost ~]$ exit
logout
[root@localhost ~]#
```

## CentOSインストールメディアのマウント
RPMパッケージをインストールするため、下記メディアをマウントする。
※マウントポイントは、/media/CentOSにしておくと、標準のリポジトリ定義（c6-media）が使えるので楽。

* CentOS-6.6-x86_64-bin-DVD1.iso


```shell-session
[root@localhost ~]# mkdir /media/CentOS
[root@localhost ~]#
[root@localhost ~]# mount /dev/cdrom /media/CentOS
mount: ブロックデバイス /dev/sr0 は書き込み禁止です、読込み専用でマウントします
[root@localhost ~]# 
```

## gcc, kernel-develのインストール
```shell-session
[root@localhost ~]# yum --disablerepo=\* --enablerepo=c6-media install gcc kernel-devel
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
c6-media                                                 | 4.0 kB     00:00 ...
c6-media/primary_db                                      | 4.5 MB     00:00 ...
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package gcc.x86_64 0:4.4.7-11.el6 will be インストール
--> 依存性の処理をしています: libgomp = 4.4.7-11.el6 のパッケージ: gcc-4.4.7-11.el6.x86_64
--> 依存性の処理をしています: cpp = 4.4.7-11.el6 のパッケージ: gcc-4.4.7-11.el6.x86_64
--> 依存性の処理をしています: glibc-devel >= 2.2.90-12 のパッケージ: gcc-4.4.7-11.el6.x86_64
--> 依存性の処理をしています: cloog-ppl >= 0.15 のパッケージ: gcc-4.4.7-11.el6.x86_64
--> 依存性の処理をしています: libgomp.so.1()(64bit) のパッケージ: gcc-4.4.7-11.el6.x86_64
---> Package kernel-devel.x86_64 0:2.6.32-504.el6 will be インストール
--> トランザクションの確認を実行しています。
---> Package cloog-ppl.x86_64 0:0.15.7-1.2.el6 will be インストール
--> 依存性の処理をしています: libppl_c.so.2()(64bit) のパッケージ: cloog-ppl-0.15.7-1.2.el6.x86_64
--> 依存性の処理をしています: libppl.so.7()(64bit) のパッケージ: cloog-ppl-0.15.7-1.2.el6.x86_64
---> Package cpp.x86_64 0:4.4.7-11.el6 will be インストール
--> 依存性の処理をしています: libmpfr.so.1()(64bit) のパッケージ: cpp-4.4.7-11.el6.x86_64
---> Package glibc-devel.x86_64 0:2.12-1.149.el6 will be インストール
--> 依存性の処理をしています: glibc-headers = 2.12-1.149.el6 のパッケージ: glibc-devel-2.12-1.149.el6.x86_64
--> 依存性の処理をしています: glibc-headers のパッケージ: glibc-devel-2.12-1.149.el6.x86_64
---> Package libgomp.x86_64 0:4.4.7-11.el6 will be インストール
--> トランザクションの確認を実行しています。
---> Package glibc-headers.x86_64 0:2.12-1.149.el6 will be インストール
--> 依存性の処理をしています: kernel-headers >= 2.2.1 のパッケージ: glibc-headers-2.12-1.149.el6.x86_64
--> 依存性の処理をしています: kernel-headers のパッケージ: glibc-headers-2.12-1.149.el6.x86_64
---> Package mpfr.x86_64 0:2.4.1-6.el6 will be インストール
---> Package ppl.x86_64 0:0.10.2-11.el6 will be インストール
--> トランザクションの確認を実行しています。
---> Package kernel-headers.x86_64 0:2.6.32-504.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 パッケージ           アーキテクチャ
                                   バージョン              リポジトリー    容量
================================================================================
インストールしています:
 gcc                  x86_64       4.4.7-11.el6            c6-media        10 M
 kernel-devel         x86_64       2.6.32-504.el6          c6-media       9.3 M
依存性関連でのインストールをします。:
 cloog-ppl            x86_64       0.15.7-1.2.el6          c6-media        93 k
 cpp                  x86_64       4.4.7-11.el6            c6-media       3.7 M
 glibc-devel          x86_64       2.12-1.149.el6          c6-media       983 k
 glibc-headers        x86_64       2.12-1.149.el6          c6-media       611 k
 kernel-headers       x86_64       2.6.32-504.el6          c6-media       3.3 M
 libgomp              x86_64       4.4.7-11.el6            c6-media       133 k
 mpfr                 x86_64       2.4.1-6.el6             c6-media       157 k
 ppl                  x86_64       0.10.2-11.el6           c6-media       1.3 M

トランザクションの要約
================================================================================
インストール        10 パッケージ

総ダウンロード容量: 30 M
インストール済み容量: 63 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
--------------------------------------------------------------------------------
合計                                             93 MB/s |  30 MB     00:00
警告: rpmts_HdrFromFdno: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
 Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
 Package: centos-release-6-6.el6.centos.12.2.x86_64 (@anaconda-CentOS-201410241409.x86_64/6.6)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
これでいいですか? [y/N]y
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : ppl-0.10.2-11.el6.x86_64                       1/10
  インストールしています  : cloog-ppl-0.15.7-1.2.el6.x86_64                2/10
  インストールしています  : kernel-headers-2.6.32-504.el6.x86_64           3/10
  インストールしています  : glibc-headers-2.12-1.149.el6.x86_64            4/10
  インストールしています  : glibc-devel-2.12-1.149.el6.x86_64              5/10
  インストールしています  : mpfr-2.4.1-6.el6.x86_64                        6/10
  インストールしています  : cpp-4.4.7-11.el6.x86_64                        7/10
  インストールしています  : libgomp-4.4.7-11.el6.x86_64                    8/10
  インストールしています  : gcc-4.4.7-11.el6.x86_64                        9/10
  インストールしています  : kernel-devel-2.6.32-504.el6.x86_64            10/10
  Verifying               : gcc-4.4.7-11.el6.x86_64                        1/10
  Verifying               : libgomp-4.4.7-11.el6.x86_64                    2/10
  Verifying               : glibc-headers-2.12-1.149.el6.x86_64            3/10
  Verifying               : glibc-devel-2.12-1.149.el6.x86_64              4/10
  Verifying               : mpfr-2.4.1-6.el6.x86_64                        5/10
  Verifying               : kernel-devel-2.6.32-504.el6.x86_64             6/10
  Verifying               : cpp-4.4.7-11.el6.x86_64                        7/10
  Verifying               : kernel-headers-2.6.32-504.el6.x86_64           8/10
  Verifying               : ppl-0.10.2-11.el6.x86_64                       9/10
  Verifying               : cloog-ppl-0.15.7-1.2.el6.x86_64               10/10

インストール:
  gcc.x86_64 0:4.4.7-11.el6         kernel-devel.x86_64 0:2.6.32-504.el6

依存性関連をインストールしました:
  cloog-ppl.x86_64 0:0.15.7-1.2.el6       cpp.x86_64 0:4.4.7-11.el6
  glibc-devel.x86_64 0:2.12-1.149.el6     glibc-headers.x86_64 0:2.12-1.149.el6
  kernel-headers.x86_64 0:2.6.32-504.el6  libgomp.x86_64 0:4.4.7-11.el6
  mpfr.x86_64 0:2.4.1-6.el6               ppl.x86_64 0:0.10.2-11.el6

完了しました!
[root@localhost ~]#
```

## CentOSインストールメディアのアンマウント

```shell-session
[root@localhost ~]# umount /media/CentOS/
[root@localhost ~]# 
```

VirtualBoxの設定画面から以下を選択する。
[ストレージ]->[光学ドライブのCDマーク]->[仮想ドライブからディスクを除去]

## VirtualBox Guest Additionsのマウント

VirtualBoxのメニューから以下を選択する。
[Devices]->[Insert Guest Additions CD Image..]

```shell-session
[root@localhost ~]# mkdir /media/GuestAdditions
[root@localhost ~]#
[root@localhost ~]# mount /dev/cdrom /media/GuestAdditions/
mount: ブロックデバイス /dev/sr0 は書き込み禁止です、読込み専用でマウントします
[root@localhost ~]#
```

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

```shell-session
[root@localhost ~]# sh /media/GuestAdditions/VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.0.10 Guest Additions for Linux............
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
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, skipping.
[root@localhost ~]#
```

→失敗。。。
　ログを見てみる。

```/var/log/vboxadd-install.log
..
..省略
..
  set -e ; perl /usr/src/kernels/2.6.32-504.el6.x86_64/scripts/recordmcount.pl "x86_64" "64" "objdump" "objcopy" "gcc" "ld" "nm" "" "" "1" "/tmp/vbox.0/VBoxGuest-linux.o";
/bin/sh: perl: コマンドが見つかりません
make[2]: *** [/tmp/vbox.0/VBoxGuest-linux.o] エラー 127
make[1]: *** [_module_/tmp/vbox.0] エラー 2
make: *** [vboxguest] エラー 2
Creating user for the Guest Additions.
Creating udev rule for the Guest Additions kernel module.
```

→perlも必要らしい。
　VirtualBox Guest Additionsをアンマウントし、再度CentOSインストールメディアをマウント。

```shell-session
[root@localhost ~]# umount /media/GuestAdditions/
[root@localhost ~]# 
[root@localhost ~]# mount /dev/cdrom /media/CentOS/
mount: ブロックデバイス /dev/sr0 は書き込み禁止です、読込み専用でマウントします
[root@localhost ~]#
```

perlをインストール。

```shell-session
[root@localhost ~]# yum --disablerepo=\* --enablerepo=c6-media install perl
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * c6-media:
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package perl.x86_64 4:5.10.1-136.el6 will be インストール
--> 依存性の処理をしています: perl-libs = 4:5.10.1-136.el6 のパッケージ: 4:perl-5.10.1-136.el6.x86_64
--> 依存性の処理をしています: perl-libs のパッケージ: 4:perl-5.10.1-136.el6.x86_64
--> 依存性の処理をしています: perl(version) のパッケージ: 4:perl-5.10.1-136.el6.x86_64
--> 依存性の処理をしています: perl(Pod::Simple) のパッケージ: 4:perl-5.10.1-136.el6.x86_64
--> 依存性の処理をしています: perl(Module::Pluggable) のパッケージ: 4:perl-5.10.1-136.el6.x86_64
--> 依存性の処理をしています: libperl.so()(64bit) のパッケージ: 4:perl-5.10.1-136.el6.x86_64
--> トランザクションの確認を実行しています。
---> Package perl-Module-Pluggable.x86_64 1:3.90-136.el6 will be インストール
---> Package perl-Pod-Simple.x86_64 1:3.13-136.el6 will be インストール
--> 依存性の処理をしています: perl(Pod::Escapes) >= 1.04 のパッケージ: 1:perl-Pod-Simple-3.13-136.el6.x86_64
---> Package perl-libs.x86_64 4:5.10.1-136.el6 will be インストール
---> Package perl-version.x86_64 3:0.77-136.el6 will be インストール
--> トランザクションの確認を実行しています。
---> Package perl-Pod-Escapes.x86_64 1:1.04-136.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 パッケージ                アーキテクチャ
                                      バージョン             リポジトリー  容量
================================================================================
インストールしています:
 perl                      x86_64     4:5.10.1-136.el6       c6-media      10 M
依存性関連でのインストールをします。:
 perl-Module-Pluggable     x86_64     1:3.90-136.el6         c6-media      40 k
 perl-Pod-Escapes          x86_64     1:1.04-136.el6         c6-media      32 k
 perl-Pod-Simple           x86_64     1:3.13-136.el6         c6-media     212 k
 perl-libs                 x86_64     4:5.10.1-136.el6       c6-media     578 k
 perl-version              x86_64     3:0.77-136.el6         c6-media      51 k

トランザクションの要約
================================================================================
インストール         6 パッケージ

総ダウンロード容量: 11 M
インストール済み容量: 36 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
--------------------------------------------------------------------------------
合計                                             79 MB/s |  11 MB     00:00
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : 1:perl-Pod-Escapes-1.04-136.el6.x86_64          1/6
  インストールしています  : 4:perl-libs-5.10.1-136.el6.x86_64               2/6
  インストールしています  : 1:perl-Pod-Simple-3.13-136.el6.x86_64           3/6
  インストールしています  : 3:perl-version-0.77-136.el6.x86_64              4/6
  インストールしています  : 1:perl-Module-Pluggable-3.90-136.el6.x86_64     5/6
  インストールしています  : 4:perl-5.10.1-136.el6.x86_64                    6/6
  Verifying               : 1:perl-Module-Pluggable-3.90-136.el6.x86_64     1/6
  Verifying               : 1:perl-Pod-Escapes-1.04-136.el6.x86_64          2/6
  Verifying               : 4:perl-5.10.1-136.el6.x86_64                    3/6
  Verifying               : 4:perl-libs-5.10.1-136.el6.x86_64               4/6
  Verifying               : 1:perl-Pod-Simple-3.13-136.el6.x86_64           5/6
  Verifying               : 3:perl-version-0.77-136.el6.x86_64              6/6

インストール:
  perl.x86_64 4:5.10.1-136.el6

依存性関連をインストールしました:
  perl-Module-Pluggable.x86_64 1:3.90-136.el6
  perl-Pod-Escapes.x86_64 1:1.04-136.el6
  perl-Pod-Simple.x86_64 1:3.13-136.el6
  perl-libs.x86_64 4:5.10.1-136.el6
  perl-version.x86_64 3:0.77-136.el6

完了しました!
[root@localhost ~]#
```

そして、再インストール

```shell-session
[root@localhost ~]# /etc/init.d/vboxadd setup
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
Building the main Guest Additions module                   [  OK  ]
Building the shared folder support module                  [  OK  ]
Building the OpenGL support module                         [  OK  ]
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]
[root@localhost ~]#
```

→成功

## box作成
```shell-session
dev hishi$ vagrant package --base centos66
==> centos66: Clearing any previously set forwarded ports...
==> centos66: Exporting VM...
==> centos66: Compressing package to: /Users/hishi/dev/package.box
dev hishi$
```

## box登録
```shell-session
dev hishi$ vagrant box add centos66 package.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos66' (v0) for provider:
    box: Unpacking necessary files from: file:///Users/hishi/dev/package.box
==> box: Successfully added box 'centos66' (v0) for 'virtualbox'!
dev hishi$
```


## Vagrantfile作成
```shell-session
dev hishi$ vagrant init centos66
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.
dev hishi$
```


## vm起動
```shell-session
dev hishi$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos66'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: dev_default_1452999624828_26394
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /Users/hishi/dev
dev hishi$
```

## vmログイン

```shell-session
dev hishi$ vagrant ssh
Last login: Sun Jan 17 11:47:55 2016
[vagrant@localhost ~]$
```


## 参考にしたサイト
https://docs.vagrantup.com/v2/boxes/base.html
http://www.virtualbox.org/manual/ch04.html
https://docs.vagrantup.com/v2/virtualbox/boxes.html