systemd :systemd

更新时间:2024-09-21 00:24

systemd即为system daemon,是Linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布,开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。systemd采用了Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;用Cgroups代替PID来追踪进程,以此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。

软件简介

systemd这一名字源于unix中的一个惯例:在Unix中常以“d”作为系统守护进程(英语:daemon,亦称后台进程)的后缀标识。除此以外,systemd亦是借代英文术语D体系,而这一术语即是用于描述一个人具有快速地适应环境并解决困难的能力。

与多数发行版使用的System V风格init相比,systemd采用了以下新技术:

从设计构思上说,由于systemd使用了cgroup与fanotify等组件以实现其特性,所以只适用于Linux。有鉴于此,考虑到kFreeBSD分支的软件源无法纳入systemd,为与其他分支保持一致,Debian开发者尽力避免纳入systemd。但Lennart Poettering本人对此并不在意,并称“Debian GNU/kFreeBSD不过是玩具系统”。注意:debian8开始支持systemd作为默认init。

systemd已纳入众多Linux发行版的软件源中,以下简表:

除此以外,systemd已由Lennart Poettering提请纳入GNOME3.2的外部依赖关系列表,而这意味着所有使用GNOME的发行版都应该使用systemd,最低限度来说也必须将其作为配置选项之一。

自2015年以来,大多数Linux发行版已经采用了systemd,取代了其他init系统,如SysV init。systemd受到采用的发行版的开发人员和用户的赞扬,因为它为Linux领域多年存在的问题提供了稳定、快速的开箱即用解决方案。systemd的批评者认为它存在使命膨胀和膨胀的问题;后者影响了其他软件(如GNOME桌面),增加了对systemd的依赖性,降低了它与其他类Unix操作系统的兼容性,并使系统管理员难以集成替代解决方案。人们也对Red Hat及其母公司IBM控制Linux上的init系统一事表示担忧。批评者还认为systemd的复杂性导致了更大的攻击面,降低了平台的整体安全性。

systemd的配置完全是通过纯文本文件进行的,其中每个守护进程的初始化指令记录在一个称为“单元文件”的配置文件中,使用了一种声明性语言,取代了传统的每个守护进程启动shell脚本。单元文件类型包括.service、.socket、.device、.mount、.automount、.swap、.target、.path、.timer、.snapshot、.slice和.scope等。

systemd不仅是init守护进程的名称,还指的是围绕它的整个软件包,包括了journald、logind和networkd等守护进程,以及许多其他低级组件。systemd并行执行其启动序列的元素,理论上比传统的启动序列方法更快。对于进程间通信(IPC),systemd使Unix域套接字和D-Bus对运行的守护进程可用。systemd的状态也可以保存在快照中以供将来调用。

systemd的设计引发了自由软件社区内的争议。批评者认为systemd过于复杂,不断出现功能膨胀,认为其架构违反了Unix哲学。人们还担心它形成了一套相互依赖的系统,因此发行版维护者几乎没有选择,只能采用systemd,因为越来越多的用户空间软件依赖于其组件,这与另一个由Lennart Poettering开发的项目PulseAudio创建的问题类似。

在2012年的一次采访中,Slackware的领导Patrick Volkerding对systemd的架构表示了保留意见,他认为其设计违反了Unix哲学,即由相互连接的实用程序组成,具有狭义的功能。截至2018年8月,Slackware不支持或使用systemd,但Volkerding并没有排除切换到它的可能性。

2013年1月,Lennart Poettering在一篇名为“最大的谣言”的博客文章中试图解决有关systemd的担忧。2014年2月,musl的Rich Felker认为PID 1太特殊,不应负担额外的责任,他认为PID 1只应负责启动其余的init系统和清理僵尸进程,systemd增加的额外功能可以在其他地方提供。

发展历程

Lennart Poettering 和 Kay Sievers 是当时为 Red Hat 工作的软件工程师,他们最初开发了 systemd,他们在 2010 年启动了一个项目来取代 Linux 的传统 System V init。 2010 年 4 月,Poettering 发表了一篇题为“重新思考 PID 1”的博客文章,介绍了后来成为 systemd 的实验版本。他们试图在几个方面超越init守护进程的效率。他们希望改进用于表达依赖关系的软件框架,允许在系统启动期间并发或并行完成更多处理,并减少 壳层 的计算开销。

2011 年 5 月,Fedora Linux 取代了 Upstart,成为第一个默认启用 systemd 的主要 Linux 发行版。当时的理由是,systemd 在启动过程中提供了广泛的并行化、更好的流程管理以及总体上更健全的、基于依赖关系的系统控制方法。

2012 年 10 月,Arch Linux 将 systemd 设为默认值,从 SysVinit 切换而来。自2012年8月以来,开发人员一直在争论,并得出结论,它比SysVinit更快,功能更多,并且维护后者不值得在补丁中付出努力。他们中的一些人认为,对 systemd 实现的批评不是基于软件的实际缺点,而是 Linux 社区的一部分对 Lennart 的厌恶和对变革的普遍犹豫。具体来说,一些关于 systemd 没有用 bash 编程、它比 SysVinit 更大、更广泛、使用 D-bus 以及日志的可选磁盘格式的抱怨被程序员视为优势。

在2013年10月到2014年2月之间,Debian 技术委员会在 Debian 邮件列表上进行了长时间的辩论,讨论了在 Debian 8 中使用哪个 init 系统作为默认系统,并最终决定支持 systemd。这场辩论被广泛宣传,在做出决定之后,这场辩论在 Debian 邮件列表上继续进行。2014 年 2 月,在 Debian 做出决定后,Mark Shuttleworth 在他的博客上宣布,Ubuntu 将效仿 systemd,放弃自己的 Upstart。

2014 年 11 月,Debian 开发者 Joey Hess、Debian 技术委员会成员 Russ Allbery和 Ian Jackson 以及 systemd 软件包维护者 Tollef Fog Heen辞职。这四个人都在公开的 Debian 邮件列表和个人博客上证明了他们的决定是合理的,因为他们暴露在 Debian 和 FOSS 社区内正在进行的 systemd 集成争议中,这使得定期维护几乎是不可能的。

2015 年 8 月,systemd 开始提供登录 shell,可通过 machinectl shell 调用。

2016 年 9 月,发现了一个安全漏洞,该漏洞允许任何非特权用户对 systemd 执行拒绝服务攻击。musl的开发者Rich Felker表示,这个bug揭示了一个重大的“系统开发设计缺陷”。2017 年,在 systemd 中发现了另一个安全漏洞 CVE-2017-9445,该漏洞“允许恶意 DNS 服务器”中断服务“。 2017年晚些时候,Pwnie Awards授予作者Lennart Poettering“最蹩脚的供应商响应”奖,以表彰他对漏洞的处理。

参考资料

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: