Featured image of post wsl添加systemd

wsl添加systemd

准确来说应该是wsl2添加systemd支持,以便可以使用systemctl管理系统服务了。

wsl添加systemd

最近突然看到wsl可以支持 systemd 了!嚯!总算是等到它了。为什么这么期待它呢?因为wsl有了systemd就会变得更完整了。主要的影响就是可以用 systemctl 管理软件服务了。话不多说,开整。

原文链接

Systemd support is now available in WSL!

Craig Loewen September 21 2022

Systemd support lands in WSL – unleash the full power of Ubuntu today

Oliver Smith 21 September 2022

放弃wsl安装wsl2

详细步骤

不过很遗憾的是wsl好像是不支持的,只支持wsl2,所以只能从MS Store里面下载新版本的wsl2,如果之前设置默认版本是wsl1的话,可以用下面的命令改回去。

1
wsl --set-default-version 2

因为 Windows11 预览版 自带Windows Subsystem for Linux Preview,所以 wsl --version 可以正常显示:

1
2
3
4
5
6
7
8
PS C:\Users\frelon> wsl -v
WSL 版本: 0.67.6.0
内核版本: 5.15.62.1
WSLg 版本: 1.0.44
MSRDC 版本: 1.2.3401
Direct3D 版本: 1.606.4
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows版本: 10.0.22622.601

如果你 wsl --version 报错,不要怕,在 MS Store下载 Windows Subsystem for Linux Preview 就可以解决这个问题。

不过还有一个问题,那就是截止到目前 2022年9月24日10点58分 MS Store的版本还是0.66.2 如下:

1
2
3
4
5
6
7
8
PS C:\Users\frelon> wsl -v
WSL 版本: 0.66.2.0
内核版本: 5.15.57.1
WSLg 版本: 1.0.42
MSRDC 版本: 1.2.3401
Direct3D 版本: 1.606.4
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows版本: 10.0.22000.1042

并不能达到 0.67.6 及更高版本 的要求。所以建议想尝鲜的可以直接去GitHub下载

WSL 发布页面

极速版

安装完那个msixbundle以后就可以开始安装wsl2了。当然我这是在有wsl1的基础上的步骤。你要是Windows11 预览版那就可以直接安装Ubuntu-22。因为它默认就是wsl2 并且 WSL 版本为 0.66.2。不是Windows11预览版就按上面的来,装Windows Subsystem for Linux Preview就可以了。

安装wsl2

直接在MS Store搜索Ubuntu就可以了,来个最新版本的哈。然后下载完成后有一个wslg的界面,大概就是配置界面,设置一下语言&密码就可以了。wslg安装界面示例如下:

image-20220924103041159

安装完成后和wsl1是差不多的。这个时候可以执行一下 pstree 看看

1
2
3
4
frelon@amdpc:~$ pstree
init─┬─init───zsh
     ├─init───zsh───pstree
     └─3*[{init}

嗯!这个是wsl1的,wsl2的我忘了整了,不过大概也是这样的,基于init启动的系统,并不是systemd。

开始设置systemd

然后来换个国内的源:

1
sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

升级systemd

1
2
sudo apt update
sudo apt upgrade systemd

编辑 /etc/wsl.conf

1
sudo nano /etc/wsl.conf

添加下面的配置到 /etc/wsl.conf 里面。

1
2
[boot]
systemd=true

然后在Windows的powershell/cmd环境里面执行:

1
wsl --shutdown

然后重新开启wsl2,可能会有一点慢。要稍等一下。然后执行: pstree 惊喜来咯!系统基于systemd启动了,而不是init。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
frelon@amdpc:~$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─2*[agetty]
        ├─cron
        ├─dbus-daemon
        ├─init─┬─init───init───bash───pstree
        │      ├─login───bash
        │      └─2*[{init}]
        ├─networkd-dispat
        ├─polkitd───2*[{polkitd}]
        ├─rsyslogd───3*[{rsyslogd}]
        ├─snapd───12*[{snapd}]
        ├─3*[snapfuse]
        ├─systemd───(sd-pam)
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-network
        ├─systemd-resolve
        ├─systemd-timedat
        ├─systemd-udevd
        ├─udisksd───4*[{udisksd}]
        └─unattended-upgr───{unattended-upgr}
Licensed under CC BY-NC-SA 4.0