はじめに
Amazon Linux 2 LTSのVagrant box作る方法、2018/1/16時点の各種情報ではそのままではいくつかハマってうまくいかなかった。
でもちゃんと公式読んだら出来た。公式読まなかった俺が悪い。
備忘録としてAmazon Linux 2 LTSの綺麗なVagrant boxを作成する方法を残しておく。
環境はmacOS Sierraでやってる。
大まかな手順
- Amazon Linux 2のダウンロード
- cloud init用データの作成
- VMの作成とAmazon Linux 2の起動
- Guest Additionsのインストール
- クリーンアップとboxの作成
Amazon Linux 2の公式は次のURL
2018年1月16日時点のVirtualBoxイメージは次のものが最新
さぁ、はじめよう。
準備
VirtualBoxイメージのダウンロード
curl -LO https://cdn.amazonlinux.com/os-images/2017.12.0.20171212.2/virtualbox/amzn2-virtualbox-2017.12.0.20171212.2-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-2017.12.0.20171212.2-x86_64.xfs.gpt.vdi
VGA=/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso
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
VBoxGuestAdditionsのインストール準備
kernelを入れない手順が多くアップされているが、kernelを入れないとVBoxGuestAdditionsで失敗する。ここが二つ目のハマリポイント。kernelも指定しておけば取り敢えずOK。
# VBoxGuestAdditions依存パッケージのダウンロード
sudo yum install -y kernel kernel-devel perl gcc
# 再起動
sudo shutdown -r now
VBoxGuestAdditionsのインストール
# VBoxGuestAdditionsイメージをアタッチ
VBoxManage storageattach "$VM" --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium $VGA --forceunmount
# ログイン
ssh -p 2222 vagrant@localhost -i vagrant.pem
# VagrantにRHELと認識させるおまじない
sudo ln -s /etc/system-release /etc/redhat-release
# OSからマウント
sudo mount -r /dev/cdrom /media
# VBoxGuestAdditionsのインストール
sudo /media/VBoxLinuxAdditions.run --nox11
# アンマウント
sudo umount /media
クリーンアップ
ボックス化した時にサイズを小さくするための作業
# クリーンアップ
rm $HOME/.bash_history
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-2017.12.0.20171212.2-x86_64" package.box
お試し起動
mkdir amznlinux2
cd amznlinux2
vagrant init amzn2-2017.12.0.20171212.2-x86_64
vagrant up
お試しログイン
$ vagrant ssh
Last login: Tue Jan 16 08:24:53 2018 from gateway
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
No packages needed for security; 5 packages available
Run "sudo yum update" to apply all updates.