WSL 2 で Arch Linux を使う

WSL 2 で Arch Linux を使う方法のメモです。

WSL では、tar ファイルをインポートすることで、Microsoft Store で公開されていない Linux ディストリビューションを使用できます。

カリフォルニア州消費者プライバシー保護法 (CCPA) オプトアウト アイコン

Linux 用 Windows サブシステムで使用する Linux ディストリビューションをインポートする方法について説明します。

こちらの GitHub リポジトリの手順を参考に、Arch Linux をインポートしてみました。

GitHub - badgumby/arch-wsl: Basic instructions for bootstrapping ArchLinux as a new distribution on Windows Subsystem for Linux versions 1 and 2.

Basic instructions for bootstrapping ArchLinux as a new distribution on Windows Subsystem for Linux versions 1 and 2. - badgumby/arch-wsl

Arch Linux を WSL 2 へインポートする

全体の大まかな流れとしては、pacman のミラーを指定した Arch Linux の tar ファイルを用意して、wsl コマンドでインポートするという作業になります。 作業は既存の Linux 環境で行います。

まずは Arch Linux の bootstrap tarball を入手します。

wget http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/iso/2023.04.01/archlinux-bootstrap-2023.04.01-x86_64.tar.gz
wget http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/iso/2023.04.01/sha256sums.txt
sha256sum archlinux-bootstrap-2023.04.01-x86_64.tar.gz

入手した tar ファイルを展開します。

sudo tar zxvf archlinux-bootstrap-2023.04.01-x86_64.tar.gz

pacman の mirrorlist ファイルを編集して、利用するミラー サーバーの行をコメントアウトします。

cd root.x86_64/
sudo vim etc/pacman.d/mirrorlist

mirrorlist ファイルを編集したら、新たに tar ファイルを作成します。 C ドライブに適当なフォルダを作成して tar ファイルを移動します。

sudo tar czvf root.tar.gz *

mkdir -p /mnt/c/wsl/arch
sudo mv root.tar.gz /mnt/c/wsl/arch

PowerShell を立ち上げ、用意した tar.gz ファイルを wsl --import コマンドでインポートします。 次の例では、C:\wsl\arch フォルダに VHD ファイルが配置されます。

PS C:\> wsl --import ArchLinux C:\wsl\arch C:\wsl\arch\root.tar.gz
Import in progress, this may take a few minutes.
The operation completed successfully.

wsl --list コマンドに ArchLinux が表示されればインポート完了です。 wsl -d ArchLinux で起動できます。

PS C:\> wsl --list
Windows Subsystem for Linux Distributions:
ArchLinux

PS C:\> wsl -d ArchLinux
[root@HOSTNAME USERNAME]#

Arch Linux の設定

インポート後の初期設定は、一般的な Arch Linux インストール後の手順と同様です。

pacman のキーリングを初期化し、必要なパッケージのインストールと、ミラーリストのアップデートをします。

pacman-key --init
pacman-key --populate archlinux

pacman -Syyu base base-devel git vim wget reflector zsh
pacman -Syy

reflector --country Japan --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

root ユーザーのパスワード設定と、普段利用する一般ユーザーの追加をします。

# Set root user password
passwd

# Add new user and St password
useradd -m -G wheel -s /bin/zsh -d /home/{USERNAME} {USERNAME}
passwd {USERNAME}

# uncomment wheel line (%wheel ALL=(ALL) ALL)
EDITOR=/usr/sbin/vim sudoedit /etc/sudoers

ロケールの設定をします。

# uncomment en_US.UTF-8 UTF-8 line
sudo vim /etc/locale.gen

locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
export LANG=en_US.UTF-8

WSL 起動時に、root ユーザーではなく一般ユーザーが使われるように、デフォルト ユーザーを設定します。 /etc/wsl.conf ファイルを作成して次の設定を記述します。

[user]
default={USERNAME}

ping コマンドを使えるようにする

ping コマンドを実行したところ、missing cap_net_raw+p capability or setuid? のメッセージが表示されました。

% ping 192.168.1.1
ping: socktype: SOCK_RAW
ping: socket: Operation not permitted
ping: => missing cap_net_raw+p capability or setuid?

setcap コマンドでファイル ケーパビリティを設定します。

% sudo setcap 'cap_net_raw+p' /bin/ping

getcap コマンドで cap_net_raw=p が表示されることを確認します。

% sudo getcap /bin/ping
/bin/ping cap_net_raw=p
% getcap /bin/ping
/bin/ping cap_net_raw=p

これで ping コマンドが利用できるようになりました。

% ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=254 time=1.39 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=254 time=1.09 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=254 time=1.42 ms
^C
--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.090/1.300/1.422/0.149 ms

comments powered by Disqus