目次
記事の内容
Windows の WSL では既定で Ubuntu Linux ディストリビューションがインストールされますが、本記事は WSL で Red Hat 系の Fedora を使いたいユーザーに向けてインストール手順を示します。
前提条件
本記事で動作確認した環境は以下のとおりです。
- OS:Windows10
- WSL 2 導入済み
- Fedora は Fedora 35 を使用
作業の流れ
- 作業フォルダの作成(任意)
- Fedora のアーカイブファイルをダウンロード
- Fedora アーカイブファイルの展開
- rootfs インポート先のフォルダを作成
- WSL に Fedora の rootfs をインポート
WSL に rootfs をインポートするという作業ポイントが分かれば、将来 Fedora36 などが出ても同様な手順で対応できると思います。
Windows PowerShell の起動
Windows PowerShell を起動します。起動方法は任意ですが、Windows 「Windows + X」を押して「I(アルファベットのアイ)」ボタンで Windows PowerShell が起動できます。特権ユーザーでの起動は不要です。
作業フォルダの作成(任意)
この作業は任意です。扱うファイルやファイルパスなどが把握できる場合は、この作業をしなくてもかまいません。ですが、手順にあるアーカイブファイルを展開する作業で、いくつかのファイルが展開されて散らばりますので、作業フォルダ内での作業がオススメです。本記事では、Windows の「ダウンロード」フォルダの中に作業フォルダ(本記事ではフォルダ名「FedoraWork」)を作成し、その中に Fedora アーカイブファイルをダウンロードして作業します。
New-Item $env:USERPROFILE\\Downloads\\FedoraWork -ItemType Directory
作成した FedoraWork という作業フォルダに移動します。
cd $env:USERPROFILE\\Downloads\\FedoraWork
Fedora アーカイブファイルのダウンロード
最新の Fedora アーカイブファイルをダウンロードします。たとえば、64bit 環境の場合は以下のファイルをダウンロードします。なお、このファイルは毎日のように更新されているので、最新版を使う場合は https://kojipkgs.fedoraproject.org/packages/Fedora-Container-Base/35/ から最新のファイルを利用してください。なお、本記事で扱っている Fedora ファイルの信憑性は後述します。
curl.exe -O https://kojipkgs.fedoraproject.org/packages/Fedora-Container-Base/35/20220119.0/images/Fedora-Container-Base-35-20220119.0.x86_64.tar.xz
他バージョンの Fedora をダウンロードしたい時は、ブラウザで下記 URL を表示して希望するファイルを探してみてください。
https://kojipkgs.fedoraproject.org/packages/Fedora-Container-Base/
本記事の手順で使用している Fedora ファイルの詳細情報は以下にあります。ファイルサイズやチェックサム、信憑性など気になる場合はあわせて確認ください。
https://koji.fedoraproject.org/koji/buildinfo?buildID=1879368
Fedora アーカイブファイルの展開
ダウンロードした Fedora のアーカイブファイルを展開します。
wsl.exe --exec tar xf ./Fedora-Container-Base-35-20220119.0.x86_64.tar.xz
もし、ここでアーカイブファイルがうまく展開できず、直接 tar コマンドを以下のように実行しても展開できない場合は、7-Zip のソフトウェアなどで解凍することをお試しください。Fedora38 のアーカイブでは tar コマンドでうまく展開できなかったため、この手順を追記しました。
> tar.exe xvfJ .\Fedora-Container-Base-38-20230318.n.0.x86_64.tar.xz
tar.exe: Error opening archive: Can't initialize filter; unable to run program "xz -d -qq"
(7-Zip で tar ファイルに解凍後、以下を実行)
> tar xvf .\Fedora-Container-Base-38-20230318.n.0.x86_64.tar
x d58720d46bdaed3d83632c56094182753bc9d48ae5ce504f3bdf29150861f492/
x d58720d46bdaed3d83632c56094182753bc9d48ae5ce504f3bdf29150861f492/VERSION
x d58720d46bdaed3d83632c56094182753bc9d48ae5ce504f3bdf29150861f492/json
x d58720d46bdaed3d83632c56094182753bc9d48ae5ce504f3bdf29150861f492/layer.tar
x repositories
x 68a4b0e180b9333f7f15356d271f936f5f62c9c8273a53d66ae0bd879f12f2e2.json
x manifest.json
>
ファイルを展開すると、以下のようなフォルダやファイルが見えます。この展開されたフォルダの中にある layer.tar というアーカイブファイルに Fedora のルートファイルシステム(以後 rootfs と呼称)が入っているため、これを後述する手順で WSL にインポートします。なお、フォルダは ls コマンドの出力にある Mode が d(directory) となっているものになります。
PS C:\\Users\\admin\\Downloads\\FedoraWork> wsl.exe --exec tar xf ./Fedora-Container-Base-35-20220119.0.x86_64.tar.xz
PS C:\\Users\\admin\\Downloads\\FedoraWork> ls
ディレクトリ: C:\\Users\\admin\\Downloads\\FedoraWork
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/01/19 15:48 2c850d7c6fa47fb85bd75d2d0a09b5d0cf1acc439c498422eaff76d61d365344
-a---- 2022/01/19 15:48 1316 a7657f2e473053323c68e67a1f18cae16e322c8858a5e46f13581dabdfbbd798.json
-a---- 2022/01/20 16:35 36622752 Fedora-Container-Base-35-20220119.0.x86_64.tar.xz
-a---- 2022/01/19 15:48 242 manifest.json
-a---- 2022/01/19 15:48 126 repositories
PS C:\\Users\\admin\\Downloads\\FedoraWork> cd .\\2c850d7c6fa47fb85bd75d2d0a09b5d0cf1acc439c498422eaff76d61d365344\\
PS C:\\Users\\admin\\Downloads\\FedoraWork\\2c850d7c6fa47fb85bd75d2d0a09b5d0cf1acc439c498422eaff76d61d365344> ls
ディレクトリ: C:\\Users\\admin\\Downloads\\FedoraWork\\2c850d7c6fa47fb85bd75d2d0a09b5d0cf1acc439c498422eaff76d61d365
344
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2022/01/19 15:48 1608 json
-a---- 2022/01/19 15:48 158750720 layer.tar
-a---- 2022/01/19 15:48 3 VERSION
PS C:\\Users\\admin\\Downloads\\FedoraWork\\2c850d7c6fa47fb85bd75d2d0a09b5d0cf1acc439c498422eaff76d61d365344>
rootfs インポート先のフォルダを作成
WSL に Fedora の rootfs(≒ layer.tar ファイル)をインポートするフォルダを作成しておきます。
New-Item $env:LOCALAPPDATA\\wsl\\Fedora\\35 -ItemType Directory
この後のコマンドで相対パスを扱うため、念のため作業フォルダの位置に戻ります(ファイルパスや状況が分かっている人は不要な手順です)。
cd $env:USERPROFILE\\Downloads\\FedoraWork
WSL に Fedora の rootfs をインポート
次のコマンドで WSL の新しいディストリビューションとして Fedora の rootfs(≒ layer.tar ファイル)をインポートします。コマンドの書式は「wsl.exe -import <Distro> <InstallLocation> <FileName>」となります。詳細は「wsl.exe —help」で確認ください。また、もしこの時に wsl.exe コマンドで –import オプションが使えない場合は、WSL2 ではなく WSL1 の可能性があります。WSL2 であることを確認してください。それでも実行できない場合は、Windows で WSL (Linux 用 Windows サブシステム)を有効化していない可能性も考えられますので、該当する場合は確認してみてください。
wsl.exe --import Fedora $env:LOCALAPPDATA\\wsl\\Fedora\\35 .\\2c850d7c6fa47fb85bd75d2d0a09b5d0cf1acc439c498422eaff76d61d365344\\layer.tar
WSL ディストリビューションの確認
以下のコマンドでディストリビューションの一覧を表示します。
wsl.exe -l -v
指定したディストリビューションを実行するには、-d オプションで指定します。
wsl.exe -d Fedora cat /etc/redhat-release
既定 WSL ディストリビューションの変更
WSL をお気に入りのディストリビューションで毎回起動するようにするには、以下のコマンドで既定ディストリビューションを変更します。
wsl.exe --set-default Fedora
以下は上記の参考手順と出力例です。
PS C:\\Users\\admin\\Downloads\\FedoraWork> wsl.exe --set-default Fedora
PS C:\\Users\\admin\\Downloads\\FedoraWork> wsl.exe -l
Linux 用 Windows サブシステム ディストリビューション:
Fedora (既定)
CentOS7
Ubuntu
PS C:\\Users\\admin\\Downloads\\FedoraWork>
作業フォルダを削除(操作注意)
作業で使用したフォルダやファイルは不要なので削除しておきます。コマンドで手順を示しますが、使い慣れたファイルエクスプローラーで該当フォルダ(本記事では FedoraWork)を削除しても問題ありません。コマンドで実行する場合は、誤ったフォルダを削除しないように慎重にフォルダ指定をしてください。
Remove-Item -Recurse $env:USERPROFILE\\Downloads\\FedoraWork\\
WSL に Fedora を導入する手順は以上です。お疲れ様でした。
以降の情報は参考情報です。
WSL ディストリビューションの削除方法(操作注意)
ちなみに WSL のディストリビューションを削除するには「—unregister」オプションでディストリビューション名を指定します。これを実行するとディストリビューションと関連するファイルシステムが全て消えるので注意してください。実行時に「本当に削除しますか?」という確認もなくサッと消えてしまうので実行する際は慎重に操作してください。
wsl.exe --unregister Fedora
rootfs(layer.tar ファイル)とは
手順の中にあった rootfs(layer.tar ファイル)について少し深堀りをしておきます。実際に layer.tar ファイルを展開してみると分かりやすいです。layer.tar ファイルを展開すると、以下のように Linux のディストリビューションでよく見かけるルート「/」のマウントポイントにマウントされるファイルシステムのディレクトリ構成が見えてきます。つまり、WSL にこのディレクトリ構造をインポートするのが作業ポイントとなっています。
$ ls
json layer.tar VERSION
$ tar xf layer.tar
$ ls
bin dev home layer.tar lib64 media opt root sbin sys usr VERSION
boot etc json lib lost+found mnt proc run srv tmp var
$