CORE
昨日より、明日より、笑える今が一番大好き。
在 WSL 上使用 systemd
巨硬的 Windows 才是最好的 Linux 发行版!

前言

巨硬搞的 WSL 非常好用,然鹅,因为他们用了自定义的 init 启动,使用 systemd 会报下面的错误:

System has not been booted with systemd as init system (PID 1). Can’t operate.

通过 genie 使用 systemd

genie 通过创建一个 pid 空间来实现在 WSL 上使用 systemd。

genie 基于 .NET Core 3 构建,使用前需要先安装 .NET Core 运行环境,安装方法参考微软的官方文档

然后安装 genie 即可:

curl -s https://packagecloud.io/install/repositories/arkane-systems/wsl-translinux/script.deb.sh | sudo bash
sudo apt install systemd-genie

genie 的使用方法比较简单:

# 启动 systemd 环境
genie -i
# 启动 systemd 环境,并在环境中打开 shell
genie -s
# 启动 systemd 环境,并在环境中运行命令
genie -c command

开机启动

只做上面的配置,还无法完成开机自启 enabled services,需要继续配置启动项。

首先进入 WSL 环境,创建 /etc/init.wsl 文件,内容如下:

#!/bin/bash
/usr/bin/genie -i

然后回到 Windows,Win + R 组合键打开运行,输入 shell:startup 进入启动目录。

创建一个 vbs 文件,名称随意,内容如下:

Set ws = CreateObject("Wscript.Shell")
ws.run "wsl -d Debian -u root /etc/init.wsl", vbhide

注:参数中的 Debian 需要改成你自己使用的 WSL 发行版名称。

参考


最后修改于 2021-02-21

Comments powered by Disqus