WSL 2でFedoraを無料で使えるようにするには

LinuxディストリビューションのFedoraをWSLで使いたい、だけどMicrosoft Storeでは有料!ということが理由で、見送ってこられた方もいるのではないでしょうか。

本稿では、Fedora 33/34を無料で使えるようにする方法を紹介します。

前提

Windows10でWSL2が使用できるところまでセットアップされていることを前提とします。また、WSLのインストールバージョンのデフォルトがWSL2となっていることとします。
上記セットアップがまだの方は、下の記事を参考にしてください。

本稿では、WSLにFedoraをインポートし、root以外のユーザが利用できるように設定します。

rootfsのダウンロード

Fedora用の”rootfs”というものを用意します。WSLへディストリビューションを追加するために必要です。
Fedora 34の”rootfs”はこちらのリンクからダウンロードください。
Fedora 33の場合はこちらのリンクです。
これ以降の図やコマンド等はFesora 34のものですが、手順は同じです。コマンドの中の「34」を「33」に読み替えてください。

ファイル名は、
fedora-34.<年月日>-x86_64.tar.xz
となっているでしょう。
7-zip等で圧縮のみ解凍して、tarファイルを取り出します。
fedora-34.<年月日>-x86_64.tarというファイルになるでしょう。ここでは「ダウンロード」の下に解凍しました。

Fedoraビルドのインポート

まず、WSL版Fedoraのビルドを格納するフォルダを作成します。ここでは、c:\linux\Fedora-34 としました。
powershellからだと、次のようにしてフォルダを作成します。

> mkdir -p c:\linux\Fedora-34

次に、先ほど用意したtarファイルからインポートし、Fedoraを構築します。

> wsl --import Fedora-34 c:\linux\Fedora-34 $HOME\Downloads\fedora-34.<年月日>-x86_64.tar

Fedora-34がWSL上に構築できました。WSLインスタンスが作成されていることを確認します。

> wsl -l -v
  NAME          STATE           VERSION
* Fedora-34     Stopped         2

ここから、WSLでFedoraを起動します。

> wsl -d Fedora-34
[root@DESKTOP-POG21K0 ms]#

上記のように、プロンプトが表示されたら起動成功です。
プロンプトの形式は、
[<Linuxログイン名>@<デバイス名> <Windowsアカウント名>]#
です。
以降の説明ではプロンプトを最後の1文字(”# “)のみで記述します。

Fedoraのバージョンを確認しましょう。

# cat /etc/redhat-release
Fedora release 34 (Thirty Four)

ここまでで、無事にFedora 34が起動されるようになりました。

新規ユーザの追加

現時点では、いきなりrootにログインしてしまうので、新しいユーザを作成します。sudoコマンドにより特権を行使できるユーザとします。

# dnf -y update
# dnf -y install findutils dnf-plugins-core dnf-utils wget curl sudo passwd ncurses

新規ユーザを追加します。
ここではログイン名を”linux”としました。

# useradd -G wheel linux
# passwd linux

以下は実行結果です。

# useradd -G wheel linux
# passwd linux
Changing password for user linux.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

作成したユーザ名が使えることを検証しておきます。
いったん、WSLを終了し、以下を実行します。

WSLを終了する
# exit
logout

WSLのlinuxユーザにログインする
> wsl -d Fedora-34 -u linux

自分のユーザIDを確認する
$ id -u
1000

特権ユーザになれることを確認する
$ cat /etc/shadow
cat: /etc/shadow: Permission denied ← 一般ユーザではエラーになる
$ sudo cat /etc/shadow
[sudo] password for linux:
root:!locked::0:99999:7::: ← 特権ユーザではエラーにならない
bin:*:18473:0:99999:7:::

作成したユーザ名をデフォルトのユーザに設定します。
WSLを終了し、Powershellに戻り、次を実行します(1行です)。
ここで、「Fedora-34」はあなたが命名したWSLインスタンスの名前、「1000」はデフォルトにするユーザのuidです。状況に応じて置き換えてください。

> Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\*\ DistributionName | Where-Object -Property DistributionName -eq Fedora-34  | Set-ItemProperty -Name DefaultUid -Value 1000

これでオプションのユーザを省略してWSLを起動しても、rootではない所定のユーザで実行できるようになりました。

参考URL