LoginSignup
16

More than 5 years have passed since last update.

AmazonLinux2のVagrant boxを作成してみた

Last updated at Posted at 2017-12-14

Amazon Linux 2 が公開されたのでVirtualBox用のboxファイルを生成してみた。

イメージをダウンロード

AmazonLinuxのOSイメージは https://cdn.amazonlinux.com/os-images/latest/ で公開されている。
VirtualBox用のvdiファイルをダウンロードする。

wget -O amznlinux2.vdi https://cdn.amazonlinux.com/os-images/2017.12.0.20171212.2/virtualbox/amzn2-virtualbox-2017.12.0.20171212.2-x86_64.xfs.gpt.vdi

Vagrantの公開鍵を生成

vagrant sshでSSHログインできるようにローカルのvagrant秘密鍵から公開鍵を生成しておく。

# 秘密鍵のパスを取得
PKEY=$(vagrant ssh-config | grep IdentityFile | awk '{print $2}')
# 公開鍵をシェル変数に突っ込む(user-dataで使う)
PUBKEY=$(ssh-keygen -yf ${PKEY})

user-dataの作成

AmazonLinuxのVMイメージはそのままではログインできないので、user-dataをseed.isoを使って実行する必要があるらしい。
vagrantユーザの作成と、念のためrootのパスワードも設定しておく。

cat <<__EOT__ > user-data
#cloud-config
users:
  - name: vagrant
    sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
    ssh_pwauth: True
    ssh_authorized_keys:
      - ${PUBKEY}
chpasswd:
  list: |
    root: amazonlinux2
    vagrant: vagrant
  expire: False
__EOT__

こんな感じのファイルができる。

user-data
#cloud-config
users:
  - name: vagrant
    sudo: [ "ALL=(ALL) NOPASSWD:ALL" ]
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa XXXXXXXX.....
chpasswd:
  list: |
    root: amazonlinux2
    vagrant: vagrant
  expire: False

seed.isoの作成

公式ドキュメントに書いてあるとおりに実行。
genisoimageが必要なのでdebianのdockerイメージで作成する。

echo "local-hostname: amznlinux2" > meta-data
# ローカルディレクトリをマウントして起動
docker run -it --rm -v $(pwd):/data debian sh
# 以降はdockerコンテナ内でのコマンド
apt-get update && apt-get install -y genisoimage
cd /data; genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data
exit

カレントディレクトリにseed.isoが生成されている。

$ ls
amznlinux2.vdi  meta-data  seed.iso  user-data

VirtualBoxでAmazonLinux2を起動

設定項目
仮想マシン名 任意
タイプ Linux
バージョン Red Hat (64-bit)
メモリ 1024MB
ストレージ SATA1: 1でダウンロードしたイメージ
SATA2: seed.iso
IDE1: VBoxGuestAdditions.iso
ネットワーク NAT: 2222 -> 22

コマンドラインで作成する場合は以下。

VM=amznlinux2
# 仮想マシンを作成
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"
# 仮想ディスクとISOをアタッチ
VBoxManage storageattach "$VM" --storagectl "SATA Controller" \
  --port 0 --device 0 --type hdd --medium amznlinux2.vdi
VBoxManage storageattach "$VM" --storagectl "SATA Controller" \
  --port 1 --device 0 --type dvddrive --medium seed.iso
VBoxManage storageattach "$VM" --storagectl "IDE Controller" \
  --port 0 --device 0 --type dvddrive --medium /path/to/VBoxGuestAddtions.iso
# ポートフォワードとメモリを調整
VBoxManage modifyvm "$VM" --natpf1 "ssh,tcp,127.0.0.1,2222,,22" --memory 1024 --vram 8
# 仮想マシンを起動
VBoxManage startvm "$VM" --type headless

VBoxGuestAdditionsをインストール

作成した仮想マシンにSSHでログインする。

ssh vagrant@localhost -p 2222 -i ${PKEY}
# vagrantをごまかすためにシンボリックリンクをはる
sudo ln -s /etc/system-release /etc/redhat-release

仮想マシンにVBoxGuestAdditionsをインストールする。

# 依存パッケージのインストール
sudo yum install -y kernel-devel perl gcc
# VBoxGuestAdditions.isoをマウントしてインストール
sudo mount -r /dev/cdrom /mnt
sudo /mnt/VBoxLinuxAdditions.run --nox11
sudo umount /mnt
# Box化したときに圧縮効率を良くするため空ファイルを作成して削除
sudo rm -rf /var/cache/yum
sudo dd if=/dev/zero of=/EMPTY bs=1M
sudo rm -f /EMPTY
# シャットダウン
sudo poweroff

boxの作成と登録

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

Vagrantで起動してみる

vagrant init amzn2-2017.12.0.20171212.2-x86_64
# そのままvagrant upを実行するとSSHのhost_keyでエラーになるので
# イメージ生成時に利用したhost_keyを削除しておく(いらないかも)
sed -i '/localhost/d' ~/.ssh/known_hosts
# 起動!
vagrant up
vagrant ssh

仮想マシンにログインできれば成功!!

参考サイト

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16