amtoaer

晓风残月

叹息似的渺茫,你仍要保存着那真!
github
x
telegram
steam
nintendo switch
email

在 wsl2 中完美启用 systemd

在 wsl2 中启用 systemd 的方法至少有如下三种:

  1. genie
  2. subsystemctl
  3. wsl-distrod

本文主要介绍第三种方法,并在后文介绍选用第三种方法的优势。

安装方法#

安装分为两个选项:

  1. 安装一个新的带有 systemd 的发行版
  2. 为现有的发行版增加 systemd 支持

以下分别介绍。

安装一个新的带有 systemd 的发行版#

  1. 下载并解压distrod_wsl_launcher,执行解压出的二进制文件

  2. 跟随引导安装一个新的发行版

  3. [可选项] 使用如下命令使你的发行版在 windows 启动时自动运行:

    sudo /opt/distrod/bin/distrod enable --start-on-windows-boot
    

为现有的发行版增加 systemd 支持#

  1. 下载并运行最新的安装脚本:

    curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh"
    chmod +x install.sh
    sudo ./install.sh install
    
  2. 在你的发行版中开启 distrod

    有两个选择:

    1. 在 windows 启动时运行你的发行版:

      /opt/distrod/bin/distrod enable --start-on-windows-boot
      
    2. 否则:

      /opt/distrod/bin/distrod enable
      

      注:接下来仍然可以通过执行/opt/distrod/bin/distrod enable --start-on-windows-boot让发行版跟随 windows 启动。

  3. 重新启动你的发行版

    关掉你的 wsl 窗口,在 PowerShell 中执行如下命令:

    wsl --shutdown
    

    接下来重新打开一个新的 wsl 窗口,你的 shell 将在 systemd 会话中运行。

与其它方法的对比#

官方文档中,Distrod 描述了其工作原理:

简而言之,Distrod 是一个二进制文件,它会创建一个简单的容器,将 systemd 作为 init 进程,并在该容器中启动您的 wsl 会话。为了做到这一点, Distrod 做了以下事情:

  1. 修改具体发行版的 rootfs,以使其与 wsl 和 systemd 兼容。
    1. 修改 systemd 服务,使其与 wsl 兼容。
    2. /opt/distrod/bin/distrod和其它资源放进 rootfs。
    3. 把 Distrod 二进制文件注册为登录 shell。
  2. 当 Distrod 作为登录 shell 被 wsl 的 init 进程启动时,Distrod:
    1. 在简单的容器中启动 systemd
    2. 在这个容器中启动你实际的 shell
    3. 在 systemd 会话和 wsl 交互环境间建立桥梁。

事实上 Distrod 和 genie、subsystemctl 的工作原理是类似的:创建一个容器,在容器内以 pid 1 启动 systemd 并使用 shell。在其官方文档中也有提过:

把 Distrod 作为一个独立的一次性命令:在这种情况下, distrod 的工作方式就像 genie 和 subsystemctl。

但是,Distrod 在自启动方面做了更多的工作。通过上述操作,Distrod 做到了:

  1. 安装并启用后,启动 wsl 会自动启动 systmed。
  2. 添加--start-on-windows-boot参数后,Distrod 会注册一个 windows 任务,使得 wsl 在 windows 开机时就会运行。

对比其它方法需要手动编写 shell 脚本实现自动启动,安装更简单、使用更方便的 Distrod 无疑更被用户青睐。

结语#

在安装、使用过程中遇到任何问题,可以参考官方资料

文章中发现任何错误欢迎在评论区指出!~

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。