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

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

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

前提

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

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

rootfsをダウンロードしよう

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

ファイル名は、
fedora-39-x86_64.tar.xz
となっているでしょう。-39-の部分はバージョンアップで変わります。

Fedoraビルドをインポートしよう

以下は、ターミナルのPowerShellから実行します。
まず、WSL版Fedoraを格納するフォルダを作成します。ここでは、C:\Worx\fedora\fedora39 としました。
powershellからだと、次のようにしてフォルダを作成します。

> mkdir -p C:\Worx\fedora\fedora39

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

> cd ~/Downloads
> wsl --import Fedora-39 "C:\Worx\fedora\fedora39" .\fedora-39-x86_64.tar.xz

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

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

上の表示例では、従来からあった Ubuntu に加えて、Fedora-39 のインスタンスが作成されています。
ここから、WSLでFedoraを起動します。

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

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

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

# cat /etc/redhat-release
Fedora release 39 (Thirty Nine)

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

必要なパッケージをインストールしよう

# dnf -y update
# dnf group install -y Core
# dnf install -y dnf-utils wget

新規ユーザを追加しよう

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

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

# groupadd -g 1000 linux
# useradd -g 1000 -u 1000 -m -G wheel linux
# passwd linux

上の行ごとのコマンドを説明します。

  1. ユーザを追加するにあたり、ユーザが所属する「グループ」を作成します。グループ名は”linux”、グループIDは1000とします。
  2. ユーザID 1000のユーザ”linux”を新規作成します。グループ”linux”に所属し、特権ユーザとします。ホームディレクトリがなければ作成します。
  3. ユーザ”linux”にパスワードを設定します。

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

WSLを終了する
# exit
logout

WSLのlinuxユーザにログインします。

> wsl -d Fedora-39 -u linux

Fedora-39の 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起動時にユーザ名を指定する必要がなくなります。

具体的には、/etc/wsl.confにデフォルトのユーザー名を記述したセクションを追加するだけです。ただしこの方法は、Windows ビルド 18980 以降を使用している必要があります。
以下の例では、ユーザ名”linux”のセクションを追加しています。

$ printf "\n[user]\ndefault = linux\n" | sudo tee -a /etc/wsl.conf

PowerShellに戻り、Fedora インスタンスを終了して再起動します。

> wsl -t Fedora-39
> wsl -d Fedora-39

Windows ビルド 18980 よりも前のバージョンでは

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

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

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

複数のfedoraインスタンスを作成するには

現在使用しているインスタンスを削除せずに、上記の手順を済ませたインスタンスを使い始めたい場合、スタートポイントを決めてバックアップしておくことで、かなりタムパ良く作業を進めることができます。
バックアップ手順は以下の通りです。

まず、fedoraからクリーンアップを行います。

$ sudo dnf clean all
$ exit

バックアップします。

> wsl -t Fedora-39
> wsl --export Fedora-39 .\fedora-wsl.tar
> mv .\fedora-wsl.tar C:\Worx\fedora\

フレッシュなインスタンスを使い始めたいときは、別のフォルダにインスタンスを作成します。ここでは、C:\Worx\fedora\fedora-rewind とします。

> mkdir C:\Worx\fedora\fedora-rewind
> wsl --import fedora-rewind C:\Worx\fedora\fedora-rewind C:\Worx\fedora\fedora-wsl.tar

WSLインスタンスを削除するには

以下のコマンドで、登録を抹消することで削除できます。
C:\worx\fedora\fedora39 にあった ext4.vhdx(仮想イメージ)が削除されます。

> wsl --unregister Fedora-39

参考URL

Using Fedora 33 with Microsoft’s WSL2
https://fedoramagazine.org/wsl-fedora-33/

WSLにrootfsからFedoraをインストールhttps://zenn.dev/dozo/articles/860cb5b64b4a97