Windows10 で Amazon Linux 2 を vagrant で動かすまで

Amazon Linux 2のvagrant boxを各サイトを参考にWindows10で作ってみました
ついでに、ブリッジ接続もできるか試してみましたが無事成功 :smile:

vagrantのversionが最初1.9.3でしたがその状態だとブリッジ接続がうまくいかず...

## 環境
- Windows10
- vagrant 2.0.2
- virtualbox 5.1.30 r118389 (Qt5.6.2)

## 参考リンク
- [VagrantでAmazon Linux 2を実行する](https://dev.classmethod.jp/server-side/run-amazon-linux-2-on-vagrant/)
- [Amazon Linux 2 LTSの綺麗なVagrant boxを作ってみた](https://qiita.com/moonphase/items/4bb3c63862bc70ac92bc)

## 大まかな手順
1. isoファイルの作成
2. virtualboxで起動
3. vagrantで起動～接続

## 1. isoファイルの作成

isoファイルの作成には[`isocreater`](https://sourceforge.net/projects/iso-creator-cs/?source=typ_redirect)を利用

**isoファイルにするデータ作成**

- configフォルダ作成
- config/meda-data

```
# ホスト名の指定
local-hostname: localhost.localdomain
```

- config/user-data

```yaml
# ユーザ情報の指定、vagrantユーザのログインにはvagrantがgithubで公開しているSSH公開鍵を利用
# cloud-config
users:
  - 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
```

**作成データを isocreaterでisoファイルにする**

- ファイル名 : seed.iso
- ボリュームラベル : cidata

## 2. virtualboxで起動

- Amazon Linux 2の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)からダウンロード
- vitualbox で AmazonLinux2を起動、vagrant boxにするための調整

  **[ 作成時 ]**

  - 名前 : amazonlinux2, タイプ : Linux, バージョン : Linux 2.6/3.x/4.x(64-bit)
  - すでにある仮想ハードディスクを使用する > DLした `.vdi` を指定

  **[ 作成後 ]**

  - 対象イメージ右クリック > [設定]
    - [ストレージ] > [コントローラーIDE > 空]  を選択し、作成した `seed.iso` を指定
    -   [ネットワーク] > [アダプター1 > 高度 > ポートフォワーディング]  > SSHログイン用のポートを追加（今回はホストポート`8022`, ゲストポート `22`）

  **[ 起動後 ]**

  - [SSHログイン用の秘密鍵](https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant)を使用し、SSH接続（ポートは先ほど指定したホストポート）

  **[ ログイン後 ]**

```bash
# isoファイルのアンマウント
[vagrant@localhost ~]$ sudo eject

# アップデート/開発ツールのインストール
[vagrant@localhost ~]$ sudo yum install -y kernel kernel-devel perl gcc
[vagrant@localhost ~]$ sudo yum groupinstall -y 'Development Tools'
[vagrant@localhost ~]$ sudo yum update -y

# VagrantにRHELと認識させる
[vagrant@localhost ~]$ sudo ln -s /etc/system-release /etc/redhat-release

# 再起動
[vagrant@localhost ~]$ sudo shutdown -r now

# 再起動後、vitualboxの仮想マシンウィンドウから、[デバイス] > [Guest Additions CD イメージの挿入]を実行

# Guest Additionsをインストール
[vagrant@localhost ~]$ sudo mount /dev/cdrom /mnt
[vagrant@localhost ~]$ sudo /mnt/VBoxLinuxAdditions.run

[vagrant@localhost ~]$ exit

# 仮想マシンをシャットダウン
```

## 3. vagrantで起動～接続

**box作成～追加**

```
# コマンドプロンプト / PowerShell

# packageでvmをbox化
> vagrant package --base 'amazonlinux2'

# 作成したpackage.boxに名前を付けてvagrantに追加
> vagrant box add --name amazonlinux2 package.box

# 確認
> vagrant box list
```

**起動～接続（ブリッジ）**

**Vagrantfile**

```ruby
Vagrant.configure("2") do |config|
  config.vm.box = "amazonlinux2"

  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--nictype1", "virtio"]
    vb.customize ['modifyvm', :id, "--nictype2", "virtio"]
    vb.customize ["modifyvm", :id, "--natnet1", "192.168.156/24"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
    vb.customize ["modifyvm", :id, "--memory", "1536"]
  end

  config.vm.network :public_network, ip: "10.0.33.11", :netmask => "255.0.0.0"

  config.vbguest.installer_arguments = "--nox11 -- --force"
end
```

**Vagrantで起動**

```
# コマンドプロンプト / PowerShell

# 起動
> vagrant up

# このままでつながるが、ブリッジ接続のための鍵を取得
# 実行ディレクトリ/vagrant/machines/default/virtualbox/private_key に生成される
> vagrant ssh
```

**SSHクライアントで接続**

- IP : Vagrantfileで指定したIP（今回は `10.0.33.11` ）
- 鍵：vagrant ssh の時に生成された鍵
- ポート：22