【#Vagrant】Windows 環境上の Vagrant で CentOS 7 系ディストリビューション（Oracle Linux 7）の Box を自作する #OracleLinux

Windows 環境上の Vagrant で RHEL7 互換 Linux ディストリビューションの Box を自作する手順について、自分用のメモとしてまとめました。

CentOS 7 でも同じ手順になる思いますが、今回は、Oracle Linux 7 の Box を次に示す環境のホストマシンで自作します。

|ソフトウェア名 |バージョン |備考 |
|-----------|---------|------|
|OS         |Windows Server 2012 R2 Update|-|
|Chocolatey |0.9.8.27         |-|
|VitrualBox |4.3.14           |`cup VirtualBox` でインストール|
|Vagrant    |1.6.3            |`cup Vagrant` でインストール|
|7-Zip      |9.22.01.20130618 |`cup 7zip` でインストール|
|cwRsync    |5.3.0            |`cup cwRsync` でインストール|

## 1: 自作 Box のベースとなるゲスト OS（仮想マシン）の作成

### 手順 1: ゲスト OS（仮想マシン）を作成します

```ps1:ホストマシン
PS> & vboxmanage createvm `
--name "vagrant-oracle-linux-release-7-x86_64" `
--ostype "Oracle_64" `
--register

PS> & vboxmanage list vms

"vagrant-oracle-linux-release-6-x86_64" {{ゲスト OS の UUID}}  
```

### 手順 2: ホストマシンのハードウェア仮想化支援機能対応有無に合わせてゲスト OS（仮想マシン）の設定をします

```ps1:ホストマシン
PS1> & vboxmanage modifyvm "vagrant-oracle-linux-release-7-x86_64" `
--memory 4096 `
--rtcuseutc "on" `
--cpus 2 `
--cpuexecutioncap 100 `
--ioapic "on" `
--hpet "on" `
--hwvirtex "on" `
--nestedpaging "on" `
--largepages "on" `
--vtxvpid "on" `
--accelerate3d "off" `
--accelerate2dvideo "off" `
--nic1 "nat" `
--natpf1 "ssh,TCP,,2222,,22" `
--nictype1 "virtio" `
--nictype2 "virtio" `
--nictype3 "virtio" `
--nictype4 "virtio"
```

### 手順 3: ゲスト OS（仮想マシン）に IDE ストレージコントローラーを追加します

```ps1:ホストマシン
PS> & vboxmanage storagectl "vagrant-oracle-linux-release-7-x86_64" `
--name "IDE Controller" `
--add "ide"

PS> & vboxmanage showvminfo "vagrant-oracle-linux-release-7-x86_64" | Select-String "storage"

Storage Controller Name (0):            IDE Controller
Storage Controller Type (0):            PIIX4
Storage Controller Instance Number (0): 0
Storage Controller Max Port Count (0):  2
Storage Controller Port Count (0):      2
Storage Controller Bootable (0):        on
```

### 手順 4: ゲスト OS（仮想マシン）に SATA ストレージコントローラーを追加します

```ps1:ホストマシン
PS> & vboxmanage storagectl "vagrant-oracle-linux-release-7-x86_64" `
--name "SATA Controller" `
--add "sata" `
--portcount 2

PS> & vboxmanage showvminfo "vagrant-oracle-linux-release-7-x86_64" | Select-String "storage"

Storage Controller Name (0):            IDE Controller
Storage Controller Type (0):            PIIX4
Storage Controller Instance Number (0): 0
Storage Controller Max Port Count (0):  2
Storage Controller Port Count (0):      2
Storage Controller Bootable (0):        on
Storage Controller Name (1):            SATA Controller
Storage Controller Type (1):            IntelAhci
Storage Controller Instance Number (1): 0
Storage Controller Max Port Count (1):  30
Storage Controller Port Count (1):      2
Storage Controller Bootable (1):        on
```

### 手順 5: 任意のフォルダーを作成して、インストールメディアのイメージファイルを配置します

インストールメディアのイメージは以下のウェブサイトからダウンロードします。
[https://edelivery.oracle.com/linux](https://edelivery.oracle.com/linux)

```ps1:ホストマシン
PS> New-Item -Path "D:\ISOs" -ItemType "Directory" -Force
PS> Get-ChildItem -Path "D:\ISOs"

    ディレクトリ: C:\ISOs


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2014/xx/xx     xx:xx 4172283904 V46135-01.iso
```

### 手順 6: ゲスト OS（仮想マシン）にインストールメディアの DVD イメージファイルをアタッチします

```ps1:ホストマシン
PS> & vboxmanage storageattach "vagrant-oracle-linux-release-7-x86_64" `
--storagectl "IDE Controller" `
--port 0 `
--device 0 `
--type "dvddrive" `
--medium "D:\ISOs\V46135-01.iso"

PS> & vboxmanage list dvds

UUID:           {仮想 DVD の UUID}
State:          created
Type:           readonly
Location:       D:\ISOs\V46135-01.iso
Storage format: RAW
Capacity:       3979 MBytes
```

### 手順 7: 空の仮想ハードディスクイメージファイルを作ります

```ps1:ホストマシン
PS> & vboxmanage createhd `
--filename "$HOME\VirtualBox VMs\vagrant-oracle-linux-release-7-x86_64\box-disk1.vdi" `
--size 40960

PS> Get-Item -Path "$HOME\VirtualBox VMs\vagrant-oracle-linux-release-7-x86_64\box-disk1.vdi"

    ディレクトリ: C:\Users\xxxxxx\VirtualBox VMs\vagrant-oracle-linux-r
    elease-7-x86_64


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2014/xx/xx     xx:xx    2097152 box-disk1.vdi
```


### 手順 8: ゲスト OS（仮想マシン）に仮想ハードディスクイメージファイルをアタッチします

```ps1:ホストマシン
PS> & vboxmanage storageattach "vagrant-oracle-linux-release-7-x86_64" `
--storagectl "SATA Controller" `
--port 0 `
--device 0 `
--type "hdd" `
--medium "$HOME\VirtualBox VMs\vagrant-oracle-linux-release-7-x86_64\box-disk1.vdi"

PS> & vboxmanage list hdds

UUID:           {仮想ハードディスクの UUID}
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\kukita.keisuke\VirtualBox VMs\vagrant-oracle-linux-release-7-x86_64\box-disk1.vdi
Storage format: VDI
Capacity:       40960 MBytes
```

### 手順 9. ゲスト OS（仮想マシン）を起動します

```ps1:ホストマシン
PS> & vboxmanage startvm "vagrant-oracle-linux-release-7-x86_64"
```

## 2: Oracle Linux 7.0 のインストール

### 手順 1: インストーラーを開始します

```txt:ゲストOS
リストから以下を選択しEnterキーを入力します
- "Intall Oracle Linux 7.0"
```

### 手順 2: 言語を選択します

```txt:ゲストOS
リストから以下を選択し [Continue] ボタンをクリックします
- "English (United States)"
```

### 手順 3: タイムゾーンの設定画面に移ります

```txt:ゲストOS
[DATE & TIME] と書かれてる部分をクリックします
```

### 手順 4: タイムゾーンを設定します

```txt:ゲストOS
以下を選択し画面左上の [Done] ボタンをクリックします
- Region: Asia
- City: Tokyo
```

### 手順 5: キーボード配列の設定画面に移ります

```txt:ゲストOS
[KEYBOARD] と書かれてる部分をクリックします
```

### 手順 6: キーボード配列を設定します

```txt:ゲストOS
以下を選択し画面左上の [Done] ボタンをクリックします
- Japanese
```

### 手順 7: ディスクのパーティショニングの設定画面に移ります

```txt:ゲストOS
[INSTALLATION DESTINATION] と書かれてる部分をクリックします
```

### 手順 8: ディスクのパーティショニングを設定します

```txt:ゲストOS
画面左上の [Done] ボタンをクリックします
```

### 手順 9: インストールを開始します

```txt:ゲストOS
画面右下の [Begin Installation] ボタンをクリックしインストールが完了するまで待ちます
```

### 手順 10: `root` ユーザーのパスワード設定画面に移ります

```txt:ゲストOS
[ROOT PASSWORD] と書かれてる部分をクリックします
```

### 手順 11: `root` ユーザーのパスワードを設定します

```txt:ゲストOS
パスワードに以下の値を設定し画面左上の [Done] ボタンを 2 回クリックします
- vagrant
```

### 手順 12: インストールの完了を確認しゲスト OS（仮想マシン）をリブートします

```txt:ゲストOS
画面右下の [Reboot] ボタンをクリックします
```

## 3: vagrant ユーザーの作成

### 手順 1: root ユーザーでログインします

```txt:ゲストOS
localhost login: root
Password: ******* ← vagrantと入力します。
```

### 手順 2: wheel グループに所属するユーザー vagrant を作成します

```txt:ゲストOS
[root@localhost ~]# useradd "vagrant" -g "wheel" -u 900
[root@localhost ~]# grep "vagrant" /etc/passwd

vagrant:x:900:10::/home/vagrant:/bin/bash
```

→ 上記のように表示されれば成功です。wheel グループとは root 特権を得ることのできるユーザーの属するグループです。"Big wheel（=大物、有力者）"に由来します。

### 手順 3: vagrant ユーザーのパスワードを設定します

```txt:ゲストOS
[root@localhost ~]# echo 'vagrant' | passwd --stdin "vagrant"
```

### 手順 4: wheel グループに sudo 実行の許可を与えます

```txt:ゲストOS
[root@localhost ~]# cat << EOF | tee -a /etc/sudoers
%wheel ALL=(ALL) NOPASSWD: ALL
Defaults:%wheel !requiretty
EOF

[root@localhost ~]# tail /etc/sudoers

：
省略
：
%wheel ALL=(ALL) NOPASSWD: ALL
Defaults:%wheel !requiretty
```

→ 上記の2行が追記されていることを確かめます。

### 手順 5: ログアウトします

```txt:ゲストOS
[root@localhost ~]# logout
```

### 手順 6: vagrant ユーザーでログインします

```txt:ゲストOS
localhost login: vagrant
Password: ******* ← vagrantと入力します。
```

## 4: root ユーザーの無効化

### 手順 1: passwd コマンドを使って root ユーザーをロックします

```bash:ゲストOS
[vagrant@localhost ~]$ sudo passwd -l "root"
[vagrant@localhost ~]$ sudo passwd -S "root"
```

→ "(Passwod locked.)"と表示されることを確かめます。

## 5: ネットワークの有効化

### 手順 1: コネクション名を確認します

```bash:ゲストOS
[vagrant@localhost ~]$ nmcli connection show

NAME  UUID                                  TYPE            DEVICE
eth0  488e0fce-a33e-47b5-b4aa-a6e6d20f7b00  802-3-ethernet  --
```

→ NAME 欄の値が eth0 であることを確かめます。

※ `ifconfig` コマンドは非推奨コマンドになりました。

### 手順 2: コネクション eth0 の自動接続を有効にします

```bash:ゲストOS
[vagrant@localhost ~]$ nmcli connection modify "eth0" "connection.autoconnect" "yes"
[vagrant@localhost ~]$ nmcli -f "connection.autoconnect" connection show "eth0"

connection.autoconnect:                 yes
```

→ 値が yes であることを確かめます。


### 手順 3: コネクションを有効にします

```bash:ゲストOS
[vagrant@localhost ~]$ nmcli connection up "eth0"
```

※ `ifup` / `ifdown` コマンドは非推奨コマンドになりました。

### 手順 4: IP アドレスが割り当てられていることを確かめます

```bash:ゲストOS
[vagrant@localhost ~]$ ip address show
```

### 手順 5: Yum を使って net-tools パッケージをインストールします

```bash:ゲストOS
[vagrant@localhost ~]$ sudo yum -y install "net-tools"
[vagrant@localhost ~]$ rpm -qa | grep "net-tools"

net-tools-2.0-0.17.20131004git.el7.x86_64
```

→ `net-tools` は非推奨パッケージになりました。ただし、Vagrant でネットワーク・インターフェースを追加などする時に必要となるためにインストールしています。


## 6: パッケージのアップデートと SELinux の無効化

### 手順 1: Yum を使って全てのパッケージを最新バージョンにアップデートにします

```bash:ゲストOS
[vagrant@localhost ~]$ sudo yum -y update
```

### 手順 2: SELinux を無効にします

```bash:ゲストOS
[vagrant@localhost ~]$ sudo sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
[vagrant@localhost ~]$ grep "disabled" /etc/selinux/config

# disabled - No SELinux policy is loaded  
SELINUX=disabled
```

→ 値が disabled になっていることを確かめます。

### 手順 3: ゲスト OS（仮想マシン）を再起動します

```bash:ゲストOS
[vagrant@localhost ~]$ sudo systemctl reboot
```

→ ゲスト OS（仮想マシン）が再起動するまで待ちます。リブートのタイミングで最新のカーネルが読み込まれ、SELinux が無効に設定されます。

※ `shutdown` / `reboot` コマンドは非推奨コマンドになりました。

### 手順 4: ホストマシンから SSH を使ってゲスト OS（仮想マシン）にログインします

```ps1:ホストマシン
PS> & ssh vagrant@localhost -p 2222
```

### 手順 5: SELinux が無効化されたことを確認します

```bash:ゲストOS
[vagrant@localhost ~]$ sudo /usr/sbin/sestatus
```

SELinux status:　　disabled  
→ disabled と表示されていることを確かめます。

## 7: OpenSSH Server の設定

### 手順 1: 設定ファイルを編集します

```bash:ゲストOS
[vagrant@localhost ~]$ sudo sh -c "cat <<EOF | tee -a /etc/ssh/sshd_config
Port 22
ListenAddress 0.0.0.0
HostKey /etc/ssh/ssh_host_rsa_key
PermitRootLogin no
MaxSessions 10
ClientAliveCountMax 3
ClientAliveInterval 600
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
UseDNS no
EOF"

[vagrant@localhost ~]$ sudo tail -11 /etc/ssh/sshd_config

Port 22  
ListenAddress 0.0.0.0  
HostKey /etc/ssh/ssh_host_rsa_key  
PermitRootLogin no  
MaxSessions 10  
ClientAliveCountMax 3  
ClientAliveInterval 600  
PermitRootLogin no  
PubkeyAuthentication yes  
AuthorizedKeysFile .ssh/authorized_keys  
UseDNS no
```

### 手順 2: GitHub 上に公開されている Vagrant の公式リポジトリから秘密鍵をダウンロードします

```bash:ゲストOS
[vagrant@localhost ~]$ sudo curl -kL "https://raw.github.com/mitchellh/vagrant/master/keys/vagrant" -o /etc/ssh/ssh_host_rsa_key
[vagrant@localhost ~]$ sudo cat /etc/ssh/ssh_host_rsa_key

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI
w+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoP
kcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2
hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NO
Td0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcW
yLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQIBIwKCAQEA4iqWPJXtzZA68mKd
ELs4jJsdyky+ewdZeNds5tjcnHU5zUYE25K+ffJED9qUWICcLZDc81TGWjHyAqD1
Bw7XpgUwFgeUJwUlzQurAv+/ySnxiwuaGJfhFM1CaQHzfXphgVml+fZUvnJUTvzf
TK2Lg6EdbUE9TarUlBf/xPfuEhMSlIE5keb/Zz3/LUlRg8yDqz5w+QWVJ4utnKnK
iqwZN0mwpwU7YSyJhlT4YV1F3n4YjLswM5wJs2oqm0jssQu/BT0tyEXNDYBLEF4A
sClaWuSJ2kjq7KhrrYXzagqhnSei9ODYFShJu8UWVec3Ihb5ZXlzO6vdNQ1J9Xsf
4m+2ywKBgQD6qFxx/Rv9CNN96l/4rb14HKirC2o/orApiHmHDsURs5rUKDx0f9iP
cXN7S1uePXuJRK/5hsubaOCx3Owd2u9gD6Oq0CsMkE4CUSiJcYrMANtx54cGH7Rk
EjFZxK8xAv1ldELEyxrFqkbE4BKd8QOt414qjvTGyAK+OLD3M2QdCQKBgQDtx8pN
CAxR7yhHbIWT1AH66+XWN8bXq7l3RO/ukeaci98JfkbkxURZhtxV/HHuvUhnPLdX
3TwygPBYZFNo4pzVEhzWoTtnEtrFueKxyc3+LjZpuo+mBlQ6ORtfgkr9gBVphXZG
YEzkCD3lVdl8L4cw9BVpKrJCs1c5taGjDgdInQKBgHm/fVvv96bJxc9x1tffXAcj
3OVdUN0UgXNCSaf/3A/phbeBQe9xS+3mpc4r6qvx+iy69mNBeNZ0xOitIjpjBo2+
dBEjSBwLk5q5tJqHmy/jKMJL4n9ROlx93XS+njxgibTvU6Fp9w+NOFD/HvxB3Tcz
6+jJF85D5BNAG3DBMKBjAoGBAOAxZvgsKN+JuENXsST7F89Tck2iTcQIT8g5rwWC
P9Vt74yboe2kDT531w8+egz7nAmRBKNM751U/95P9t88EDacDI/Z2OwnuFQHCPDF
llYOUI+SpLJ6/vURRbHSnnn8a/XG+nzedGH5JGqEJNQsz+xT2axM0/W/CRknmGaJ
kda/AoGANWrLCz708y7VYgAtW2Uf1DPOIYMdvo6fxIB5i9ZfISgcJ/bbCUkFrhoH
+vq/5CIWxCPp0f85R4qxxQ5ihxJ0YDQT9Jpx4TMss4PSavPaBH3RXow5Ohe+bYoQ
NE5OgEXk2wVfZczCZpigBKbKZHNYcelXtTt/nP3rsCuGcM4h53s=
-----END RSA PRIVATE KEY-----
```

### 手順 3: GitHub 上に公開されている Vagrant の公式リポジトリから公開鍵をダウンロードします

```bash:ゲストOS
[vagrant@localhost ~]$ sudo curl -kL "https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub" -o /etc/ssh/ssh_host_rsa_key.pub
[vagrant@localhost ~]$ sudo cat /etc/ssh/ssh_host_rsa_key.pub

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
```

### 手順 4: ディレクトリを作成します

```bash:ゲストOS
[vagrant@localhost ~]$ mkdir -p ~/.ssh
[vagrant@localhost ~]$ ls -ld ~/.ssh/

drwxr-xr-x 2 vagrant wheel 4096 Xxx xx xx:xx /home/vagrant/.ssh/
```

### 手順 5: 公開鍵のシンボリックリンクを作成します

```bash:ゲストOS
[vagrant@localhost ~]$ ln -sf /etc/ssh/ssh_host_rsa_key.pub ~/.ssh/authorized_keys
[vagrant@localhost ~]$ ls -l ~/.ssh/authorized_keys

lrwxrwxrwx 1 vagrant wheel 29 Xxx xx xx:xx /home/vagrant/.ssh/authorized\_keys -> /etc/ssh/ssh_host_rsa_key.pub
```

### 手順 6: sshd サービスを再起動します

```bash:ゲストOS
[vagrant@localhost ~]$ sudo systemctl restart sshd
[vagrant@localhost ~]$ sudo systemctl status sshd
```

※ `service` コマンドは非推奨コマンドになりました。

### 手順 7: リスニングポートの状態を確認します

```bash:ゲストOS
[vagrant@localhost ~]$ sudo ss -lp | grep ssh

tcp    LISTEN     0      128                  *:ssh                   *:*        users:(("sshd",xxxx,3))
```

→ 上記のように表示されていれば成功です。

※ `netstat` コマンドは非推奨コマンドになりました。

## 8: VirtualBox Guest Addtions のインストール

### 手順 1: Yum を使って依存パッケージをインストールします

```bash:ゲストOS
[vagrant@localhost ~]$ sudo yum -y install gcc bzip2 make kernel-uek-devel
[vagrant@localhost ~]$ rpm -qa | egrep "gcc|bzip2|make|kernel-uek-devel"

libgcc-4.8.2-16.2.el7_0.x86_64
gcc-4.8.2-16.2.el7_0.x86_64
bzip2-1.0.6-12.el7.x86_64
bzip2-libs-1.0.6-12.el7.x86_64
make-3.82-21.el7.x86_64
kernel-uek-devel-3.8.13-44.el7uek.x86_64
```

### 手順 2: VirtualBox Guest Addtions のインストールメディアのイメージをダウンロードします

```bash:ゲストOS
[vagrant@localhost ~]$ vbox_version=$(curl -L "http://download.virtualbox.org/virtualbox/LATEST.TXT")
[vagrant@localhost ~]$ curl -L -O "http://download.virtualbox.org/virtualbox/${vbox_version}/VBoxGuestAdditions_${vbox_version}.iso"
[vagrant@localhost ~]$ ls -l

total 64400
-rw-r--r-- 1 vagrant wheel 65943552 Xxx xx xx:xx VBoxGuestAdditions_4.3.14.iso
```

### 手順 3: インストールメディアのイメージファイルをマウントします

```bash:ゲストOS
[vagrant@localhost ~]$ sudo mount -o loop ./VBoxGuestAdditions_${vbox_version}.iso /media/
[vagrant@localhost ~]$ df -h /media/

Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       63M   63M     0 100% /media
```

### 手順 4: インストーラーを実行します

```bash:ゲストOS
[vagrant@localhost ~]$ sudo sh -c "/media/VBoxLinuxAdditions.run install"

：
省略
：
Removing existing VirtualBox non-DKMS kernel modules[  OK  ]
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                   [  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  ]
Installing the Window System drivers
Could not find the X.Org or XFree86 Window System, skipping.
```

### 手順 5: インストールメディアのイメージファイルをアンマウントします

```bash:ゲストOS
[vagrant@localhost ~]$ sudo umount /media/
```

### 手順 6: インストールメディアのイメージファイルを削除します

```bash:ゲストOS
[vagrant@localhost ~]$ rm -f ./VBoxGuestAdditions_${vbox_version}.iso
```

## 9: 仕上げ

### 手順 1: Yum のキャッシュを削除します

```bash:ゲストOS
[vagrant@localhost ~]$ sudo yum clean all
```

### 手順 2: コマンド履歴 `.bash_history` を削除します

```bash:ゲストOS
[vagrant@localhost ~]$ sudo rm -f /root/.bash_history
[vagrant@localhost ~]$ rm -f ~/.bash_history
```

### 手順 3: ディスクの空き領域をゼロデータで埋めます

```bash:ゲストOS
[vagrant@localhost ~]$ sudo dd if=/dev/zero of=/empty.dat bs=1M; sudo rm -f /empty.dat
```

### 手順 4: ゲスト OS（仮想マシン）をシャットダウンします

```bash:ゲストOS
[vagrant@localhost ~]$ sudo systemctl poweroff
```

→ ゲスト OS（仮想マシン）が完全にシャットダウンするまで待ちます。

※ `shutdown` / `poweroff` / `halt` コマンドは非推奨コマンドになりました

## 10: Boxファイルの作成

Vagrant には、`vagrant package` という Box 作成のためのコマンドが用意されていますが Windows 環境では上手く動作しません。そこで、ここでは別の方法で Box ファイルの作成を行います。

### 手順 1: 任意の場所に Box ファイル作成時に一時的に利用するフォルダーを作成します

```ps1:ホストマシン
PS> & New-Item -Path "D:\vagrant\tmp\ol7" -ItemType "Directory" -Force
```

### 手順 2: 自作 Box のベースとするゲスト OS （仮想マシン）に割当てられた MAC アドレスを確認します

```ps1:ホストマシン
PS> & vboxmanage showvminfo "vagrant-oracle-linux-release-7-x86_64" --machinereadable | Select-String -Pattern "macaddress1"
```

### 手順 3: 作成したフォルダー下に `Vagrantfile` という名前でファイルを作成します

```ps1:ホストマシン
PS> New-Item -Path "D:\vagrant\tmp\ol7\Vagrantfile" -ItemType "File"
PS> Invoke-Item -Path "D:\vagrant\tmp\ol7\Vagrantfile"
```

```rb:D:\vagrant\tmp\ol7\Vagrantfile
Vagrant::Config.run do |config|
  # This Vagrantfile is auto-generated by 'vagrant package' to contain
  # the MAC address of the box. Custom configuration should be placed in
  # the actual 'Vagrantfile' in this box.
  config.vm.base_mac = "確認した MAC アドレス"
end

# Load include vagrant file if it exists after the auto-generated
# so it can override any of the settings
include_vagrantfile = File.expand_path('../include/_Vagrantfile', __FILE__)
load include_vagrantfile if File.exist?(include_vagrantfile)
```

### 手順 4: 自作 Box のベースとするゲスト OS （仮想マシン）情報を OVF 形式で出力します

```ps1:ホストマシン
PS> & vboxmanage export "vagrant-oracle-linux-release-7-x86_64" --output "D:\vagrant\tmp\ol7\box.ovf"

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Successfully exported 1 machine(s).
```

### 手順 5: 任意の場所に Box ファイル出力用のフォルダーを作成します

```ps1:ホストマシン
PS> & New-Item -Path "D:\vagrant\boxfiles" -ItemType "Directory" -Force
```

### 手順 6: 7-Zip を使って TAR 形式で圧縮します

```ps1:ホストマシン
PS> & 7z a -ttar "D:\vagrant\boxfiles\vagrant-oracle-linux-release-7-x86_64.box" "D:\vagrant\tmp\ol7\*"
```

→ 自作 Box の完成です。

## 11: テスト用ゲスト OS（仮想マシン）の作成

### 手順 1: 作成した Box ファイルを登録します

```ps1:ホストマシン
PS> & vagrant box add "oracle-linux-release-7-x86_64" "D:\vagrant\boxfiles\vagrant-oracle-linux-release-7-x86_64.box" -f
PS> & vagrant box list

oracle-linux-release-7-x86_64 (virtualbox)
```

→ 上記のように表示されれば成功です。

### 手順 2: 任意のディレクトリを作成しカレントディレクトリを移動します

```ps1:ホストマシン
PS> New-Item -Path "$HOME/test_workspace" -ItemType "Directory"
PS> Set-Location -Path "$HOME/test_workspace"
```

### 手順 3: Vagrantfile を作ります

```ps1:ホストマシン
PS> & vagrant init "oracle-linux-release-7-x86_64"
PS> Get-Item -Path "./Vagrantfile"


    ディレクトリ: C:\Users\Administrator\test_workspace


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2014/xx/xx     xx:xx       4958 Vagrantfile
```

### 手順 4: Vagrantfile を読み込みます

```ps1:ホストマシン
PS> & vagrant reload

[default] VM not created. Moving on...
```

→ 上記のように表示されれば成功です。

### 手順 5: ゲスト OS（仮想マシン）を作成します

```ps1:ホストマシン
PS> & vagrant up
PS> & vagrant status

Current machine states:

default                   running (virtualbox)

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`.
```

→ 上記のように表示されれば成功です。

### 手順 6: 作成したゲスト OS（仮想マシン）に SSH 接続で接続します

```ps1:ホストマシン
PS> & vagrant ssh

Last login: Xxx Xxx xx xx:xx:xx xxxx from 10.0.2.2
[vagrant@localhost ~]$
```

→ 上記のようにプロンプトが表示されれば成功です。

### 手順 7: ゲスト OS（仮想マシン）からログアウトします

```bash:ゲストOS
[vagrant@localhost ~]$ logout

Connection to 127.0.0.1 closed.
```

---

Bento、Packer といった Box の作成を自動化するツールもありますが、地道に手を動かしてみることで、理解を深められると思います。

GitHub上の公式レポジトリ：Bento
[https://github.com/opscode/bento](https://github.com/opscode/bento)

公式ウェブサイト：Packer
[http://www.packer.io/](http://www.packer.io/)

以上、Oracle Linux Release 7 の自作 Box の作成手順でした。