如何在 WSL2 上启用 systemd:Ubuntu 20 和 CentOS 8

dat*_*uoc 9 linux init systemd systemctl windows-subsystem-for-linux

我在 WSL2(适用于 Linux 的 Windows 子系统,v2)上并从以下位置获得 CentOS 8 WSL:https :
//github.com/yuk7/CentWSL

从 Windows Store 下载的 Ubuntu 20 WSL 也没有systemd启用。

让它像往常一样运行,但是systemd没有运行,尽管它确实存在于文件系统中:

$ cat /etc/*-release | grep NAME
NAME="CentOS Linux"
PRETTY_NAME="CentOS Linux 8 (Core)"
CPE_NAME="cpe:/o:centos:centos:8"

$ stat /lib/systemd/systemd
  File: /lib/systemd/systemd
  Size: 2523648         Blocks: 4936       IO Block: 4096   regular file
Device: 2h/2d   Inode: 1407374884100769  Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-05-31 13:17:53.497597100 +0700
Modify: 2020-04-10 04:52:32.000000000 +0700
Change: 2020-05-30 12:06:52.791586300 +0700
 Birth: -

$ systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
Run Code Online (Sandbox Code Playgroud)

/sbin/init已经是到的符号链接systemd

$ stat /sbin/init
  File: /sbin/init -> ../lib/systemd/systemd
  Size: 22              Blocks: 0          IO Block: 4096   symbolic link
Device: 2h/2d   Inode: 2251799814381086  Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-04-10 04:52:20.000000000 +0700
Modify: 2020-04-10 04:52:20.000000000 +0700
Change: 2020-05-30 12:06:53.461589000 +0700
 Birth: -
Run Code Online (Sandbox Code Playgroud)

我找到了 2 个初始化文件:

/init
/sbin/init --> /lib/systemd/systemd
Run Code Online (Sandbox Code Playgroud)

可能加载 WSL2 Linux 内核/init而不是/sbin/init?

如何systemd在此发行版中启用sshd、nginx 等守护进程运行?需要触摸/sbin/init或那种文件?

dat*_*uoc 8

我在这里有一个解决方法,但它不适用于那些明确需要 systemd 的服务:

仍然使用/init而不是/sbin/init在 WSL2 上,适用于常规服务,而不是那些明确需要“systemd”的服务。

找出 systemctl 在哪里:

which systemctl

使用 systemctl 的路径执行以下命令。

安装 Python 2(如果默认不可用):

sudo dnf install python2 -y
sudo ln -s /usr/bin/python2 /usr/bin/python
Run Code Online (Sandbox Code Playgroud)

用 Python 包装 systemctl(或以某种方式让 systemctl 与 systemd 一起工作,而不是在 PID 1 上):

sudo mv /usr/bin/systemctl /usr/bin/systemctl.old
curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py >temp
sudo mv temp /usr/bin/systemctl
sudo chmod +x /usr/bin/systemctl
Run Code Online (Sandbox Code Playgroud)

测试 systemctl:

sudo dnf install nginx -y
sudo systemctl start nginx
curl localhost
sudo systemctl stop nginx
Run Code Online (Sandbox Code Playgroud)


小智 5

我发现这很有帮助:

  • 小心第一个链接。似乎该脚本不适用于最新版本,并且维护者已存档该存储库。 (3认同)

小智 5

systemd-genie https://github.com/arkane-systems/genie推荐用于 systemd.io 支持和认可的每个发行版。它适用于系统(systemd --system)和用户模式(systemd --user)。t 维护良好,易于与 wsl 和 Windows 终端集成。不需要额外的脚本。