AmazonLinux2023をWSL2上で動かす

2023/03/17に公開約4,300字

DockerコンテナからWSLの環境が作成出来ること(公式ドキュメント例ではCentOSをDockerから作っている)を利用して、
amazonlinux2023公式イメージからそれっぽいものを作る

0. 動機・目的

8割方「なんとなくやってみたかったので」に尽きる。

あと、真面目な動機としては

  • ローカル環境でEC2を模擬できることは(特定の環境の人間にとって)意義深い
    • 全員が全員「サンドボックスアカウントみたいな実験用のAWS環境があって、新しいサービスや機能がリリースされれば実環境でサクッと試せる」
      みたいな環境にいる訳ではなく、職場によってちょっとしたことを実験するのにも色々手続きや制約があったりなかったり、、、
    • そういう人にとってはリスクや制約の少ないローカル環境で練習できると安心しやすい
  • 最近だとWSLは初心者+αくらいのレベルの人にまで結構浸透している感覚があって、
    VirtualBoxとかよりもむしろ人に情報展開するハードルが低そうな気がした

みたいな感じで、
どちらかというと組織内でAmazonLinux2023への移行を早める・安全にする手段の選択肢にならないか、
という仮説検証のためだったりもする。

1. 実行手順

1-0. 検証環境について

  • Windows11
  • WSL2 Ubuntu22.04LTS (dockerイメージ・コンテナの作成などに使用)

1-1. Dockerイメージの作成

Docker Official ImageとしてAmazonLinuxが公開されており、既にAmazonLinux2023も使える。

ただし、Dockerで使う用なので普通にEC2を立てたときに比べるとパッケージがかなり削ぎ落とされていたり、設定が違う部分がある。
全部をEC2の場合と同じにするのは大変だが、用途・目的に合わせて必要な分は合わせる形にする。
なお、EC2のAmazonLinux2023の設定についてはありがたいことにDevelopersIOのAmazon Linux 2023がGAされましたにかなり詳しく掲載されていたので、大幅に参考にした。

とりあえず今回は

  1. 必要そうなパッケージの追加
  2. ユーザー(おなじみec2-user)をそれっぽく作成
  3. その他設定の変更

といった感じでカスタマイズする

Dockerfileを以下のような感じで用意しておく。

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

# 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は以下の内容を設定

wsl.conf
[interop]
appendWindowsPath = false

# 正しく動いてるか微妙だったので削除
# [boot]
# systemd=true


[user]
default=ec2-user

↑について、

これでイメージのビルドを行う:

# イメージ名を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

ログインするとコメントできます