导入要与 WSL 一起使用的任何 Linux 发行版

通过使用 tar 文件导入任何 Linux 发行版,可在适用于 Linux 的 Windows 子系统 (WSL) 中使用该发行版(即使它不在 Microsoft Store 中提供)。

本文演示了如何通过使用 Docker 容器获取 Linux 发行版 CentOS 的 tar 文件来将它导入,以便与 WSL 一起使用。 此过程可应用于导入任何 Linux 发行版。

获取发行版的 tar 文件

首先,需要获取一个 tar 文件,其中包含发行版的所有 Linux 二进制文件。

可通过多种方式获取 tar 文件,其中两种方式包括:

  • 下载提供的 tar 文件。 可在 Alpine Linux 下载站点的“微型根文件系统”部分找到 Alpine 的示例。
  • 查找 Linux 发行版容器,将实例导出为 tar 文件。 以下示例将使用 CentOS 容器演示此过程。

获取 CentOS 的 tar 文件示例

在本示例中,使用 WSL 发行版中的 Docker 来获取 CentOS 的 tar 文件。

先决条件

从容器导出 tar

  1. 打开已从 Microsoft Store 安装的 Linux 发行版(本例中是 Ubuntu)的命令行 (Bash)。

  2. 启动 Docker 服务:

    sudo service docker start
    
  3. 在 Docker 中运行 CentOS 容器:

    docker run -t centos bash ls /
    
  4. 使用 grep 和 awk 获取 CentOS 容器 ID:

    dockerContainerID=$(docker container ls -a | grep -i centos | awk '{print $1}')
    
  5. 将容器 ID 导出到装载的 C 盘上的 tar 文件:

    docker export $dockerContainerID > /mnt/c/temp/centos.tar
    

Example of running the commands above

此过程从 Docker 容器导出 CentOS tar 文件,这样我们现在就可以导入它,以在本地将其与 WSL 一起使用。

将 tar 文件导入 WSL

准备好 tar 文件后,可使用以下命令导入它:wsl --import <Distro> <InstallLocation> <FileName>

导入 CentOS 示例

将 CentOS 发行版 tar 文件导入 WSL:

  1. 打开 PowerShell,并确保已创建一个要存储发行版的文件夹。

    cd C:\temp
    mkdir E:\wslDistroStorage\CentOS
    
  2. 使用命令 wsl --import <DistroName> <InstallLocation> <InstallTarFile> 导入 tar 文件。

    wsl --import CentOS E:\wslDistroStorage\CentOS .\centos.tar
    
  3. 使用命令 wsl -l -v 检查已安装的发行版。

    Example of the above commands running in WSL

  4. 最后,使用命令 wsl -d CentOS 运行新导入的 CentOS Linux 发行版。

添加特定于 WSL 的组件,例如默认用户

默认情况下,使用 --import 时,你总是作为根用户启动。 可设置自己的用户帐户,但请注意,根据每个不同的 Linux 发行版,设置过程略有不同。

若要使用刚导入的 CentOS 发行版设置用户帐户,首先打开 PowerShell 并使用以下命令引导到 CentOS:

wsl -d CentOS

接下来,打开 CentOS 命令行。 使用此命令将 sudo 和密码设置工具安装到 CentOS 中,创建用户帐户,并将其设置为默认用户。 在此示例中,用户名为“caloewen”。

注意

你需要将用户名添加到 sudoers 文件,以便允许用户使用 sudo。 命令 adduser -G wheel $myUsername 会将用户 myUsername 添加到 wheel 组中。 wheel 组中的用户会被自动授予 sudo 权限,并且可以执行需要提升权限的任务。

yum update -y && yum install passwd sudo -y
myUsername=caloewen
adduser -G wheel $myUsername
echo -e "[user]\ndefault=$myUsername" >> /etc/wsl.conf
passwd $myUsername

现在必须退出该实例,并确保所有 WSL 实例都已终止。 再次启动发行版,在 PowerShell 中运行以下命令以查看新的默认用户:

wsl --terminate CentOS
wsl -d CentOS

现在,你将看到 [caloewen@loewen-dev]$ 作为基于此示例的输出。

Example of the code above running in WSL

若要详细了解如何配置 WSL 设置,请参阅使用 .wslconfig 和 wsl.conf 配置设置

使用自定义 Linux 发行版

可创建自己的自定义 Linux 发行版(打包为 UWP 应用),其行为将与 Microsoft Store 中提供的 WSL 发行版完全一样。 若要了解如何操作,请参阅创建适用于 WSL 的自定义 Linux 发行版