安装 wsl2

使用管理员身份开启 windows terminal.

执行如下指令:

wsl.exe --install

等待安装完成后在开始菜单执行重启(Restart)

警告

注意是在开始菜单选择 Restart 而不能是选择 Shut Down 关机之后手动开机。

安装过程中系统会自动下载 Ubuntu 的子系统,重启后会弹出 ubuntu 的命令行初始界面,输入用户名和密码即可开始使用 ubuntu 子系统。

执行下面的指令设置 wsl 默认版本为 wsl2:

wsl --set-default-version 2

安装其他版本的子系统

如果你想要其他版本的子系统,可以执行如下指令获取可通过 wsl 指令直接安装的发行版列表:

wsl --list --online

返回数据类似下面这样:

The following is a list of valid distributions that can be installed.
Install using 'wsl --install -d <Distro>'.

NAME            FRIENDLY NAME
Ubuntu          Ubuntu
Debian          Debian GNU/Linux
kali-linux      Kali Linux Rolling
openSUSE-42     openSUSE Leap 42
SLES-12         SUSE Linux Enterprise Server v12
Ubuntu-16.04    Ubuntu 16.04 LTS
Ubuntu-18.04    Ubuntu 18.04 LTS
Ubuntu-20.04    Ubuntu 20.04 LTS

如果想要安装某发行版,直接执行相应指令即可。例如可以通过下面的指令安装 debian 子系统:

wsl --install -d Debian

当你安装了多个发行版,可以通过下面的指令指定默认发行版:

wsl --setdefault <Distro>

例如,设置 Kali-linux 为默认发行版:

wsl --setdefault Kali-linux

安装 fedora 35

wsl 提供的发行版中,并不包含 fedora 系统,所以只能手动安装。

下载 fedora 镜像文件(rootfs image)

Fedora-Container-Base 选择需要的 fedora 版本下载。

在保证 State 一栏为 complete 的前提下找到需要的版本。

Fedora 35 build

我们要下载的文件是 xz 格式,同时选择正确的架构,如 x86_64

(点击下面的链接直接下载)

Fedora-Container-Base-35-20220221.0.x86_64.tar.xz

下载好之后解压这个压缩文件,如果你不知道用什么软件,下载使用 7-Zip

警告

注意,解压为 tar 文件即可,不要继续解压 tar 文件。

此时,查看你刚刚得到的 tar 文件,在里面找到一个名为 layer.tar 的文件,单独解压它,他就是我们需要的 rootfs image。把它解压到一个容易找到的位置,比如 Downloads 目录。为了便于使用,你可以将它重命名为 fedora-35-rootfs.tar

如果你想要一些更加官方的系统镜像,可以在 docker-brew-fedora 项目中找到你想要的文件。

直接在 仓库 中找到对应的版本和架构后下载对应的文件即可。比如,你可能下载了 fedora-35-x86_64.tar.xz,下载完成后,解压这个文件,得到 tar 文件,这个 tar 文件就是 rootfs image。如果愿意,你也可以将它重命名为 fedora-35-rootfs.tar

创建你的 wsl 存储目录

创建一个文件夹来保存你的 wsl 文件。

mkdir $HOME\wsl\fedora

释放镜像文件

假设你想要将子系统命名为 fedora,想要把它保存在 $HOME\wsl\fedora 目录下,同时 rootfs 文件存储在 $HOME\Downloads\fedora-35-rootfs.tar,执行下面的指令:

wsl --import fedora $HOME\wsl\fedora $HOME\Downloads\fedora-35-rootfs.tar

检查安装情况

wsl -l

使用 root 启动 fedora 子系统:

wsl -d fedora

设置 fedora 为默认发行版

wsl -s fedora

修复问题

信息

注:以下问题是否存在取决于你下载的 fedora 版本,如果你没有对应错误直接跳过即可。

挂载错误

如果你在第一次启动 fedora 时得到了以下错误:

An error occurred mounting one of your file systems. Please run 'dmesg' for more details.

这是由于系统缺少 mount 指令造成的,如果你不需要 mount 指令也不在意错误,完全可以忽略这个错误(虽然还是建议修一下)。

安装 util-linux 这个包即可。(如果你是一个极简主义者,安装 util-linux-core 这个包)

dnf install -y util-linux

安装完成后关闭 fedora 重启即可。

wsl -t fedora

配置你的 fedora

升级系统

dnf update

创建用户

继续之前,先安装下面的包:

dnf install -y passwd cracklib-dicts

在 wheel 用户组下创建名为 myusername 的用户

useradd -G wheel myusername

为用户 myusername 设置密码

passwd myusername

使用指定用户登录 wsl

wsl -d fedora -u myusername

查看是否成功

whoami

检查是否具有 sudo 权限

sudo cat /etc/shadow

设置默认用户

首先你的系统必须是 Windows build 18980 之后的版本,只需要 修改 wsl 配置文件 即可。

如果你没有创建过 /etc/wsl.conf 文件,直接执行如下指令:

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

或者手动添加下面内容到 /etc/wsl.conf

[user]
default = myusername

关闭 fedora 子系统。

wsl -t fedora

在不指定用户的情况下启动 fedora 子系统,检查用户是否正确。

容器

如果你需要运行容器,重新安装 shadow-utils 确保修复一些 rootfs 带来的错误:

sudo dnf reinstall -y shadow-utils

ping

如果你想要执行 ping 指令,执行下面的操作:

sudo dnf install -y procps-ng iputils
sudo sysctl -w net.ipv4.ping_group_range="0 2000"

常用指令

安装下面的包来启用 Linux 下常用指令:

sudo dnf -y install iproute findutils ncurses initscripts

编辑器

安装必要的编辑器,你可以按照喜好选择 vim nanomicro

sudo dnf install -y vim

man

继续之前首先要确保 nodocs 选项没有被开启,你可以手动编辑 tsflags=nodocs 这一行,也可以直接执行下面的指令:

grep -v nodocs /etc/dnf/dnf.conf | sudo tee /etc/dnf/dnf.conf

接下来安装 man

sudo dnf install -y man man-pages

安装完成之后,在这之后安装的软件就可以使用 man 指令查看文档了,但是之前已经安装好的软件,并不能查看文档,比如现在执行 man dnf 就不会得到任何结果。需要执行 sudo dnf reinstall -y dnf 重新安装 dnf 之后,才可以正确查看相关文档。

执行下面的指令重新安装全部的包:

警告

这一步非常费时,如果你不常用 man 可以选择跳过。

for pkg in $(dnf repoquery --installed --qf "%{name}"); do sudo dnf reinstall -qy $pkg; done

允许调用 Windows 的浏览器

首先安装 wslu

sudo dnf copr enable wslutilities/wslu
sudo dnf install wslu

添加如下配置

export BROWSER=wslview

导出系统

为了方便之后安装,可以将系统导出。

首先清理掉缓存文件:

sudo dnf clean all

使用下面的指令导出 fedora 子系统到 $HOME\Downloads\fedora-wsl.tar 目录下。

wsl --export fedora $HOME\Downloads\fedora-wsl.tar

之后要使用的时候,可以使用下面的指令导入:

mkdir $HOME\wsl\freshfedora
wsl --import freshfedora $HOME\wsl\freshfedora $HOME\Downloads\fedora-wsl.tar

wsl 常用指令

查看当前正在运行的子系统

wsl --list --running

关闭指定子系统

wsl --terminate <Distro>

例如关闭正在运行的 Ubuntu 子系统:

wsl --terminate Ubuntu

关闭全部子系统

wsl --shutdown

升级 wsl

wsl --update

版本回滚

wsl --update --rollback

删除子系统

wsl --unregister <Distro>

wsl 使用技巧

在文件资源管理器中输入 \\wsl$ 即可进入 wsl 的目录。可以将它添加到文件资源管理器的网络路径里便于访问。

参考

Install Fedora 36 or earlier on Windows Subsystem for Linux (WSL)