SnapdragonなWindows PCにAmazon Linux 2023をインストールする

これからはWndowsもARM64アーキテクチャが主流になるのかな？とか考えてWindows Dev Kit 2023を買ってはみたものの、その後もWindowsの主流アーキテクチャはx86_64のままで、よしんばUEFIブートでネイティブにLinuxがブートできるようになるのかな？と思ってもいたのだけど、それも叶わず、ずっと埃を被ったままでした。

2025-03 追記
その後、タイトルを変更したのでお気づきの方も要るかも？ですが、最近また懲りもせずにSnapdragon X Elite搭載のノートPCを購入しました。
そこにもこの記事の手順でAmazon Linux 2023をインストールすることができました。

そんな時に偶然にも仕事でAWS Graviton(aarch64)なAmazon Linux 2023での開発案件が回ってきて、でも円安物価高の世の中、「ec2のインスタンスは無駄に稼働させておくなよ！」と釘を刺されたので仕方なく？Windows Dev Kit 2023のWindows 11 ProのWSL2環境上にAmazon Linux 2023の開発環境を作ってみました。

※ちなみに普通の？Intel入ってる！なPCのWSL2でも、Amazon AWSからダウンロードして利用するDockerのイメージファイルを`x86_64`アーキテクチャ用に入れ替えるだけで同じ方法でAmazon Linux 2023をWSL2で利用可能でした。

WLS2の有効化やUbuntuなどのディストリビューションのインストールはやったことがある前提で、いきなりAmazon Linux 2023のインストールから始めるので、もしWSL2も使ったことがなくてそこから始める人は申し訳ないけど、他の方の記事でWSL2の有効化を済ませてから読んでいただけると…

## WSL2はすでに動いている前提で！
WSL2はこんな感じでインストールしてある前提で…
![スクリーンショット 2024-09-06 14.35.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/0876f756-d7a5-2130-1a55-269c04f433fd.png)

## Amazon Linux 2023 Dockerイメージのダウンロード
まずはAmazon AWSの公式サイトからAmazon Linux 2023のイメージファイルをダウンロードします。
とはいえ、WSL2用のAmazon Linux 2023の公式なイメージファイルは存在しないので、今回はDocker用のイメージファイルを流用しました。

Amazon AWSのオンプレ用公式イメージ
https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/outside-ec2-download.html

## Amazon Linux 2023 Dockerイメージの圧縮形式変換
ダウンロードされたイメージファイルはxz圧縮され得ているけどWSL2はgz圧縮のイメージファイルしか読み込むことができないのでLinuxやmacOS上で圧縮フォーマットの変換を行うようにします。
この際の出力ファイル名は`rootfs.tar.gz`とします。
```shell:
xz -d -c al2023-container-2023.6.20250303.0-arm64.tar.xz | gzip > rootfs.tar.gz
```

## WSL-ToyCのダウンロード
自分でWSL２用の環境を構築すのに便利なツールWSL-ToyCがGitHubで入手可能なのでこれをダウンロードします。

WSL-ToyC
https://github.com/noumia/wsl-toyc/

リリースファイルの場所
https://github.com/noumia/wsl-toyc/releases

aarch64バージョンのリリースファイルの場所
https://github.com/kazuhidet/wsl-toyc/releases

## WSL-ToyCの展開
GitHubからダウンロードしたwsl-toycのZIPファイルを解凍して全てを展開します。
この際に展開するフォルダはインストールするディストリビューションやプロジェクトの名前に合わせて変更しておくと良いでしょう。
今回は`AmazonLinux2023`というフォルダに展開しました。

![スクリーンショット 2024-09-06 14.38.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/f87405ef-4ed9-62b0-fa38-634239dcc674.png)

#### `AmazonLinux2023`というフォルダに展開
![スクリーンショット 2024-09-06 14.38.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/710e4838-8ec0-520e-f3fd-806de0fdcada.png)

## Dockerイメージのコピー
圧縮フォーマットの変換をして出来上がった`rootfs.tar.gz`ファイルを先ほどwsl-toycを解凍したフォルダにコピーする。

![スクリーンショット 2024-09-06 14.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/cf164c9e-51fb-7b78-80ea-89761ffaecdd.png)

## WSL-ToyCのランチャー実行ファイルをリネーム
wsl-toycを解凍したフォルダにあるWSLの起動用アプリlaunch-toyc.exeをインストールするディストリビューションの名前、今回のケースでは`AmazonLinux2023`にリネームしました。

![スクリーンショット 2024-09-06 14.41.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/b78c39ef-1bbf-6311-428a-609f07ee0a50.png)

## create-toyc.exeを管理者権限で実行
`create-toyc.exe`はWSL-ToyCを展開したフォルダに含まれているRootディスクイメージの圧縮ファイル(rootfs.tar.gz)をWSL2が使用するExt4タイプの仮想ディスクにフォーマット変換し、Windowsターミナル用のWSL2起動プロファイルの登録を行なってくれるツールです。

![スクリーンショット 2024-09-06 14.59.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/83fa0752-0918-cd5d-4513-5727985efcb3.png)

`create-toyc.exe`を実行すると、WSL-ToyCを展開したフォルダの中にWSL2の仮想化環境で利用する仮想ディスクイメージが作成されます。
![スクリーンショット 2024-09-06 14.50.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/c213330b-447a-8b64-f0ad-3100df2cd9b9.png)

以上の操作でWSL2のディストリビューション一覧に新しく`AmazonLinux2023`が追加されたはずです。

![スクリーンショット 2024-09-06 15.00.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/e9e1854a-2661-a9e2-0b7d-8578757ba9cd.png)

## 出来上がったAmazon Linux 2023仮想化環境の実行
`AmazonLinux2023`を起動するにはWindows Power Shellから以下のように`wsl -d [WSLディストリビューションの名前]`で実行します。

```powershell:
wsl -d AmazonLinux2023
```

![スクリーンショット 2024-09-06 15.00.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/f4208948-5b1f-940a-0690-a46117688983.png)

Amazon Linux 2023が起動する際に色々とエラーメッセージが表示されますがとりあえず無視して次の作業に進みます。

ここからは起動したAmazon Linuxでの作業となります。
Amazon Linux 2023が起動した状態ではターミナルのプロンプトが`# `(rootユーザーのプロンプト)になっているはずです。

## 不足しているパッケージをインストール
このままrootユーザーのままで作業を続けることもできなくはないですが、Linuxでは通常は権限を制限した一般ユーザーで作業を行い、必要う最低限の場合だけ権限を昇格して運用することがほとんどでしょう。
とりあえず、その作業のために人ような追加パッケージをいくつかインストールします。
```shell:
dnf install shadow-utils iproute util-linux-core openssh-clients bind-utils passwd sudo vim procps-ng
```

## 一般ユーザーの追加
Amazon Linuxが起動された直後はユーザーはrootユーザー(とシステムユーザー)のみで、一般ユーザーが存在しないので、まずはこれを追加します。
今回のケースでは自分が普段好んで使っている`kazu`というユーザー名でユーザーの追加を行いましたが、これは皆さんのお好みで！

```shell
useradd [新規ユーザー名]
```

新しいユーザーのパスワードを設定
```shell
passwd [新規ユーザー名]
```

## 追加した一般ユーザーに管理者権限を与えるための設定を行います
一般ユーザーの権限を一時的に管理者権限まで昇格させる方法としては`su`コマンドと`root`ユーザーのパスワードを使って一時的に`root`ユーザーとしてログインする方法と、`sudo`コマンドと一般ユーザーのパスワードを使い、`sudo`コマンドのパラメーターとして与えられたコマンドを管理者権限で実行する方法が一般的に使われますが、ここではAmazon ec2で実行されているAmazon Linuxでも使われる`sudo`コマンドを使う方法で設定を行います。

### 追加した一般ユーザーをグループ`wheel`に追加
最近のほとんどのディストリビューションでは一般ユーザーをグループ`wheel`に追加することで、そのユーザーが`sudo`コマンドを使えるような設定となっていて、Amazon Linux 2023でもそのような設定がされています。

```shell:
vim /etc/group
```

```config:/etc/group
mem:x:8:
kmem:x:9:
wheel:x:10:[新規ユーザー名]
cdrom:x:11:
mail:x:12:
```

ついでにec2でsudoコマンドを使う時と同じようにパスワードの入力なしでsudoコマンドを使えるようにsudoersファイルを修正します。
ここは好みと、仮想マシンを使う環境のセキュリティーの問題なので、状況に応じて変更すれば良いでしょう。

```shell:
vim /etc/sudoers
```

```config:/etc/sudoers
## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL
```

ここまでの手順が終わったらWindows Power ShellでWSL2を一旦シャットダウンします

```powershell:
wsl --shutdown
```

## ターミナルでのAmazonLinux2023ログインユーザーの変更
Windowsターミナルに自動的に追加された`AmazonLinux2023`のプロファイルでAmazon Linux 2023のWSL2を起動すると、そのままでは`root`ユーザーで仮想化環境が起動してしまうので、これを一般ユーザーで起動するように修正を加えます。

Windowsターミナルのタブの右端にあるドロップダウンメニューから「設定」を選びます。
![スクリーンショット 2024-09-06 15.06.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/f416c767-87c4-30d3-352a-fde20c5a5831.png)

`AmazonLinux2023`のコマンドラインのパラメーターに`--user [追加した一般ユーザー]`(自分の場合には'kazu')を追加します
![スクリーンショット 2024-09-06 15.08.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/ab394460-45c6-678f-18ab-02ff63d614a3.png)

あとは設定を保存してターミナルのメニュー(プロファイル)から`AmazonLinux2023`を選んでWSL2を起動するとユーザー`kazu`でAmazon Linux 2023が起動されます。

![スクリーンショット 2024-09-06 15.30.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/36c815fc-c212-1164-cdd0-4d23b13b2c02.png)

![スクリーンショット 2024-09-06 15.09.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148717/b232ec0a-489b-e80c-a8fb-05bc914e5516.png)