根据微软的官方博客: https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl ,在最新版的 WSL2 中已经支持了 Systemd ,升级的方法如下(以 Windows 商店内的 Ubuntu 发行版为例,Windows 版本为 Windows 11 22H2 ):
更新 WSL 版本:wsl.exe --update
查看 WSL 版本:wsl.exe --version
如果第一行显示为 WSL version: 0.67.6.0 ,则已升级到支持 systemd 的版本
sudo cat > /etc/wsl.conf <<EOF
[boot]
systemd=true
EOF
退出 Linux 子系统,并关闭 WSL:wsl.exe --shutdown
重新进入 WSL ,输入 systemctl list-unit-files --type=service ,即可检验 systemd 的运行状态
1
brucmao 2022 年 9 月 22 日
升级失败
❯ wsl.exe --update 正在检查更新。 The system cannot find the file specified. Error code: Wsl/UpdatePackage/ERROR_FILE_NOT_FOUND |
2
codehz 2022 年 9 月 22 日
wsl 也要商店安装的版本,于是 win10 用不了了)
|
3
brucmao 2022 年 9 月 22 日
我用的商店里 Windows Subsystem for Linux Preview ,版本才 0.66.2.0
|
4
charlieethan OP @brucmao 没遇到过,建议直接去 https://github.com/microsoft/WSL/releases/tag/0.67.6 下载 msixbundle 安装
|
5
BeautifulSoap 2022 年 9 月 22 日
@brucmao 我也一样的问题,结果看到了: "This version of WSL is now available in the Microsoft Store to users on Windows Insiders build for initial testing" 。干,不光要 win11 ,还要装 store 版本,还必须系统是 insider 。
不过文档也说了可以从 WSL release page 安装还算好,但手动安装的话今后更新估计麻烦 |
6
Hylenbin 2022 年 9 月 22 日 via iPhone
看了,必须 win11 ,很讨厌圆角,还是坚守 win10
|
7
momocraft 2022 年 9 月 22 日
用这个可以在 wsl VM 里跑 dockerd 吗
|
8
learningman 2022 年 9 月 22 日
PS C:\Users\u> wsl --update
正在检查更新。 已安装最新版本的适用于 Linux 的 Windows 子系统。 PS C:\Users\u> wsl --version 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.978 |
9
kindjeff 2022 年 9 月 22 日
22H2 Preview 升级成功
不过我最需要 systemd 的应用 docker 已经用 podman 替代了,现在还真没有东西要用 systemd |
10
DonkeyBenjamin 2022 年 9 月 22 日
买了 systemd 作者算是值了?
不过还是不想用 win, 广告,ebpf 不支持,ssh 和 syncthing 配置方案麻烦,部份软件需要特殊配置。。。 |
11
hahastudio 2022 年 9 月 22 日
@kindjeff docker 用 systemd 么?我自己装 docker service 跑着没感觉出什么问题
|
12
kindjeff 2022 年 9 月 22 日
@hahastudio #11 不用 systemd 如何自动启动 daemon 呢
|
14
andyskaura 2022 年 9 月 22 日
wsl2 监听局域网 ip 有没有什么好点的办法
|
15
oldshensheep 2022 年 9 月 22 日
成功了,用的 ArchLinux 。
➜ ~ systemctl list-unit-files --type=service | grep docker docker.service disabled disabled |
16
Nitroethane 2022 年 9 月 22 日
@DonkeyBenjamin #10 了解下 epbf-for-windows ( https://github.com/microsoft/ebpf-for-windows ),不过我不用 windows ,没试过,不知道效果咋样
|
17
DonkeyBenjamin 2022 年 9 月 22 日
@Nitroethane 感谢指出,这个当初看过一点,但是项目还处于早期阶段,懒得自己去踩坑。目前很多基于 ebpf 的工具和项目没有提到支持 wsl2 和 ebpf for windows.
|
18
dinghmcn 2022 年 9 月 22 日
@oldshensheep #15 成功了,同用的 ArchLinux 。
|
19
hahastudio 2022 年 9 月 22 日
@kindjeff
我在 profile 里加了 service docker start |
21
onikage 2022 年 9 月 22 日
现在 ip 能固定了吗?
|
22
JadeLove 2022 年 9 月 22 日
终于支持 systemd 了,不容易啊。。
不过我碰到 wslg 打开 idea ,过段时间就假死的问题,被迫弃了 wsl2 ,另外 wsl2 的固定 ip 是不是还不支持 |
23
cco 2022 年 9 月 22 日
❯ wsl.exe --update
正在检查更新。 已安装最新版本的适用于 Linux 的 Windows 子系统。 ❯ wsl --version 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.978 |
24
kid740246048 2022 年 9 月 22 日 @onikage #21
@urzz #22 0.51.2 版本以上可以桥接网卡,配合路由器设置可以固定 ip https://github.com/microsoft/WSL/issues/4150#issuecomment-1018524753 |
26
xwcs 2022 年 9 月 22 日
更新后无法在 wsl2 中调用 windows 程序了
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.22000.978  |
27
xwcs 2022 年 9 月 22 日
|
28
xwcs 2022 年 9 月 22 日 开启这个 systemd 之后的话是无法调用 Windows 程序了,慎用
|
29
LifStge 2022 年 9 月 22 日
用的 win10 其实吧 写个脚本 win 下添加个计划任务 还不错呢...
|
30
phenixc 2022 年 9 月 22 日
@andyskaura beta 版本支持桥接了
|
32
kindjeff 2022 年 9 月 22 日 @jdz #25
没有 daemon 就是个很大的优势,装好了直接用,不用起一个后台程序;也不用管什么 root 权限、docker 用户组的事情,当前用户就能用 然后 cli 几乎完全兼容,alias docker=podman 就可以 docker-compose 有 podman-compose 这样的兼容工具 他官方吹的写 k8s pod deploy yaml 在我看来几乎没有用,最重要的滚动更新用不成,还是用 compose 顺手 |
34
zhhww57 2022 年 9 月 22 日
之前都是自己 fake 一个 systemd ,或者弄 sysvinit ,这也是我讨厌 systemd ,而喜欢 sysvinit ,openrc 之类的原因,chroot ,proot ,wsl ,docker 之类的总是 init 系统一堆问题,后来干脆自己弄了个 fake 版本的 systemd ,直接导入自己的源,安装这个替换掉原版 sstemd ,然后 systemctl 的时候带了个解析器,自动解析 service 格式的服务,然后启动
|
36
tf2 2022 年 9 月 22 日
wsl2 不是虚拟机么。之前为啥不支持?
|
37
Noicdi 2022 年 9 月 22 日
Windows 11 22H2 ,wsl --update 后的版本为 0.66.2.0 ,store 中 wsl preview 版本也是如此,够不到 0.67.6 ,看来暂时无缘了。
|
38
dingwen07 2022 年 9 月 22 日
非 Insider 用户从这里下载 Preview:
https://github.com/microsoft/WSL/releases |
39
0attocs 2022 年 9 月 23 日
@lambdaq #28 为了更方便地处理 wsl 的特殊需求吧。wsl2 是一个运行 linux distro container 的 host vm ,本来用的是微软自己的(多个) init binary 。除了 pid 1 的 init 之外,其他的 init 用来管理 linux distro containers ,跑 9p server ,处理 linux 和 windows binary 的互操作之类的。
|
42
jelipo 2022 年 9 月 23 日
@DonkeyBenjamin #10 请问一下为什么不支持 ebpf ,不是完全虚拟化的 Linux 吗
|
45
xwcs 2022 年 9 月 23 日
|
46
xwcs 2022 年 9 月 23 日
|
47
2NUT 2022 年 9 月 23 日
wsl2 也是虚拟机,为啥不直接用虚拟机,徒增烦恼
wsl2 对微软最有用,对个人开发者用处不大 |
48
0attocs 2022 年 9 月 23 日
@Dragonphy #31 他发的那个 issue 里描述的是重启 WSL2 后打开第一个 linux distro 时可以互操作,打开第二个后就不行了。
https://github.com/microsoft/WSL/issues/8843#issuecomment-1254778464 |
49
0attocs 2022 年 9 月 23 日 @2NUT #37 WSL2 能和宿主 Windows 互操作,能直接调用互相的 binary ,由此能衍生不少花样,对特定人群有不可替代性。
例如,WSL2 支持 GPU 穿透并和宿主 Windows**共用一张不支持虚拟化的 GPU**,比如 GeForce 系列 GPU 。此时 WSL2 直接使用宿主 Windows 的 GPU 驱动,调用直接转发到宿主 GPU ,除了很小的转发 overhead 之外,没有性能损失(不过首发时 GPU 带宽好像默认是 PCIEx8 而非 x16 )。而其他 VM 即使支持 GPU 穿透,据我所知在不支持 vGPU 显卡上需要独占该显卡。 |
53
yukunZhan9 2022 年 9 月 24 日
>wsl --update
正在检查更新... 正在下载更新... 请求的操作需要提升。 --- 这是什么原因?有大佬知道吗 |
54
yukunZhan9 2022 年 9 月 24 日
@yukunZhan9 需要使用商店安装的 WSL ,已解决.
|
55
chronos 2022 年 9 月 25 日
@xwcs https://github.com/microsoft/WSL/issues/8843#issuecomment-1255546484 这里提到的 WSLInterop.conf 文件放到 /usr/lib/binfmt.d 目录下,再重启一下 wsl 应该就可以正常使用了。
|
56
fgwmlhdkkkw 2022 年 9 月 29 日
@Dragonphy #40 这个是什么主题呀
|
57
Dragonphy 2022 年 9 月 29 日
@fgwmlhdkkkw #56
见 51 楼 |
58
brucmao 2022 年 10 月 15 日
今天突然可以更新了
``` ❯ wsl.exe --update 正在检查更新。 正在更新适用于 Linux 的 Windows 子系统。. ~ [⏱ 8s] ❯ wsl --version WSL 版本:0.70.0.0 内核版本:5.15.68.1 WSLg 版本:1.0.45 MSRDC 版本:1.2.3575 Direct3D 版本:1.606.4 DXCore 版本:10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows 版本:10.0.22000.1098 ``` |