CentOS7の綺麗なboxを自作する(CentOS-7-1611編)


## はじめに

※以前のものより手順を最適化しています

CentOS7の綺麗なboxを作る備忘録。(CentOS-7-1611編)
`yum update`はしないので、ISOイメージからインストールした綺麗な状態。
好みに応じてカスタマイズしてください。

## 事前準備

次の準備が完了していること。わからない場合はグーグル先生にでも聞きましょう。

1.VirtualBoxセットアップ済み
2.vagrantセットアップ済み
3.CentsOS7のMinimal ISOダウンロード済み(今回は[CentOS-7-x86_64-Minimal-1611.iso](http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso)を準備)

## 仮想マシンの作成

VirtualBoxでベースになる仮想マシンを作成します。

1.メニューから「仮想マシン」->「新規」を選択

2.名前とオペレーティングシステム、メモリーサイズ、ハードディスクに次の内容を入力し`作成ボタン`を押す

|項目|設定内容|
|:--|:--|
|名前|vagrant-centos-7-x86_64-minimal-1611|
|タイプ|Linux|
|バージョン|Red Hat (64-bit)|
|メモリーサイズ|1024MB|
|ハードディスク|仮想ハードディスクを作成する|
※メモリ512MではSWAP領域を作成しないとインストールが進まない

3.ファイルの場所、ファイルサイズ、ハードディスクのファイルタイプ、物理ハードディスクにあるストレージに次の内容を入力し`作成ボタン`を押す

|項目|設定内容|
|:--|:--|
|ファイルの場所|vagrant-centos-7-x86_64-minimal-1611　※デフォルト値のまま|
|ファイルサイズ|64.00GB|
|ハードディスクのファイルタイプ|VDI (VirtualBox Disk Image)|
|物理ハードディスクにあるストレージ|可変サイズ|

## 仮想マシンの初期設定

仮想マシンの不要なハードウエアを無効にします。

1.仮想マシン`vagrant-centos-7-x86_64-minimal-1611`を右クリックし`設定`を選択
2.`システム`タブを開き、`起動順序`にある`フロッピー`のチェックを外す
3.`オーディオ`タブを開き、`オーディオを有効化`のチェックを外す
4.`ポート`タブを開き、続いて`USB`タブを開いて、`USBコントローラーを有効化`のチェックを外す
5.`OK`を押す

## ポートフォワーディングの設定

1.仮想マシン`vagrant-centos-7-x86_64-minimal-1611`を右クリックし`設定`を選択
2.`ネットワーク`タブを開き、`アダプター 1`にある`高度`をクリックし、`ポートフォワーディング`を押す
3.右にある`+`を押し、ホストポートに`2222`、ゲストポートに`22`を設定し`OK`を押す
4.`OK`を押す

## 仮想マシンにCentOS7のインストールメディアを設定し起動する

仮想マシンにCentOS7のインストールメディアを設定し起動します。

1.仮想マシン`vagrant-centos-7-x86_64-minimal-1611`を右クリックし`設定`を選択
2.`ストレージ`タブを開き、`コントローラー: IDE`にぶら下がっている`空`を選択
3.`光学ドライブ`の右にある`CDマークのアイコン`をクリックし、`仮想光学ディスク・ファイル`を選択
4.予めダウンロード済みの`CentOS-7-x86_64-Minimal-1611.iso`を選択
5.`OK`を押す
6.仮想マシン`vagrant-centos-7-x86_64-minimal-1611`を右クリックし`起動`->`通常起動`を選択

## CentOS7のインストール

1.`Install CentOS 7`を選択
2.インストール時に使用する言語で`日本語`を選択
3.`システム`の`インストール先`をクリックし、ファイルシステムを好みのレイアウトに変更する。テスト用途であれば、マウントポイント`/`に割り当てる領域を`grow`とする。
4.インストールを開始する
5.インストール中に、ROOTパスワードを設定する。パスワードは`vagrant`とする。
6.インストールが完了するまで待機する

## ログイン
コンソールでログインする。
```
login: root
Password: vagrant
```


## SELinuxの無効化（一時対応）

```
# setenforce 0
```

## ネットワークの起動設定

1.インタフェース名の確認

```
# nmcli c s
NAME    UUID                                  TYPE            DEVICE
enp0s3  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  802-3-ethernet  --
```

2.ONBOOTをyesにする、と同時にネットワークにもDHCPで接続される。

```
# nmcli c m enp0s3 connection.autoconnect yes
```

##sshでログイン

ここからはターミナルソフトで接続して作業を行う。
コピー＆ペーストが使えると作業が楽である。

ログインする前にポートフォーワードの設定をする。
Virtual BOXの設定から、ネットワーク、高度、ポートフォーワーディングを開き
ホストポートに 2222、ゲストポートに 22 を入力してOKを押す。もう一度OKを押す。

### ログイン情報

|項目|値|
|:--|:--|
|ホスト|127.0.0.1|
|ポート|2222|
|ユーザ|root|
|パスワード|vagrant|

```:OSXの場合はターミナルやiTerm2等で次のコマンドを実行
$ ssh -p 2222 root@127.0.0.1
```

Windowsの場合はTeratermやPuttyやPoderosa、Rlogin等でどうぞ

## SELinuxの無効化（恒久対応）

```
# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
```

## vagrantユーザの追加

ユーザ`vagrant`を作成し、パスワードを`vagrant`とする。
sudoersの設定も行う。

```
# groupadd -g 500 vagrant
# useradd -g vagrant -u 500 vagrant
# passwd vagrant
※パスワードは「vagrant」とする

# echo 'Defaults:vagrant !requiretty' > /etc/sudoers.d/vagrant
# echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/vagrant
```

## Vagrant sshの設定

```
# mkdir /home/vagrant/.ssh
# chown vagrant:vagrant /home/vagrant/.ssh
# chmod 700 /home/vagrant/.ssh
# echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ==" > /home/vagrant/.ssh/authorized_keys
# chown vagrant:vagrant /home/vagrant/.ssh/authorized_keys
# chmod 600 /home/vagrant/.ssh/authorized_keys
```

## GuestAdditionsのインストール

### GuestAdditionsインストール準備

```
# yum -y install epel-release
# yum -y install -y bzip2 gcc make kernel-devel-`uname -r` dkms gcc-c++
```

### Guest Addions CD imageのセット

VirtualBoxのゲストコンソールウインドウをアクティブにした際のメニュー`Devices`から`Insert Guest Additions CD image...`を選択

### GuestAdditionsのインストール

ターミナルに戻り、次のコマンドを実行する。

```
# mount -r /dev/cdrom /media
# /media/VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.0.32 Guest Additions for Linux............
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
Removing existing VirtualBox DKMS kernel modules[  OK  ]
Removing existing VirtualBox non-DKMS kernel modules[  OK  ]
Building the VirtualBox Guest Additions kernel modules[  OK  ]
Doing non-kernel setup of the Guest Additions[  OK  ]
Starting the VirtualBox Guest Additions Installing the Window System drivers
Could not find the X.Org or XFree86 Window System, skipping.
[  OK  ]
```

### Guest Addions CDのアンマウント

```
# umount /mnt
```

## ボックスサイズの最小化

不要なものを消します。
ddしてrmするのは、ボックスを小さくするおまじない。

```
# rm /root/.bash_history
# yum clean all
# rm -fr /var/log/*
# rm -fr /tmp/*
# dd if=/dev/zero of=/0 bs=4k
# rm -f /0
# history -c
```

## シャットダウン

```
# shutdown -h now
```

## ボックスの作成

ここからはローカルで作業します。

```
$ vagrant package --base vagrant-centos-7-x86_64-minimal-1611
==> vagrant-centos-7-x86_64-minimal-1611: Clearing any previously set forwarded ports...
==> vagrant-centos-7-x86_64-minimal-1611: Exporting VM...
==> vagrant-centos-7-x86_64-minimal-1611: Compressing package to: /Users/moonphase/package.box

$ ls -l package.box
-rw-r--r--  1 moonphase  staff  531907586  2  8 16:59 package.box
```

## ボックスの追加

```
$ vagrant box add centos-7-1611 package.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos-7-1611' (v0) for provider:
    box: Unpacking necessary files from: file:///Users/moonphase/package.box
==> box: Successfully added box 'centos-7-1611' (v0) for 'virtualbox'!

$ vagrant box list
centos-7-1611      (virtualbox, 0)
```

## 仮想マシンの作成とログイン

作成したボックスで仮想マシンを作成しログインしてみる。

```
$ mkdir centos-7-1611-test
$ cd centos-7-1611-test
$ vagrant init centos-7-1611
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.

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos-7-1611'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: centos-7-1611-test_default_1486541052717_50727
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (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: Warning: Connection timeout. Retrying...
    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/moonphase/centos-7-1611-test

$ vagrant ssh
```

ログインできたらOK!