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