Amazon Linux 2 LTSの綺麗なVagrant boxを作ってみた（2.0.20180622.1）

## はじめに

Amazon Linux 2 LTSの正式版が出たので改めて手順を整理。
また、いままではVirtual boxのGuest Additionsをインストールしていたが、Virtual boxのバージョンアップでBoxが起動しなくなることがあったので、今回よりインストールしないことにした。入れたい人は別途入れてください。

大まかな手順
1. Amazon Linux 2のダウンロード
2. cloud init用データの作成
3. VMの作成とAmazon Linux 2の起動
4. クリーンアップとboxの作成

Amazon Linux 2の公式は次のURL

https://aws.amazon.com/jp/amazon-linux-2/

2018年7月26日時点のVirtualBoxイメージは次のものが最新

https://cdn.amazonlinux.com/os-images/2.0.20180622.1/virtualbox/amzn2-virtualbox-2.0.20180622.1-x86_64.xfs.gpt.vdi

さぁ、はじめよう。

## 準備

VirtualBoxイメージのダウンロード

```
curl -LO https://cdn.amazonlinux.com/os-images/2.0.20180622.1/virtualbox/amzn2-virtualbox-2.0.20180622.1-x86_64.xfs.gpt.vdi
```

## cloud init用データの作成

ここが一つ目のハマリポイントだった。ボリュームラベルを```cidata```にしないとAmazon Linux 2 LTSイメージの初回起動時に認識できないので注意。

```
mkdir seed
echo "local-hostname: localhost.localdomain" > seed/meta-data

cat << __EOF__ > seed/user-data
#cloud-config
# vim:syntax=yaml
users:
# A user by the name ec2-user is created in the image by default.
  - default
  - name: vagrant
    groups: wheel
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    plain_text_passwd: vagrant
    ssh-authorized-keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
    lock_passwd: false

chpasswd:
  list:
    root:vagrant
  expire: False
__EOF__

# ISOイメージの作成
hdiutil makehybrid -iso -joliet -o seed.iso seed -joliet-volume-name cidata
```

## VMの起動

コマンドラインで実行する。

```
# VMの作成とAmazon Linux 2の起動
VM=vagrant-amznlinux2
VDI=amzn2-virtualbox-2.0.20180622.1-x86_64.xfs.gpt.vdi
VBoxManage createvm --name "$VM" --ostype "RedHat_64" --register
VBoxManage storagectl "$VM" --name "SATA Controller" --add "sata" --controller "IntelAHCI"
VBoxManage storagectl "$VM" --name "IDE Controller" --add "ide"
VBoxManage storageattach "$VM" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium $VDI
VBoxManage storageattach "$VM" --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium seed.iso
VBoxManage modifyvm "$VM" --natpf1 "ssh,tcp,127.0.0.1,2222,,22" --memory 1024 --vram 8 --audio none --usb off
VBoxManage startvm "$VM" --type headless
```

## VMにログイン

```
# Vagrant insecure private keyのダウンロード
curl -sL https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant -o vagrant.pem
chmod 600 vagrant.pem

# ログイン
ssh -p 2222 vagrant@localhost -i vagrant.pem
```

## クリーンアップ

ボックス化した時にサイズを小さくするための作業

```
# クリーンアップ
sudo rm -rf /var/cache/yum
sudo dd if=/dev/zero of=/0 bs=4k
sudo rm -f /0
history -c

# シャットダウン
sudo shutdown -h now
```

## Vagrant boxの作成と登録

```
vagrant package --base "$VM"
vagrant box add --name "amzn2-2.0.20180622.1-x86_64" package.box
```

## お試し起動

```
mkdir amznlinux2
cd amznlinux2
vagrant init amzn2-2.0.20180622.1-x86_64
vagrant up
```

## お試しログイン

```
$ vagrant ssh
Last login: Wed Jul 25 08:59:18 2018 from gateway

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/

[vagrant@localhost ~]$ 
```