VirtualBoxでAmazon Linux 2をオンプレミスで動かす

Amazon Linux 2は、AWS上で動作することを主目的としたLinuxディストリビューションですが、オンプレミスの環境やローカルの開発環境での利用も考慮されています。今回は、VirtualBox上でAmazon Linux 2を動かす際のネットワーク設定についてハマったので、詳しく解説します。

準備

今回使用した環境は下記のとおりです。

  • Windows 11
  • VirutalBox 7.0

AWS公式サイトでのインストール方法の説明はこちらです。

VirtualBoxでAmazon Linux 2を動かす場合、seed.isoというISOファイルを作り、それをOS導入時の起動用ISOとして指定しつつ、メインのストレージはあらかじめ準備された仮想ディスクをそのまま使います。
よくあるOSのISOファイルを使ってインストール作業を進める、といった方法ではありません。

seed.isoを作成する

Windows 11上のUbuntuを使って、下記のようにしました。

まずISOファイルを作るために、genisoimageをインストールします。

sudo apt install genisoimage

次に、新規ディレクトリを作り、meta-dataとuser-dataの2つのファイルを作ります。

meta-dataは下記のとおり。
ここでネットワークの設定を行います。

- eth0(NATアダプター)はDHCPを使用して自動的に設定。
- eth1(ホストオンリーアダプター)は静的なIP設定を行いました。
local-hostname: amazonlinux2_vm
network-interfaces: |
  auto eth0
  iface eth0 inet dhcp

  auto eth1
  iface eth1 inet static
  address 192.168.56.101
  network 192.168.56.0
  netmask 255.255.255.0
  broadcast 192.168.56.255

あらかじめ、VirtualBoxのHost-only Networksの設定を確認しておきます。

user-dataは下記のようにします。ここでec2-userのパスワードを設定します。

#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:<パスワード>
# In the above line, do not add any spaces after 'ec2-user:'.

genisoimageでISOファイルを作ります。

genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data

VDIファイルのダウンロード

Amazon Linux 2の導入済みHDDイメージ(VDIファイル)を、公式サイトからダウンロードします。

VirtualBoxで仮想マシンを作成

新規仮想マシンの設定

仮想マシンを新規作成します。

最初の画面では、名前(Amazon Linux 2)と、ISOイメージの指定を行います。ここで先ほど作成したseed.isoを指定します。

次はメモリとプロセッサ数の指定ですが、デフォルトのままにしました。

最後はストレージの指定ですが、既存のVDIファイルを使うこととして、先ほどダウンロードしたVDIファイルを指定します。

ネットワーク設定を追加

引き続き、ネットワークの設定を追加します。

デフォルトで、ネットワークアダプター1はNATになっていると思うので、これはそのまま。

アダプター2を有効にして、ホストオンリーアダプターを割り当て、VirtualBox Host-Only Ethernet Adapterを指定します。

起動

ここまでの設定を終えてから起動すると、Amazon Linux 2が立ち上がり、ログイン画面が表示されるでしょう。

user-dataで指定したパスワードを使ってログインします。

ネットワーク接続の確認

ログインしたら、ip a を実行します。

eth0がNATアダプターなので、DHCPで情報取得が行われ、10.0.2.0/24のネットワークのIPアドレスになっているはずです。この接続を介して、外部インターネットにアクセスします。

eth1はホストオンリーアダプターで、meta-dataで指定した設定になっていて、ホストOSからの接続に使用されます。(つまり、ホストOSからSSH接続する場合は、meta-dataで指定したIPアドレスにつなぎに行けば良いわけです。)

さらに、route を実行します。

default gatewayがeth0を使うようになっていれば、外に出られます。

その他の設定

あとは、自由に設定してください。というところですが、NATアダプターの設定が上手くいっていれば、sudo yum update できるでしょう。

また、ホストオンリーアダプターの設定が上手くいっていれば、ホストOSからSSH接続できるはずです。ただ、Amazon Linux 2の初期設定ではパスワードを使用したSSH接続が許可されていません。

/etc/ssh/sshd_configを編集します。

#PasswordAuthentication no ←この行をコメントアウト

あとは、sshdの再起動です。

sudo systemctl restart sshd

ホストOSからSSH接続できるようになったら、公開鍵の設定を行い、再度、パスワードを使用したSSH接続を禁止にしても良いかもしれません。
ただ、VirtualBox上で動いているものなので、そこまで厳密にする必要もないかも。

まとめ

ということで、VirtualBoxをまともに使うのが何年ぶり・・・ということもあり、ネットワーク関連で結構苦労したのですが、無事、VirtualBox上でAmazon Linux 2を使えるようになりました。

それにしても、いろいろのトラブルシューティングとか、設定方法の指示など、ChatGPT(GPT-4)がかなり使えました。というか、ずっとネットワーク接続がうまくいかなくて、袋小路にはまってしまったのですが、そこから抜け出すきっかけを与えてくれたのがChatGPTでした。凄い時代だ・・・。

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。画像認識モデルを活用したアプリや、生成AIを業務に組み込むためのサービス「Gen2Go」の開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。