WSL2+Systemd支持度测试

2023-05-16

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

文章目录

  • 前言
  • 一、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.

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

# 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那样,功能上肯定还会有些限制。不过不影响我们使用绝大多数功能,特别是对于开发人员还是很方便的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WSL2+Systemd支持度测试 的相关文章

随机推荐

  • docker gitlib 搭建

    docker gitlib 搭建 1 docker 命令构建 sudo docker run v etc localtime etc timezone rw v etc localtime etc localtime rw d p 8443
  • net core Ocelot 网关 初使用(1)

    新建 net core webapi 项目 安装 nuget 包 96 96 96 Install Package Ocelot 96 96 96 配置 添加一个Ocelot json的文件用来添加Ocelot的配置 转发 http loc
  • net core Ocelot 网关 初使用(2)- 搭配 consul 服务使用 Ocelot

    搭配 consul 服务使用 Ocelot xff0c 自动路由配置 新建webapi 项目 xff0c 安装 nuget 包 install package Ocelot install package Ocelot Provider C
  • spring boot web开发(1)构建项目

    spring boot web开发 xff08 1 xff09 构建项目 1 构建项目 去 https start spring io 下载基础项目在pom xml 添加 web 依赖 lt dependency gt lt groupId
  • SpringBoot web开发(2)session登录注册

    SpringBoot web开发 xff08 2 xff09 session登录注册 新建 LoginController java 文件使用 session 控制登录 64 Autowired HttpSession session 添加
  • SpringBoot web开发 (3) 使用 mysql-jpa 登录验证

    3 使用 mysql jpa 构造 数据库实体类型 添加maven依赖 lt dependency gt lt groupId gt org springframework boot lt groupId gt lt artifactId
  • JAVA+Netty根据二级域名实现多租户内网穿透功能【设计实践】

    目录 背景 实践 项目结构 原理分析 代码实现 cc common项目 cc server项目 cc client项目 Nginx配置 使用 启动服务端 启动客户端 背景 上一篇JAVA基于Netty实现内网穿透功能 设计实践 殷长庆的博客
  • C++:stringstream格式化字符串

    C语言通过snprintf对字符串进行格式化 格式化前需要首先对字符串的长度预估 如果长度大于了字符数组的大小 格式化字符串会被截断 C 通过stringstream对字符串进行格式化 include lt sstream gt inclu
  • Ubuntu:apt软件包管理工具

    apt是Advanced Packaging Tool 是Ubuntu的安装包管理工具 主要的几个操作为 1 安装软件包 sudo apt install 软件包名 2 卸载软件包 而保留软件的配置文件 sudo apt remove 软件
  • CMake:message输出消息

    可以在执行cmkae的时候使用message输出信息 xff1a message lt mode gt 34 message text 34 其中mode有如下几个选项 xff08 优先级由低到高 xff09 xff1a TRACE xff
  • C++(11):通过underlying_type获取/输出枚举类的值

    C 11 枚举类 风静如云的博客 CSDN博客 c 11 枚举类 介绍了枚举类使用的好处 不过如果直接输出枚举类的值是不行的 include lt iostream gt using namespace std int main enum
  • gitlab-ce安装

    GitLab是一个利用 Ruby on Rails 开发的开源应用程序 xff0c 实现一个自托管的Git项目仓库 xff0c 可通过Web界面进行访问公开的或者私人项目 GitLab拥有与Github类似的功能 xff0c 能够浏览源代码
  • WSL2安装到其它目录下

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 WSL2是什么 xff1f 二 下载Ubuntu20 041 打开Mocrosoft Store2 导出发行版 总结 前
  • 解决Ubuntu20.04安装CUDA-11.2报256错误的问题

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 报错的原因是什么 xff1f 二 安装cuda 11 2三 安装nvidia driver 455四 再装cuda 11
  • ARM整形算力计算

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 RK3399规格 xff1f 二 开始计算1 参考2 计算 总结 前言 之前做人工智能使用RK3399的CPU去推理 x
  • WSL2使用USB设备

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 WSL2是什么 xff1f 二 编译内核1 查看自己的内核2 准备工作3 下载适合自己的内核版本4 开始编译4 使用内核
  • cron的正确食用方法

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 cron是什么 xff1f 二 使用步骤1 字段含义2 加强学习3 crontab命令4 工作原理5 其它用法6 补充内
  • windows 下 mongodb 导入导出collection(json、csv)

    1 下载mongodb xff0c 并安装 https www mongodb com dr fastdl mongodb org win32 mongodb win32 x86 64 2008plus ssl 3 4 0 signed m
  • 【WSL2启用systemd支持(一个配置即可)】

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 systemd是什么 xff1f 二 备份数据1 归档2 备份分支 三 准备工作1 内核升级 四 修改配置总结 前言 很
  • WSL2+Systemd支持度测试

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 systemd是什么 xff1f 二 开始测试1 Docker2 rsyslog3 systemd timesyncd4