📌

WSL上でAmazon Linux 2023を動かす方法

2023/07/11に公開
1

はじめに

現時点ではMicrosoft storeからAmazon Linux 2023をインストールすることはできません。
Amazon Linux 2023を使って何かを検証したいときにEC2インスタンスを立てるのも面倒なので、WSL上でAmazon Linux 2023を動かす方法を紹介します。

前提条件

  • WSL2がインストールされていること
  • Docker Desktopがインストールされていること

Amazon Linux 2023のイメージをPullする

まずWSLでDockerを有効化し、Amazon Linux 2023最新のイメージをPullします。

sudo service docker start

sudo docker pull amazonlinux

---
Using default tag: latest
latest: Pulling from library/amazonlinux
a802d1401e24: Pull complete
Digest: sha256:28004508959f548dd98278f746c577a41b8340dc295e51d309e721e4e217bb85
Status: Downloaded newer image for amazonlinux:latest
docker.io/library/amazonlinux:latest

Amazon Linux 2023のイメージを起動する

次に、Amazon Linux 2023のイメージを起動します。

sudo docker run -it amazonlinux uname -a
---
Linux fec0d6728c41 5.15.90.2-microsoft-standard-WSL2 #1 SMP Fri Jun 2 00:45:15 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

Container IDを確認する

続いて、起動したAmazon Linux 2023のイメージのContainer IDを確認します。

sudo docker container ls -a | grep amazonlinux
262e493a4f8f   amazonlinux   "uname -a"   4 seconds ago   Exited (0) 3 seconds ago             modest_wilbur

Container をtarファイルにエクスポートする

Container IDを確認したら、Containerをtarファイルにエクスポートします。

sudo docker export 262e493a4f8f > ~/amazonlinux.tar

エクスポート完了したら、Windowsのファイルエクスプローラーで\\wsl.localhost\<WSL名>\home\<ユーザー名>を開き、外にコピーもしくは移動します。
WSL名は、wsl -lで確認できます。

Amazon Linux 2023のイメージをWSLにインポートする

最後に、PowerShellを起動し、WSLにAmazon Linux 2023のイメージをインポートします。

# wsl --import AmazonLinux2023 <AmazonLinux2023の置き場所> <tarファイルの置き場所>
wsl --import AmazonLinux2023 'E:\AmazonLinux2023' 'D:\amazonlinux.tar'

確認

PS C:\Users\xx> wsl -l -v
NAME                   STATE           VERSION
* Ubuntu                 Running         2
  AmazonLinux2023        Stopped         2 <- 追加されていることを確認
  docker-desktop-data    Running         2
  Ubuntu-22.04           Running         2
  docker-desktop         Running         2

まとめ

WSL上でAmazon Linux 2023を動かす方法を紹介しました。
現時点で足りないところとしてはデフォルトrootユーザーで起動され、wsl コマンドで設定できないことで、
使えるまでには他に初期設定が必要になります。

Discussion

トイトイ

本手順を参考に以下の WSL バージョン(2024/02/16 時点の最新 WSL)で動かすと

>wsl -v
WSL バージョン: 2.0.14.0

以下のようなエラーが発生します。

<3>WSL (10) ERROR: CreateProcessParseCommon:708: Failed to translate ..カレントディレクトリ..
<3>WSL (10) ERROR: UtilTranslatePathList:2866: Failed to translate C:\WINDOWS\system32
<3>WSL (10) ERROR: UtilTranslatePathList:2866: Failed to translate C:\WINDOWS
...
Processing fstab with mount -a failed.
Failed to mount C:\, see dmesg for more details.

また、このエラーが出た状態だと /mnt/c のマウントがうまく行っておらず、WSL から Windows ファイルを参照できません。

本問題は初期状態の amazonlinux コンテナが mount コマンドを備えていないことに起因して発生するエラーのようです。

以下のような Dockerfile を用意して予め mount コマンドをインストールした状態のコンテナをエクスポートして使うことで解決できます。

FROM amazonlinux

RUN yum update -y && yum install -y util-linux && yum clean all

以下、ビルド&起動コマンドです。

# ビルド(Dockerfile を置いたところで実行)
docker build -t custom-amazonlinux .
# ビルド済みイメージを起動
docker run -it custom-amazonlinux uname -a
# ...

上記 Dockerfile は本問題を解決する必要最小限のものですが「使えるまでには他に初期設定が必要になります。」の設定を書く場所として使うこともできます。