AmazonLinux2023をWSL2上で動かす
Docker コンテナから WSL の環境が作成出来ること(公式ドキュメント例では CentOS を Docker から作っている)を利用して、
amazonlinux2023 公式イメージからそれっぽいものを作る
0. 動機・目的
8 割方「なんとなくやってみたかったので」に尽きる。
あと、真面目な動機としては
- ローカル環境で EC2 を模擬できることは(特定の環境の人間にとって)意義深い
- 全員が全員「サンドボックスアカウントみたいな実験用の AWS 環境があって、新しいサービスや機能がリリースされれば実環境でサクッと試せる」
みたいな環境にいる訳ではなく、職場によってちょっとしたことを実験するのにも色々手続きや制約があったりなかったり、、、 - そういう人にとってはリスクや制約の少ないローカル環境で練習できると安心しやすい
- 全員が全員「サンドボックスアカウントみたいな実験用の AWS 環境があって、新しいサービスや機能がリリースされれば実環境でサクッと試せる」
- 最近だと WSL は初心者+α くらいのレベルの人にまで結構浸透している感覚があって、
VirtualBox とかよりもむしろ人に情報展開するハードルが低そうな気がした
みたいな感じで、
どちらかというと組織内で AmazonLinux2023 への移行を早める・安全にする手段の選択肢にならないか、
という仮説検証のためだったりもする。
1. 実行手順
1-0. 検証環境について
- Windows11
- WSL2 Ubuntu22.04LTS (docker イメージ・コンテナの作成などに使用)
- WSL バージョン: 1.1.3.0
1-1. Docker イメージの作成
Docker Official Image としてAmazonLinuxが公開されており、既に AmazonLinux2023 も使える。
ただし、Docker で使う用なので普通に EC2 を立てたときに比べるとパッケージがかなり削ぎ落とされていたり、設定が違う部分がある。
全部を EC2 の場合と同じにするのは大変だが、用途・目的に合わせて必要な分は合わせる形にする。
なお、EC2 の AmazonLinux2023 の設定についてはありがたいことに DevelopersIO のAmazon Linux 2023 が GA されましたにかなり詳しく掲載されていたので、大幅に参考にした。
とりあえず今回は
- 必要そうなパッケージの追加
- ユーザー(おなじみ ec2-user)をそれっぽく作成
- その他設定の変更
といった感じでカスタマイズする
Dockerfile を以下のような感じで用意しておく。
FROM amazonlinux:2023
# WSL用の設定ファイルを追加する
COPY wsl.conf /etc/wsl.conf
USER root
RUN dnf update -y && \
# 必要そうなパッケージを追加していく \
dnf install -y --allowerasing coreutils && \
dnf install -y nano vim \
sudo passwd audit acl \
openssh openssh-clients openssh-server \
net-tools iproute iputils hostname gnutls bind-utils \
less which wget findutils rsync tar unzip zip \
bc gawk binutils \
bash-completion \
man-db man-pages \
python3-pip \
awscli-2 \
cloud-init \
dnf-plugins-core dnf-plugin-support-info dnf-plugin-release-notification \
&& \
# cache削除 \
dnf clean all && \
rm -rf /var/cache/yum && \
rm -rf /var/cache/dnf
# 自動起動したいサービスがあれば↓のような感じで設定しておく(wsl.confなどでsystemdを有効にする)
# RUN systemctl enable sshd.service
# ec2-user作成
RUN useradd -m -s /bin/bash -u 1000 ec2-user && \
echo "ec2-user ALL=NOPASSWD: ALL" >> /etc/sudoers
USER ec2-user
WORKDIR /home/ec2-user
追加しているパッケージはなんとなくなので、
必要性と目的に応じて適宜調整する。
また、useradd の各オプションは例えば https://linuxjm.osdn.jp/html/shadow/man8/useradd.8.html などを参照のこと。
更に、ec2-user はデフォルトではパスワード無しで sudo を使えるため、そのような設定にするため/etc/sudoers
へ追記している。
COPY コマンドで使っているwsl.conf
は以下の内容を設定
[interop]
appendWindowsPath = false
[boot]
systemd=true
[user]
default=ec2-user
↑ について、
-
interop.appendWindowsPath
: 趣旨的になるべく EC2 っぽいものを再現したいので、Windows の PATH を引き継がない方がそれらしいため設定している。- 詳細は公式ドキュメント参照
-
boot.systemd
: systemd を有効にするために追加- 詳細: https://learn.microsoft.com/ja-jp/windows/wsl/wsl-config#systemd-support
-
正しく動作しているか微妙だったので、コメントアウトした。← 再検証した感じ問題無さそう&Windows10/11 ともに動く感じだったので元に戻した。
- (参考として、Distrodなどを使って systemd を有効にする方法もある)
-
user.default
:wsl --import
で作成した WSL ディストリビューションはデフォルトユーザーが root になってしまうので、変えたい場合は設定が必要
これでイメージのビルドを行う:
# イメージ名をal2023にする例
docker build -t al2023 .
WSL でイメージのインポートを行うための tar ファイルを作成する。
このために一旦コンテナを起動して export を行う。
# コンテナ起動
docker run --name al2023 al2023:latest
# export
# CドライブやDドライブなど、Windows上から見える適当な場所にtarファイルを書き出す
docker export -o /mnt/d/path/to/Amazonlinux2023-Base.tar al2023 # al2023はコンテナ名。コンテナIDを使ってもOK
# tarファイルのexport完了後は↑で起動したコンテナはいらないので、コンテナ名を指定して削除
docker container rm al2023
最後に、この export した tar ファイルを PowerShell などのwsl
コマンドで import すれば OK
# wsl --import <作成するDistro名> <作成したDistroのディスクなどの格納パス> <インポートするtarファイルのパス>
# AmazonLinux2023-exampleというdistro名で作成する。
wsl --import AmazonLinux2023-example D:\Path\to\AmazonLinux2023-example D:\Path\to\AmazonLinux2023-Base.tar
export と import のあたりは公式ドキュメントも参照
import が完了すれば WSL2 に無事 AmazonLinux2023 を導入することが出来ており、
# powershellなど
wsl -d AmazonLinux2023-example -u ec2-user # AmazonLinux2023-example は作成したDistro名なので、作成内容に応じて適宜変える
のようにして開始することができる。
Discussion