AWS上でデフォルトで使用できるOSとして、EPELベースで開発されたAmazon謹製のLinux、”Amazon Linux 2″というものがあります。
このAmazonLinux、ほかのディストリのように公式サイトなどでインストーラが公開されていないため、一見AWS上でしか利用できないように見えますが、実は、自分のPCにインストールした仮想マシンから起動する方法と仮想マシン用のディスクイメージが、AWSの公式ドキュメントによって公開されています。
Amazon Linux 2 を仮想マシンとしてオンプレミスで実行する – AWSドキュメント
今回は、こちらの手順をもとに実際にAmazon Linux2をVirtualBox上で動かしてみたので、その手順をご紹介したいと思います。
まず前提として、Amazon Linux2はクラウド上での動作を想定しているため、インストーラなどでユーザーのログイン情報などの設定を行う仕組みが存在していません。
代わりに、cloud-confgという仕組みを使用して、外部からユーザー情報を変更することができるようになっています。
今回VirtualBoxを使用して起動する際は、AWSの代わりにseed.isoを使用して、cloud-config経由でOSの設定を行わせます。
seed.isoはLinux、またはmacOS上で生成するためのツールが提供されています。
Windows上ではツールは提供されていませんが、Windows10であればWSLを使用することでLinux用のツールが使えます。
自分の環境ではWindows10が動いているので、WSLを使用してseed.isoを生成しました。
なお、WSLはv1.0でも大丈夫です。
seed.isoの生成には、2つの設定ファイル、meta-data と user-data を用意する必要があります。
まず、meta-dataを作ります。
meta-dataには主にホスト名とネットワークの設定を記述します。
local-hostname: amz-linux #ホスト名(コンピュータ名)を指定
# eth0 is the default network interface enabled in the image. You can configure static network settings with an entry like the following.
network-interfaces: |
auto eth0
iface eth0 inet static
address IPアドレス
network ネットワークアドレス
netmask サブネットマスク
broadcast ブロードキャストアドレス
gateway デフォルトゲートウェイアドレス
公式のドキュメント通りに指定すると上記の通りになりますが、実際はIPアドレスを固定している環境は少ないと思います。
そこで、
local-hostname: amz-linux #ホスト名(コンピュータ名)を指定
# eth0 is the default network interface enabled in the image. You can configure static network settings with an entry like the following.
network-interfaces: |
auto eth0
iface eth0 inet dhcp
こちらのように、dhcpでアドレスを自動取得するように設定することもできます。
自分の環境では上記の設定でも正常に動作しました。
次に、user-dataです。
#cloud-config
#vim:syntax=yaml
users:
# A user by the name `ec2-user` is created in the image by default.
- default
chpasswd:
list: |
ec2-user:ec2-user #ユーザー名:パスワード
# In the above line, do not add any spaces after 'ec2-user:'.
#ネットワーク設定が毎回変更されないようにする場合は下記記述を入れる(任意)
# NOTE: Cloud-init applies network settings on every boot by default. To retain network settings from first
boot, add following ‘write_files’ section:
write_files:
- path: /etc/cloud/cloud.cfg.d/80_disable_network_after_firstboot.cfg
content: |
# Disable network configuration after first boot
network:
config: disabled
こちらのファイルは上記のユーザー名とパスワードの指定以外はほぼそのまま入れてください。
なお、AmazonLinuxでは、起動ごとに設定をこれらのファイルら読み込もうとするので、もし起動の度にネットワーク設定が更新されてほしくない。という場合は11行目以降の記述を行います。
この2つの設定ファイルを作成したら、
seedconfig
という名前のフォルダを作成し、2つの設定ファイルを入れておきます。
次にWSLを起動します。
基本的にRedHat系でもdebian系でも動作するかとは思いおますが、自分の場合はUbuntuを既にインストールしてあったので、このUbuntuにseed.isoを生成するコマンドをインストールします。
sudo apt update
sudo apt install genisoimage
genisoimageコマンドのインストールが完了したら、Linuxのコンソール上で先程作ったseedconfigフォルダに移動します。
例えば、Cドライブ直下にseedconfigフォルダを作った場合は、下記のようにします。
cd /mnt/c/seedconfig
次に下記のコマンドを実行します。
genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data
$ genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data
I: -input-charset not specified, using utf-8 (detected in locale settings)
Total translation table size: 0
Total rockridge attributes bytes: 331
Total directory bytes: 0
Path table size(bytes): 10
Max brk space used 0
183 extents written (0 MB)
処理が完了すると、seedconfigフォルダ内にseed.isoが生成されます。
これでseed.isoの生成は完了です。
次に、AmazonのドキュメントページからAmazon Linux 2が入った仮想ディスクを取得します。
今回はVirtualBox上で動作させるので、vdi形式のファイルを下記から入手します。
(※バージョンがアップデートされるごとにURLが変わる可能性があります。)
https://cdn.amazonlinux.com/os-images/2.0.20210126.0/virtualbox/
これで必要なファイルはすべてそろいました。
長くなってしまったので、次回の記事でVirtualBoxの設定方法をご紹介したいと思います。