Posted at

今更だがAmazonLinux2のboxをVirtualBoxで自作してみた (Windows10)

AmazonLinux2で本番EC2サーバを構築していて、localでも動くVM環境が欲しくなったのでメモという位置づけです。

対象者

既にAmazonLinux2をlocal以外の環境で利用している人

AmazonLinux2を試してみたい人

自作のBoxを作成してみたい人

環境

Windows10


localのVM環境あると何が便利?


  • 本番やステージング環境と合わせることで環境依存の不具合を無くせる

  • Vagrantや構成管理ツール (Ansible, Chef, Puppet)などと合わせると汎用性が増す

  • 開発の手軽さが増し増し

今回はuserの作成などは特にせずデフォルトで最低限必要の設定のみ実施しています

Vagrantで使用する前提かつ、ユーザの作成や環境設定などは実施する前提で作成します


VirtualBoxのインストール

以下からVirtualBoxをダウンロードしてインストール

https://www.virtualbox.org/wiki/Downloads


Vagrantのインストール

以下からVagrantをダウンロードしてインストール

https://www.vagrantup.com/downloads.html

※Hyper-Vをオフにしないと使用できません。


Virtual Box Imageをダウンロード

最新のイメージをダウンロードする場合は以下からダウンロード。

https://cdn.amazonlinux.com/os-images/latest/virtualbox/

古いイメージをダウンロードする際は、URLのlatest部分が以下のように指定することになります。

https://cdn.amazonlinux.com/os-images/2.0.20181114//virtualbox/


Box用のディレクトリを作成

どこでもいいので2階層のディレクトリを作成しましょう。

作成したディレクトリが作業ディレクトリとなります。

今回はsampleディレクトリとsample配下にconfigディレクトリを作成します。


必要なファイルの作成

作成したsampleディレクトリとsampleディレクトリ配下configディレクトリの中身は最終的に以下になります。

/sample

|--amzn2-virtualbox-2.0.20190612-x86_64.xfs.gpt.vdi
|--config
| |--meta-data
| |--seed.iso #←後程作成します
| |--user-data

まずはダウンロードしたVirtual Box Imageをsampleディレクトリに入れます。


meta-data, user-data作成

次にmeta-data, user-dataを作成していきます。

記述は必要に応じて変更してください。


meta-data

local-hostname: localhost.localdomain



user-data

#cloud-config

users:
- default

chpasswd:
list: |
root:root
expire: False

# VirtualBox Guest Additions のビルドに必要なパッケージをインストール
packages:
- kernel-devel
- kernel-headers
- gcc
- make
- perl
- bzip2
- mod_ssl


この初期化の段階でユーザを作成したい人はusersのところにユーザを追加し、必要な設定をいる必要があります。


seed.isoファイルの作成

seed.isoファイルは今回ISO Creatorを用いて作成します。

seed.isoファイルはAmazonLinux2のcloud-initで使用するもので、seed.isoを作成するには前述のmeta-dataとuser-dataが必要です。

※cloud-initはインスタンスが初期化するためのユーティリティとなります。

isocreator.png

ISO File Path (ファイルの出力先に)にsample/configディレクトリ配下seed.isoとして指定します。

Volume Nameは必ずcidataとしてください (seed.isoをcloud-initで読み込ませるのに必要です)

Folder Pathはmeta-data, user-dataが配置されているディレクトリを指定します。

つまりsample/configディレクトリです!

指定後startするとseed.isoが作成されますよ。


仮想マシンの作成

ここまで準備ができたら、VirtualBoxを起動し、仮想マシンを作成していきます。


仮想マシンの作成時の設定

virtualbox.png

AmazonLinux2は基本的にRedhat7ベースで作成されているバージョンはRedhatを選択しましょう。

マシンフォルダーはデフォルトで問題ないです。

virtual-memory.png

メモリはデフォルトで問題ないかと。

後程Vagrantで設定が可能なので。

virtual-disk.png

ここで仮想ハードディスクファイルを、ダウンロードしてきたAmazonLinux2のファイルを選択します。

これで仮想環境ができました。


仮想マシンの起動前設定

これから起動前に設定していきます。

無駄な設定を無効化し、seed.isoをディスクに追加します。

※起動前にseed.isoを入れることによってcloud-initで設定を読み込ませます。

virtual-audio.png

virtual-usb.png

不要なオーディオや、USBなどの設定は無効化しておきましょう。

virtual-drive.png

仮想光学ドライブに作成したseed.isoを追加します


仮想マシンの起動

仮想マシンを起動後の作業をまとめておきます。


仮想マシンにログイン

仮想マシンを起動後、VirtualBoxの仮想マシンウィンドウがたちあがるので、CLI上でuser-dataに記載しているID/PWを入力してログインします。

localhost login: root

password: root

virtual-login.png


独自boxを作成するための手順

以下のコマンドを仮想マシンウィンドウで実行します。

# isoファイルのアンマウント

eject

# yumのアップデート
yum update -y

# Vagrantを使用する場合はRHELと認識させる必要があるため以下を実行
ln -s /etc/system-release /etc/redhat-release

# ここまでで他に設定しておきたいものがあれば実施してください

# 再起動
shutdown -r now

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

# Guest Additionsをインストール
mount -r -t iso9660 /dev/cdrom /media
/media/VBoxLinuxAdditions.run
umount /media
systemctl enable vboxadd.service

# 後処理
## historyの削除
export HISTSIZE=0

# yumのキャッシュ削除
yum clean all
rm -rf /var/cache/yum

# 仮想ハードディスクの領域最適化
dd if=/dev/zero of=/ZERO bs=1M
rm -f /ZERO

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


仮想マシンのbox化

以下powershellで実行してください

cd マシンフォルダで設定したディレクトリ

vagrant package --base '仮想マシン名' --output 出力box名


まとめ

実際に独自Boxを作成してみて、AmazonLinux2の構造を調べる機会が多かったのでためになりました。

AmazonLinux2は保守期間も長いのでお勧めではありますが、まだ情報が少ないように思います。

記述した内容等のご質問や、建設的なご意見ありましたら是非いただけると助かります。