Box-Cutter で CentOS 7 の box を作る


久しぶりに Box-Cutter のリポジトリ覗いたら CentOS 7 のテンプレートが出ていたので、Windows 環境で使ってみた。

大体の流れは[以前試した時](http://d.hatena.ne.jp/akishin999/20140702/1404302238 "Packer 用のテンプレート集 Box-Cutter を使ってみる")と同じ。

環境は以下。

```
>vagrant --version
Vagrant 1.6.5

>packer --version
Packer v0.7.1

>ver

Microsoft Windows [Version 6.1.7601]
```

centos-vm.git を clone。

```
>git clone https://github.com/box-cutter/centos-vm.git
>cd centos-vm
```

json ファイル編集。

```
>vim centos70.json
```

ISO のダウンロード先を変更したいので `variables` の中の `iso_url` の値を国内ミラーサーバの URL に変更。

```json
"iso_url": "http://ftp.iij.ad.jp/pub/linux/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso",
```

ここでは VirtualBox 用の box を作成したいので `builders` の中の `"type": "virtualbox-iso"` となっている部分の設定をカスタマイズ。
取り敢えず `disk_size` の値を上げておく。
`--memory` と `--cpus` については Vagrantfile でも変更できるので多分どっちでも良い。

```json
{
  "vm_name": "centos70",
  "type": "virtualbox-iso",
  "http_directory": "http",
  "iso_url": "{{ user `iso_url` }}",
  "iso_checksum": "{{ user `iso_checksum` }}",
  "iso_checksum_type": "sha1",
  "guest_os_type": "RedHat_64",
  "guest_additions_path": "VBoxGuestAdditions_{{.Version}}.iso",
  "virtualbox_version_file": ".vbox_version",
  "ssh_username": "vagrant",
  "ssh_password": "vagrant",
  "ssh_wait_timeout": "10000s",
  "headless": "{{ user `headless` }}",
  "boot_command": [
    "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort}}/ks7.cfg<enter>"
  ],
  "shutdown_command": "echo 'vagrant'|sudo -S shutdown -P now",
  "disk_size": 30420,
  "vboxmanage": [
    ["modifyvm", "{{.Name}}", "--memory", "2048"],
    ["modifyvm", "{{.Name}}", "--cpus", "2"]
  ]
},
```

http/ks7.cfg を編集。

```
>vim http\ks7.cfg
```

日本語環境にしたかったので以下の項目を変更した。

```
lang ja_JP.UTF-8
keyboard jp106
timezone Asia/Tokyo
```

準備できたので box をビルド。

```
>packer build -only=virtualbox-iso centos70.json
```

最初の ISO のダウンロードが結構時間かかるので、国内ミラーへの変更は必ずやっておいた方が良さそう。

しばらく待つと以下に box ファイルが生成される。

```
>ls -l box\virtualbox
total 179101
-rw-r--r--    1 akishin  Administ 366797715 Oct  4 17:13 centos70-nocm-0.1.0.box
```

作成した box を vagrant に追加。

```
>vagrant box add centos70 box/virtualbox/centos70-nocm-0.1.0.box
>vagrant box list
centos70          (virtualbox, 0)
```

試しに以下のような Vagrantfile を作成して `vagrant up` してみる。

```
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos70"
  config.vm.network :private_network, ip: "192.0.2.1"
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048", "--cpus", "2", "--ioapic", "on"]
  end
end
```

起動したら `vagrant ssh` して設定を適当に確認。

```shell
>vagrant ssh
Last login: Sat Oct  4 17:12:11 2014 from 10.0.2.2
Welcome to your Packer-built virtual machine.
[vagrant@localhost ~]$ cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
[vagrant@localhost ~]$ uname -a
Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[vagrant@localhost ~]$ df
ファイルシス            1K-ブロック      使用    使用可 使用% マウント位置
/dev/mapper/centos-root    28506524    845492  27661032    3% /
devtmpfs                     936532         0    936532    0% /dev
tmpfs                        942732         0    942732    0% /dev/shm
tmpfs                        942732      8460    934272    1% /run
tmpfs                        942732         0    942732    0% /sys/fs/cgroup
/dev/sda1                    508588    106044    402544   21% /boot
none                     1023999996 650020216 373979780   64% /vagrant
[vagrant@localhost ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          1841        191       1649          8          0         86
-/+ buffers/cache:        105       1736
Swap:         2063          0       2063
[vagrant@localhost ~]$ echo $LANG
ja_JP.UTF-8
[vagrant@localhost ~]$ cat /proc/cpuinfo | grep -c processor
2
```
ちゃんと出来てるっぽい。