Help us understand the problem. What is going on with this article?

AmazonLinux2のVagrant boxを作成してみた

More than 1 year has passed since last update.

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

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

参考サイト

sonodar
AWS, Java, JavaScript が圧倒的に得意。次いでC#, Ruby, PHP, Go, Pythonの順で得意。
m3dev
インターネット、最新IT技術を活用し日本・世界の医療を改善することを目指します
https://m3.recruitment.jp/engineer/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした