console
➜ ~ screenfetch
/:-------------:\ polaris@IBN-5100
:-------------------:: OS: Fedora (on the Windows Subsystem for Linux)
:-----------/shhOHbmp---:\ Kernel: x86_64 Linux 5.15.167.4-microsoft-standard-WSL2
/-----------omMMMNNNMMD ---: Uptime: 1h 32m
:-----------sMMMMNMNMP. ---: Packages: 755
:-----------:MMMdP------- ---\ Shell: zsh 5.9
,------------:MMMd-------- ---: Resolution: No X Server
:------------:MMMd------- .---: WM:
:---- oNMMMMMMMMMNho .----: GTK Theme: [GTK3]
:-- .+shhhMMMmhhy++ .------/ Disk: 1.1T / 3.1T (35%)
:- -------:MMMd--------------: CPU: 12th Gen Intel Core i5-12500 @ 12x 2.995GHz
:- --------/MMMd-------------; RAM: 694MiB / 15869MiB
:- ------/hMMMy------------:
:-- :dMNdhhdNMMNo------------;
:---:sdNMMMMNds:------------:
:------:://:-------------::
:---------------------://
由于 Windows 商店中并没有 Fedora 官方提供的 WSL 发行版安装包,我不得不手动安装一份 Fedora Linux。因此这里记录一下安装过程,有个参考。
Fedora 已有计划对 WSL 2 提供官方支持 :fedoraproject.org/wiki/Change...,预计会在 Fedora 42 中提供。
准备工作
关于如何安装 WSL、设置 WSL 默认版本为 WSL 2,此处不再赘述,请看微软的文档。
在 Fedora Container Base 仓库里选择 41 分支, 并且下载 x86_64 架构的 rootfs tarball。假设其被存放在 D:\fedora.tar
。
同时要设置一个 Fedora 的安装路径,此处我设为:C:/Apps/wsl/Fedora
。
安装 Fedora 并进行必要的设置
安装并启动 Fedora WSL
首先,导入 Fedora 的 rootfs:
console
PS C:\Apps\wsl\Fedora> wsl --import Fedora . D:\fedora.tar
PS C:\Apps\wsl\Fedora> wsl -d Fedora
[root@HOSTNAME Fedora]#
发行版侧 WSL 配置
这里我们先打开 systemd 支持并禁用互操作。编辑 /etc/wsl.conf
:
ini
[boot]
systemd=true
[interop]
appendWindowsPath=false
配置 DNF 安装行为
为了缩减 Fedora Container Base 的体积,DNF 安装软件包时不会一并安装手册,但我们日常使用还是需要查手册的。同时 DNF 默认会安装弱依赖项,类似于一并安装 APT 系的建议安装的软件包,显然这不是我们想要的行为。因此,编辑 /etc/dnf/dnf.conf
:
ini
[main]
#tsflags=nodocs
install_weak_deps=False
配置软件源
虽然 Fedora 支持 Metalink,可以自行发现并使用合适的软件源,但考虑到网络因素,Metalink 未必能正常工作,又或者因为代理工具设置不当导致 Metalink 误判,仍旧建议手动设置国内软件源,以 USTC 提供的 Fedora 源为例,只需要在终端内执行:
console
# sed -e 's|^metalink=|#metalink=|g' \
-e 's|^#baseurl=http://download.example/pub/fedora/linux|baseurl=https://mirrors.ustc.edu.cn/fedora|g' \
-i.bak \
/etc/yum.repos.d/fedora.repo \
/etc/yum.repos.d/fedora-updates.repo
然后运行 dnf makecache
即可。
重新安装软件包
先将现有的软件包重新安装一遍来补充手册文件和修正 rootfs 中的粘滞位:
console
# for pkg in $(dnf rq --installed --qf "%{name}\n"); do sudo dnf reinstall -y $pkg; done
耐心等待命令跑完。
安装软件包、调整设置
Fedora 提供了一组核心软件包,可以直接用 DNF 安装(此处移除了显然毫无用处的 plymouth
):
console
# dnf install -y @core
# dnf remove -y plymouth
配置 locale
Fedora Container Base 只包括最基本的 C.UTF-8
这样的 locale。要配置更多的 locale,例如 en-US.UTF-8
:
console
# dnf install -y glibc-locale-source glibc-langpack-en langpacks-en
# localedef --force -f UTF-8 -i en_US en_US.UTF-8
然后更改 /etc/locale.conf
:
shell
LANG="en_US.UTF-8"
添加新用户
创建新用户,并且加入 sudoers(同时给 root 用户改密码):
console
# useradd -m -G wheel USERNAME
# passwd USERNAME
# passwd root
为了让 WSL 在启动时自动使用这个用户而非 root,编辑 /etc/wsl.conf
:
ini
[boot]
systemd=true
[interop]
appendWindowsPath=false
[user]
default=USERNAME
设置 Fedora 为默认 WSL 发行版
在 Windows 侧的终端内依次执行:
console
PS > wsl -t Fedora
PS > wsl -s Fedora
PS > wsl Fedora
[USERNAME@HOSTNAME ~]$ uname -a
Linux HOSTNAME 5.15.167.4-microsoft-standard-WSL2 #1 SMP Tue Nov 5 00:21:55 UTC 2024 x86_64 GNU/Linux
搞定!但还有一件事...
如果你在使用 Windows Terminal,那么在重新启动终端应用后会发现下拉菜单多了一个 Fedora 的启动项。 但是它的图标是 Linux 🐧,或者是 WSL 的图标,而不是 Fedora 的 logo。这是因为默认情况下,启动项 使用的就是 WSL 程序的图标。好在 Windows Terminal 允许我们从网络地址获取图标,所以在 Fedora 的 启动项设置里的"图标"一栏填入:https://fedoraproject.org/favicon.ico
,对应的 JSON 如下:
json
{
"guid": "{34ca07e9-c6ab-4038-b75a-37648cdac022}",
"hidden": false,
"icon": "https://fedoraproject.org/favicon.ico",
"name": "Fedora",
"source": "Microsoft.WSL"
}