根据微软的官方博客: 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 的版本

设置 systemd 开机自启(在 Linux 内执行以下命令):

sudo cat > /etc/wsl.conf <<EOF
[boot]
systemd=true
EOF

退出 Linux 子系统,并关闭 WSL:wsl.exe --shutdown

重新进入 WSL ,输入 systemctl list-unit-files --type=service ,即可检验 systemd 的运行状态

升级失败
❯ wsl.exe --update
正在检查更新。
The system cannot find the file specified.
Error code: Wsl/UpdatePackage/ERROR_FILE_NOT_FOUND

wsl 也要商店安装的版本,于是 win10 用不了了)

我用的商店里 Windows Subsystem for Linux Preview ,版本才 0.66.2.0

没遇到过,建议直接去 github.com/microsoft/WSL/releases/tag/0.67.6 下载 msixbundle 安装

我也一样的问题,结果看到了: "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 安装还算好,但手动安装的话今后更新估计麻烦

看了,必须 win11 ,很讨厌圆角,还是坚守 win10

用这个可以在 wsl VM 里跑 dockerd 吗

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

22H2 Preview 升级成功

不过我最需要 systemd 的应用 docker 已经用 podman 替代了,现在还真没有东西要用 systemd

买了 systemd 作者算是值了?
不过还是不想用 win, 广告,ebpf 不支持,ssh 和 syncthing 配置方案麻烦,部份软件需要特殊配置。。。

docker 用 systemd 么?我自己装 docker service 跑着没感觉出什么问题

#11 不用 systemd 如何自动启动 daemon 呢

可以用 systemd + Podman

wsl2 监听局域网 ip 有没有什么好点的办法

成功了,用的 ArchLinux 。

➜ ~ systemctl list-unit-files --type=service | grep docker
docker.service disabled disabled

#10 了解下 epbf-for-windows ( github.com/microsoft/ebpf-for-windows ),不过我不用 windows ,没试过,不知道效果咋样

感谢指出,这个当初看过一点,但是项目还处于早期阶段,懒得自己去踩坑。目前很多基于 ebpf 的工具和项目没有提到支持 wsl2 和 ebpf for windows.

#15 成功了,同用的 ArchLinux 。

我在 profile 里加了 service docker start

nohup dockerd &

现在 ip 能固定了吗?

终于支持 systemd 了,不容易啊。。
不过我碰到 wslg 打开 idea ,过段时间就假死的问题,被迫弃了 wsl2 ,另外 wsl2 的固定 ip 是不是还不支持

❯ 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

#21
#22
0.51.2 版本以上可以桥接网卡,配合路由器设置可以固定 ip
github.com/microsoft/WSL/issues/4150#issuecomment-1018524753

podman 比 docker 有哪些优势么用起来

更新后无法在 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

github.com/microsoft/WSL/issues/8843

开启这个 systemd 之后的话是无法调用 Windows 程序了,慎用

用的 win10 其实吧 写个脚本 win 下添加个计划任务 还不错呢...

beta 版本支持桥接了

beta 版本支持桥接了

#25
没有 daemon 就是个很大的优势,装好了直接用,不用起一个后台程序;也不用管什么 root 权限、docker 用户组的事情,当前用户就能用

然后 cli 几乎完全兼容,alias docker=podman 就可以

docker-compose 有 podman-compose 这样的兼容工具

他官方吹的写 k8s pod deploy yaml 在我看来几乎没有用,最重要的滚动更新用不成,还是用 compose 顺手

没有 daemon 还有一个优势就是,容器进程就是 podman 命令的子进程,很容易监控容器的存活状态

之前都是自己 fake 一个 systemd ,或者弄 sysvinit ,这也是我讨厌 systemd ,而喜欢 sysvinit ,openrc 之类的原因,chroot ,proot ,wsl ,docker 之类的总是 init 系统一堆问题,后来干脆自己弄了个 fake 版本的 systemd ,直接导入自己的源,安装这个替换掉原版 sstemd ,然后 systemctl 的时候带了个解析器,自动解析 service 格式的服务,然后启动

vscode 可以远程么。类似远程 docker container

wsl2 不是虚拟机么。之前为啥不支持?

Windows 11 22H2 ,wsl --update 后的版本为 0.66.2.0 ,store 中 wsl preview 版本也是如此,够不到 0.67.6 ,看来暂时无缘了。

非 Insider 用户从这里下载 Preview:
github.com/microsoft/WSL/releases

#28 为了更方便地处理 wsl 的特殊需求吧。wsl2 是一个运行 linux distro container 的 host vm ,本来用的是微软自己的(多个) init binary 。除了 pid 1 的 init 之外,其他的 init 用来管理 linux distro containers ,跑 9p server ,处理 linux 和 windows binary 的互操作之类的。

#28 可以调用 Windows 程序

这我就真没试过了,不太用 vscode

#10 请问一下为什么不支持 ebpf ,不是完全虚拟化的 Linux 吗

系统是什么?是在 Windows store 安装的吗?我是安装的 archwsl ,开启之后就没法调用 Windows 程序了

#43

我在公司电脑上试了下也是可以,看来跟这个问题有点关系
github.com/microsoft/WSL/issues/8855

wsl2 也是虚拟机,为啥不直接用虚拟机,徒增烦恼

wsl2 对微软最有用,对个人开发者用处不大

#31 他发的那个 issue 里描述的是重启 WSL2 后打开第一个 linux distro 时可以互操作,打开第二个后就不行了。

github.com/microsoft/WSL/issues/8843#issuecomment-1254778464

#37 WSL2 能和宿主 Windows 互操作,能直接调用互相的 binary ,由此能衍生不少花样,对特定人群有不可替代性。

例如,WSL2 支持 GPU 穿透并和宿主 Windows共用一张不支持虚拟化的 GPU,比如 GeForce 系列 GPU 。此时 WSL2 直接使用宿主 Windows 的 GPU 驱动,调用直接转发到宿主 GPU ,除了很小的转发 overhead 之外,没有性能损失(不过首发时 GPU 带宽好像默认是 PCIEx8 而非 x16 )。而其他 VM 即使支持 GPU 穿透,据我所知在不支持 vGPU 显卡上需要独占该显卡。

大佬 求主题。。

#50
ohmyfish 的 eden 主题,Windows Terminal 用的是 one half dark

#51 light

wsl --update
正在检查更新...
正在下载更新...
请求的操作需要提升。

这是什么原因?有大佬知道吗

需要使用商店安装的 WSL ,已解决.