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