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

## はじめに

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

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

## 事前準備

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

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

## 仮想マシンの作成

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

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

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

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

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

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

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

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

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

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

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

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

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

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

## 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
```
※enp0s3の箇所はさっき調べたインタフェース名にする

##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 --nox11
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.2.6 Guest Additions for Linux........
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules.
VirtualBox Guest Additions: Starting.
```

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

```
# umount /media
```

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

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

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

## シャットダウン

```
# shutdown -h now
```

## ボックスの作成

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

```
ボックス作成前にメモリを512Mにしておく。
$ VBoxManage modifyvm vagrant-centos-7-x86_64-minimal-1708 --memory 512

ボックスの作成
$ vagrant package --base vagrant-centos-7-x86_64-minimal-1708
==> vagrant-centos-7-x86_64-minimal-1708: Clearing any previously set forwarded ports...
==> vagrant-centos-7-x86_64-minimal-1708: Exporting VM...
==> vagrant-centos-7-x86_64-minimal-1708: Compressing package to: /Users/moonphase/package.box

$ ls -l package.box
-rw-r--r--  1 tuemura  1219831777  539693954  1 21 06:44 package.box
```

## ボックスの追加

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

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

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

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

```
$ mkdir centos-7-1708-test
$ cd centos-7-1708-test
$ vagrant init centos-7-1708
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-1708'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: centos-7-1708-test_default_1516934907514_84187
==> 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/moonphase/centos-7-1708-test

$ vagrant ssh
```

ログインできたらOK!