提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、systemd是什么?
- 二、开始测试
- 1.Docker
- 2.rsyslog
- 3.systemd-timesyncd
- 4.cron
- 5.snap
- 6.ssh
- 7.NetworkManager
- 总结
前言
最近在研究WSL2开启systemd支持后对于一些组件的支持度,我选了常用的几个和系统自带的几个用来测试。WSL2如何开启systemd支持在我的另一篇博客里。
WSL2打开systemd支持
一、systemd是什么?
systemd即为system daemon,是linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替常用的System V与BSD风格init程序。
与多数发行版使用的System V风格init相比,systemd采用了以下新技术: (1) 采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能; (2) 用Cgroups代替PID来追踪进程,因此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
二、开始测试
1.Docker
Docker是很常用的容器了,对于很多人你来说几乎是必不可少的组件。我安装的是docker-ce,安装方式这里就不列出来了,大家可以自行百度。我使用的版本如下,其它版本暂时没有测试。
Docker version 20.10.20, build 9fdeb9c
systemctl查看docker状态如下:
anold@DESKTOP-G21E46A:~$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-10-25 09:59:27 CST; 5min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 444 (dockerd)
Tasks: 17
Memory: 98.0M
CGroup: /system.slice/docker.service
└─444 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Oct 25 09:59:27 DESKTOP-G21E46A dockerd[444]: time="2022-10-25T09:59:27.524348100+08:00" level=warning msg="Your kernel does not support cgroup blkio throttle.write_bps_device"
Oct 25 09:59:27 DESKTOP-G21E46A dockerd[444]: time="2022-10-25T09:59:27.524351100+08:00" level=warning msg="Your kernel does not support cgroup blkio throttle.read_iops_device"
Oct 25 09:59:27 DESKTOP-G21E46A dockerd[444]: time="2022-10-25T09:59:27.524354700+08:00" level=warning msg="Your kernel does not support cgroup blkio throttle.write_iops_device"
Oct 25 09:59:27 DESKTOP-G21E46A dockerd[444]: time="2022-10-25T09:59:27.525156700+08:00" level=info msg="Loading containers: start."
Oct 25 09:59:27 DESKTOP-G21E46A dockerd[444]: time="2022-10-25T09:59:27.609687100+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used >
Oct 25 09:59:27 DESKTOP-G21E46A dockerd[444]: time="2022-10-25T09:59:27.640534000+08:00" level=info msg="Loading containers: done."
Oct 25 09:59:27 DESKTOP-G21E46A dockerd[444]: time="2022-10-25T09:59:27.680304200+08:00" level=info msg="Docker daemon" commit=03df974 graphdriver(s)=overlay2 version=20.10.20
Oct 25 09:59:27 DESKTOP-G21E46A dockerd[444]: time="2022-10-25T09:59:27.680597600+08:00" level=info msg="Daemon has completed initialization"
Oct 25 09:59:27 DESKTOP-G21E46A systemd[1]: Started Docker Application Container Engine.
Oct 25 09:59:27 DESKTOP-G21E46A dockerd[444]: time="2022-10-25T09:59:27.699345300+08:00" level=info msg="API listen on /run/docker.sock"
运行hello-world测试:
sudo docker run hello-world
结果可以正常下载和运行
2.rsyslog
anold@DESKTOP-G21E46A:~$ systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-10-25 09:59:26 CST; 8min ago
TriggeredBy: ● syslog.socket
Docs: man:rsyslogd(8)
https://www.rsyslog.com/doc/
Main PID: 300 (rsyslogd)
Tasks: 4 (limit: 9401)
Memory: 2.6M
CGroup: /system.slice/rsyslog.service
└─300 /usr/sbin/rsyslogd -n -iNONE
Oct 25 09:59:26 DESKTOP-G21E46A systemd[1]: Starting System Logging Service...
Oct 25 09:59:26 DESKTOP-G21E46A rsyslogd[300]: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from systemd. [v8.2001.0]
Oct 25 09:59:26 DESKTOP-G21E46A systemd[1]: Started System Logging Service.
Oct 25 09:59:26 DESKTOP-G21E46A rsyslogd[300]: rsyslogd's groupid changed to 110
Oct 25 09:59:26 DESKTOP-G21E46A rsyslogd[300]: rsyslogd's userid changed to 104
Oct 25 09:59:26 DESKTOP-G21E46A rsyslogd[300]: [origin software="rsyslogd" swVersion="8.2001.0" x-pid="300" x-info="https://www.rsyslog.com"] start
去/var/log目录看一下:
不是systemd启动的wsl是没有syslog和auth.log等一众日志的,大家可以前后对比下。目前来看rsyslog服务运行应该是没有问题的。
3.systemd-timesyncd
anold@DESKTOP-G21E46A:/var/log$ systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Condition: start condition failed at Tue 2022-10-25 10:26:40 CST; 2min 23s ago
└─ ConditionVirtualization=!container was not met
Docs: man:systemd-timesyncd.service(8)
Oct 25 10:26:40 DESKTOP-G21E46A systemd[1]: Condition check resulted in Network Time Synchronization being skipped.
注意:
第一个出问题的服务来了,这个服务是时间同步,默认是从Ubuntu的NTP服务器同步时间的。看看报错:
ConditionVirtualization=!container was not met
意思是不能在容器里启动,之前在wsl里面编译一些东西也提示过说我是容器,不是实体机器,当时没有找到解决办法。不过这个时间同步的问题大家不用担心,wsl始终和计算机一个时间,应该是获取了rtc时间,我还没有遇到时间走偏的情况。
4.cron
anold@DESKTOP-G21E46A:/var/log$ systemctl status cron
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-10-25 10:26:40 CST; 9min ago
Docs: man:cron(8)
Main PID: 395 (cron)
Tasks: 1 (limit: 9401)
Memory: 592.0K
CGroup: /system.slice/cron.service
└─395 /usr/sbin/cron -f
Oct 25 10:26:40 DESKTOP-G21E46A systemd[1]: Started Regular background program processing daemon.
Oct 25 10:26:40 DESKTOP-G21E46A cron[395]: (CRON) INFO (pidfile fd = 3)
Oct 25 10:26:40 DESKTOP-G21E46A cron[395]: (CRON) INFO (Running @reboot jobs)
Oct 25 10:35:01 DESKTOP-G21E46A CRON[1027]: pam_unix(cron:session): session opened for user root by (uid=0)
Oct 25 10:35:01 DESKTOP-G21E46A CRON[1028]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 25 10:35:01 DESKTOP-G21E46A CRON[1027]: pam_unix(cron:session): session closed for user root
正常使用,syslog里看到调用了,不过这个组件在wsl里面用处可能没那么大。
5.snap
anold@DESKTOP-G21E46A:/var/log$ snap list
Interacting with snapd is not yet supported on Windows Subsystem for Linux.
This command has been left available for documentation purposes only.
这种方式暂时不支持,有时间研究下。
snapd守护进程是在后台运行的,snap的命令不能用,一方面snap不太好用,绝大多数人用不到就不深入研究了。
6.ssh
anold@DESKTOP-G21E46A:/var/log$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-10-25 10:26:40 CST; 19min ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 399 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 419 (sshd)
Tasks: 1 (limit: 9401)
Memory: 3.2M
CGroup: /system.slice/ssh.service
└─419 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Oct 25 10:26:40 DESKTOP-G21E46A systemd[1]: Starting OpenBSD Secure Shell server...
Oct 25 10:26:40 DESKTOP-G21E46A sshd[419]: Server listening on 0.0.0.0 port 22.
Oct 25 10:26:40 DESKTOP-G21E46A sshd[419]: Server listening on :: port 22.
Oct 25 10:26:40 DESKTOP-G21E46A systemd[1]: Started OpenBSD Secure Shell server.
守护进程正常,端口绑定正常,不过外部登不进去。原因在配置文件里面:
PasswordAuthentication no
ChallengeResponseAuthentication no
看到了吧PasswordAuthentication no,其实wsl不用这种登陆方式,这个功能很鸡肋。不过ssh client正常使用,大家不用担心。
7.NetworkManager
服务正常,不过在wsl里没啥用。
剩下的不一一列举了,有需要的可以安装试试。
总结
由于wsl的特殊性,注定不可能向原生linux那样,功能上肯定还会有些限制。不过不影响我们使用绝大多数功能,特别是对于开发人员还是很方便的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)