2

WSL 2 上启用微软官方支持的 systemd - wswind

 1 year ago
source link: https://www.cnblogs.com/wswind/p/wsl2-official-systemd.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

以前折腾了很久的 genie 和 distrod 来实现 wsl2 上的 systemd。现在微软和Canonical联合声明发布了官方支持的systemd,之前的折腾貌似有点浪费时间了。如果微软不发布这个systemd的解决方案,本文的主题可能就是去对比 geniedistrod 了。

在安装体验后,个人感觉官方支持的systemd确实比上述两个开源项目体验更佳。很值得有需要在wsl环境中运行docker、nginx、mysql等后台服务的小伙伴来尝鲜。

本文首先会用两个小节去比较genie和distrod,对他们不感兴趣的小伙伴,可以直接跳到第三节。

和genie的对比#

genie的使用通过genie -s进入运行着systemd的bottle环境,通过genie -u退出,此处需要手动处理或额外配置~/.bashrc。但通过wsl直接运行的shell命令默认又不是位于systemd的bottle之中,这为vscode使用带来了一些问题,需要额外处理: 1. code命令找不到2. vscode server 未运行在bottle中

此外genie首次运行时,会需要等待240秒并显示出无法启动的service,用户需要手动禁用这些有问题的service,才能再下次运行时正常使用。试图通过配置缩短等待时间,发现只是徒劳

总体而言genie的使用还是较为复杂的,使用前需要完整阅读wiki。相比之下官方支持的systemd的使用更为简单。通过简单配置后,是开箱即用,用户无感的。这一点genie无法媲美。

和distrod的对比#

distrod直接修改了你的默认shell,运行时也是开箱即用。distrod基于ruby编写运行性能很好,运行也很稳定。
它还支持基于lxc社区镜像安装多个发行版,且都经过了测试,如:centos / alma / arch / fedora / debian / ubuntu 等等。

而官方支持的systemd还是有一点时优于distrod的,那就是启用了官方systemd的wsl2实例,在用户停止操作后,会自动关闭,和未启用systemd 时的特性一样,这有利于节约电脑的计算资源。

如何安装和使用微软官方支持的 systemd#

启用最新的wsl systemd特性前,可先阅读微软和Canonical提供的文档:
https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/
https://ubuntu.com/blog/ubuntu-wsl-enable-systemd
https://devblogs.microsoft.com/commandline/a-preview-of-wsl-in-the-microsoft-store-is-now-available

如果需要使用微软官方支持的systmed,在目前来说你需要满足这些前置条件:

  1. 操作系统为windows 11
  2. wsl 版本为 0.67.6 或以上。

查看wsl版本号命令为: wsl --version,如果此命令未正常回显版本号,或版本号低于0.67.6,那么你安装的wsl还不支持systemd。

截至2022/9/30,wsl 0.67.6及以上版本还是预览版本,
如果你是Windows Insiders用户,那么可以通过 https://aka.ms/wslstorepage 链接跳转到微软应用商店来安装最新版本的 wsl preview。
如果你未加入Windows Insiders计划,那么可以通过 https://github.com/microsoft/WSL/releases 下载最新的preview版本(0.68.2)来进行体验。

安装后,可以通过以下命令进行更新: wsl.exe --update --web-download。此命令是在0.67.6版本中新增的。

安装好新版wsl后,通过以下命令来配置wsl启用 systemd:

echo -e "[boot]\nsystemd=true" | sudo tee -a /etc/wsl.conf

配置后需要通过wsl --shutdown命令关闭wsl,来进行wsl的完整重启。

如何判断systemd是否启用成功#

判断wsl是否已启用systemd,可通过以下命令查看:

ps --no-headers -o comm 1

如果命令返回的是init说明systemd未启用,如果是systemd那么你的systemd已启用成功了。

查看已启用的systemd service#

通过systemctl的list-units、list-unit-files命令,都可以很好的查看目前的systemd状态,命令如下:

systemctl list-units --type=service
systemctl list-unit-files --type=service --state=enabled

结束语#

首先希望这篇文章能够帮助到你体验到最新版本的wsl-systemd特性,如果有任何问题欢迎你留言。

此外还想插两句题外话:
在微软生态下开发开源项目其实是很被动的,因为你不知道什么时候会被官方降维打击。 为genie和distrod而感到惋惜。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK