WSL2+Systemd支持度测试

79 篇文章 1 订阅

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近在研究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.

守护进程正常,端口绑定正常,不过外部登不进去。原因在配置文件里面:

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes

看到了吧PasswordAuthentication no,其实wsl不用这种登陆方式,这个功能很鸡肋。不过ssh client正常使用,大家不用担心。

7.NetworkManager

服务正常,不过在wsl里没啥用。

剩下的不一一列举了,有需要的可以安装试试。


总结

由于wsl的特殊性,注定不可能向原生linux那样,功能上肯定还会有些限制。不过不影响我们使用绝大多数功能,特别是对于开发人员还是很方便的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值