AmazonLinux2022 on wsl2 を試す
この記事の概要
最近はWSLをいじいじするのにハマっています。
前提条件
- ubuntu等、既に何かしらのWSLディストリビューションが入っている
- WSLのバージョンが2になっている
- WSL上でdockerが動く(docker desktopが入っている 等)
前置き
wslにはimport機能があり、コンテナのtar等を取り込んで
カスタムプラットフォームとして使うことができます。
インポート編
AL2022のtarファイルを探したんですが、公式がtarとして配布してる様子がないので
dockerイメージを起動してからtarとしてエクスポートします。
AL2022のコンテナイメージ(tar)を抽出
イメージ出力用のディレクトリを作ります。
mkdir -p /mnt/c/wslimage
まずはdocker pullでAL2022のコンテナイメージを持ってきます。
docker pull amazonlinux:2022
イメージからdocker runで起動していきます。
[boomkun@laptop:~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
amazonlinux 2022 9bea335b6ed0 2 weeks ago 159MB
[boomkun@laptop:~]$ docker run 9bea335b6ed0
コンテナIDを特定してエクスポート
[boomkun@laptop:~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e1c8b042faf 9bea335b6ed0 "/bin/bash" About a minute ago Exited (0) About a minute ago dreamy_babbage
[boomkun@laptop:~]$ docker export 8e1c8b042faf > /mnt/c/wslimage/AL2022_wsl.tar
tarをWSL2にインポートする
windowsアイコンを右クリックし、Windows PowerShell(管理者)
を起動
wsl --import
で ディストリビューション名
, 保存場所
, tarファイルの場所
の順に指定して実行します。
PS C:\WINDOWS\system32> wsl --import al2022 C:\wslimage\al2022 C:\wslimage\AL2022_wsl.tar
wsl -l -v
で一覧を確認。(-l
と-v
が逆だと動かない)
PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* AlmaLinux-8 Running 2
al2022 Stopped 2
セットアップ編
AL2022にログインする
wsl -d al2022
もしくはターミナルクライアントから、先程作成したディストリビューションに入ります。
rootユーザーで入れるはずです。
PS C:\WINDOWS\system32> wsl -d al2022
[root@PC-296 ~]#
resolv.confの自動生成をやめる
初期状態だと/etc/resolv.conf
が変な値で自動生成され
リポジトリの名前解決が出来ないなど、使用上支障をきたします。
/etc/wsl.conf
の作成と/etc/resolv.conf
の修正で防げるのでこれを実施します。
既にあるファイルの削除
unlink /etc/resolv.conf
wsl.conf + resolv.confの設定
echo "[network]" >> /etc/wsl.conf && \
echo "generateResolvConf = false" >> /etc/wsl.conf && \
echo "nameserver 8.8.8.8" > /etc/resolv.conf
※↑そのままコピーして実行でいけるはずです。
要りそうなパッケージを入れる
初期状態だとsudo
やuseradd
などの当たり前に使うコマンドが入っていないので
入れていきます。
アップデート
yum update -y
インストール
yum install tar xz zip unzip sudo shadow-utils procps wget openssh-server openssh-clients which iproute less rsyslog bind-utils jq findutils util-linux-user yum-utils -y
awscliのインストール(スキップ可)
私はawscliを使うので、最新版を入れます。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
unzip awscliv2.zip >> /dev/null && \
./aws/install
ログインユーザの作成 + デフォルトとして設定
初期状態だとrootユーザしかいないので、作業用のユーザを作ります。
useradd "wsl-user" && echo "wsl-user ALL=NOPASSWD: ALL" >> /etc/sudoers && \
echo "[user]" >> /etc/wsl.conf && \
echo "default = wsl-user" >> /etc/wsl.conf
この時点でこうなっていればOK
ユーザがいる
[root@laptop ~]# grep "wsl-user" /etc/passwd
wsl-user:x:1000:1000::/home/wsl-user:/bin/bash
resolv.conf生成がオフ + デフォルトユーザが定義されている
[root@laptop ~]# cat /etc/wsl.conf
[network]
generateResolvConf = false
[user]
default = wsl-user
WSL2上でsystemdを利用可能にする
現在の状態だと、systemd
がPID 1
以外で起動しているため使えない状態にあると思います。
[root@laptop ~]# systemctl status
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
そこで、Distrodを入れてこれを有効化していきます。
curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh" && \
chmod +x install.sh && \
./install.sh install && \
sudo /opt/distrod/bin/distrod enable
[Distrod] Distrod has been enabled. Now your shell will start under systemd.
が出ればOK
PC再起動
わかる方はwslの再起動コマンドでも構いません。
これをしないとdistrodの有効化とresolv.conf自動生成の無効化ができません。
削除編
ディストリビューションの登録解除
powershell@管理者
から以下のコマンドを実行して下さい。
wsl --unregister al2022
import
時に指定したディレクトリからディスクイメージファイルが消えるはずです。
バックアップしておきたい場合
こちらのコマンドでバックアップが取れます。
wsl --export al2022 C:\wslimage\AL2022_custom.tar
Discussion