有绿色文本的Linux终端在膝上型计算机。

systemd已有10年的历史了,但是在Linux社区中对此却没有丝毫的感觉,它现在和以往一样存在分歧。尽管许多主要的Linux发行版都在使用它,但坚决反对。

Linux引导顺序

开启计算机电源时,硬件将引导,然后(根据计算机使用的引导扇区的类型)执行主引导记录(MBR)或运行统一可扩展固件接口(UEFI)。这两个的最后一个动作是启动Linux内核。

内核被加载到内存中,对其自身进行解压缩并进行初始化。通常通过名为或的实用程序在RAM中创建一个临时文件系统。这样可以确定并加载所需的驱动程序。反过来,这允许用户空间文件系统加载并准备建立用户空间环境。initramfsinitrd

用户空间环境的创建由init进程处理,该进程是内核在用户空间中启动的第一个进程。它的  进程ID(PID)为1。所有其他进程是init进程的直接或间接子级。

以前systemd,init过程的主流默认设置是Unix System V init的重新设计。还有其他选择,但是System V init是大多数非Berkeley软件发行版(BSD)衍生发行版的标准选项。因为它直接来自Linux的祖先System V Unix,所以许多人将其视为进行初始化的“官方方式”。

初始化过程启动使操作系统以有意义的交互方式工作所需的所有守护程序和服务。这些守护程序处理诸如网络堆栈,在计算机内部启用其他硬件以及提供启动屏幕之类的事情。

这些后台进程中有许多在启动后仍继续运行。它们执行诸如记录事件信息,在插入或移除设备时监视硬件更改以及管理用户登录之类的操作。毫不奇怪,init系统还包括管理服务的功能。

我们可以ps用来查看具有PID 1的过程。我们将使用  f(完整格式列表)和p(PID)选项:

ps -fp 1
ps -fp 1在终端窗口中。

我们看到PID 1的过程是systemd。在Manjaro Linux上运行相同的命令会产生不同的结果。PID 1的过程被标识为  /sbin/init。快速浏览该文件将显示它是指向以下文件的符号链接systemd

ps -fp 1
ls -hl /sbin/init
ps -fp 1在终端窗口中。

通过将ppid(父进程ID)选项与一起使用ps,我们可以看到哪些进程是由systemd以下人员直接启动的:

ps -f --ppid 1
ps -f --ppid 1在终端窗口中。

清单很长,如下图所示。

ps -f --ppid 1在终端窗口中。

替代方案

一些项目试图产生一种替代传统System V init的方法。主要问题之一是,使用System V初始化时,所有进程都一个接一个地顺序启动。为了提高启动顺序的效率,许多替代项目都使用并行机制来并行和异步地启动进程。

以下是其中一些信息:

  • Upstart  由 Canonical开发,已在Ubuntu 9.10, Red Hat,  Red Hat Enterprise Linux(RHEL)6, CentOS 6和 Fedora 9中使用。
  • Runit: 在 FreeBSD和其他BSD衍生产品,macOS和  Solaris以及Linux系统上运行。它也是 Void Linux上的默认初始化系统。
  • s6-linux-init:  替代System V init的目的是紧密遵循 Unix哲学,该哲学通常被简化为“做一件事情,做好一件事情”。

还有许多其他功能和设计不同的产品。然而,他们都没有创造出愤怒 systemd  。

系统的方式

systemd该版本于2010年发布,并于2011年在Fedora中使用。此后,它被许多发行版所采用。它是由RedHat的两位软件工程师Lennart Poettering和Kay Sievers开发的。

systemd不仅仅是初始化替换。相反,它是由大约70个二进制文件组成的套件,用于处理系统初始化,守护程序和服务,日志记录和日志记录以及Linux中专用模块已经处理的许多其他功能。其中大部分与系统初始化无关。

提供的某些守护程序systemd是:

  • systemd-udevd:管理物理设备。
  • systemd-logind:管理用户登录。
  • systemd-resolved:为本地应用程序提供网络名称解析。
  • systemd-networkd:管理和检测网络设备,以及管理网络配置。
  • systemd-tmpfiles:创建,删除和清除易失性和临时文件和目录。
  • systemd-localed:管理系统区域设置。
  • systemd-machined:检测和监视虚拟机和容器。
  • systemd-nspawn:可以在轻量名称空间容器中启动命令或其他进程,提供类似于chroot的功能。

那只是冰山一角,这也是问题的症结所在。systemd长期以来,它已经超出了初始化系统的要求,据反对者称,它是范围蠕变的确切定义。

“这个太大了。太多了。”

反对者systemd指出了它所包含的功能的奇妙组合。所有这些功能已经在Linux中存在,也许其中一些功能需要更新或采用新方法。但是,将所有这些功能捆绑在一个应该是init系统中的架构上令人费解。

systemd太多关键功能被称为单点故障,但这似乎没有道理。诚然,它抛弃了Unix的哲学  ,即创建可以协同工作的小型工具,而不是大型软件来完成所有工作。尽管  systemd不是严格意义上的整体(它由许多二进制文件而不是一个巨大的二进制文件组成),但它的确包含了许多完全不同的管理工具和命令。

虽然它可能不是单片的,但它很大。为了了解规模,我们计算了内核5.6.15代码库和GitHub存储库的systemdmaster分支中的文本行。

这是一个相对粗略的指标。它计算文本行,而不仅仅是代码行。因此,这包括注释,文档和其他所有内容。但是,这是一个类似的比较,它为我们提供了一个简单的准绳:

( find ./ -name '*.*' -print0 | xargs -0 cat ) | wc -l

内核有将近2千8百万(准确地说是27 784 340)行文本。相比之下,  systemd 有1,349,969,即近140万。使用我们的“幸运走运”指标,  systemd它的大小约为内核大小的5%,这真是太疯狂了!

作为另一个比较,Arch Linux发行版的System V init的现代实现的行数为1,721行。

毫无疑问,Poettering既不考虑电气和电子工程师协会  (IEEE)计算机协会,也不考虑便携式操作系统接口(POSIX)标准。实际上,他  鼓励开发人员忽略POSIX:

“因此,请获取一份Linux编程接口的副本,忽略有关POSIX兼容性的所有说明,并破解您的出色Linux软件。真让人放松!”

有人指责说这  systemd 是一个仅使Red Hat受益的Red Hat项目,但它正被迫送往更广阔的Linux世界。是的,它是在Red Hat中诞生的,并由它管理和指导。但是,在1,321名贡献者中,只有很少一部分为Red Hat工作。

那么,红帽有什么好处?

IBM总裁Jim Whitehurst 曾经是Red Hat的首席执行官,他说:

“ Red Hat考虑了许多可用选项,甚至使用了Canonical的Red Hat Enterprise Linux 6的Upstart。最终,我们选择systemd是因为它是提供可扩展性,简单性,可伸缩性和定义明确的界面来解决我们所遇到的问题的最佳架构。今天和未来。”

Whitehurst还说,他们也看到了嵌入式系统的好处。红帽与“世界上最大的嵌入式供应商合作,尤其是在电信和汽车行业中,稳定性和可靠性是第一要务。”

这些在技术上似乎是合理的原因。您可以了解公司对可靠性的需求,红帽为其自身利益寻求利益并不是没有道理的,但是其他所有人也应该效仿吗?

Drinking the systemd Kool-Aid?

一些反对systemd说言论的人和人们只是盲目地追随Red Hat的领导而采用它。

但是,就像“喝库尔援助”一词一样,这不太正确。邪教领袖吉姆·琼斯(Jim Jones)于1978年创立,他通过喝一种带有氰化物的葡萄味液体强迫他的900多名信徒自杀,这句话错误地使库尔德援助组织感到羞耻。该小组实际上喝了Flavor Aid,但从那以后,Kool-Aid就被那把刷子弄脏了。

另外,Linux发行版并非紧随Red Hat之后。他们systemd经过认真考虑后才采用。很长时间以来,辩论一直在Debian邮件列表上进行。然而,在2014年,社会上表决通过systemd作为缺省的init系统,而且还支持方案。

Debian是一个重要的示例,因为它不是源自RedHat,Fedora或CentOS。没有从Red Hat应用于Debian的指导。和Debian一样,PID 1也有很多后代,包括Ubuntu及其衍生产品。

Debian社区做出的决定意义深远。他们也进行了激烈的辩论,并使用Condorcet投票方法进行了投票。社区也不会轻易做出这样的选择。

它于2019年12月再次投票  ,继续关注 systemd  并继续探索替代方案。与盲目的追随者相反,这实际上是民主和工作中的选择自由的教科书示例。

选择的局限性

通常,您不会选择是否systemd 与特定的Linux发行版一起使用。相反,发行版自己选择是否要使用它,并且您可以选择自己喜欢的Linux发行版。也许您喜欢的Linux发行版切换到了systemd。就像最喜欢改变风格的音乐家一样,这可能会令人讨厌。

使用Debian,FedoraCentOSUbuntuArchSolus和  openSUSE并反对采用的人systemd可能会觉得自己在使用选择的发行版方面处于劣势。如果他们对POSIX的任何体系结构选择,范围蔓延或无视感到足够有力,那么他们可能会发现继续使用该发行版是站不住脚的。

当然有频谱。一方面,您有不了解问题(甚至不关心)的人,另一方面,您有热情的反对者。中间的某个地方是那些不喜欢变化,但对变化却不那么感兴趣的人。但是,分配难民又如何呢?由于他们的偏好或原则,他们不能留在他们选择的分配中吗?

不幸的是,这并不像安装所需的任何初始化系统那样简单。并非每个人都有做到这一点的技术能力,不要忘记当应用程序或桌面环境(例如GNOME)依赖 时出现的困难  systemd

转移到另一个发行版怎么办?有些软件(例如  Devuan)似乎systemd是已采用的非分发版本(在本例中为Debian)systemd。使用Devuan应该类似于父发行版,但并非所有非systemdfork 都并非如此。例如,如果您离开Fedora并转到AntiX,Gentoo或Slackware,您将获得截然不同的体验。

它不会去任何地方

我喜欢其中的一些  systemd功能(流程的简单和标准化控制机制)。我不了解某些功能的原理(二进制日志)。我还不喜欢它的某些功能(修改主文件夹 -谁要求的?)。

像Debian这样的发行版正在做聪明的事情,并在研究替代方案以保持其选择的开放性。但是,systemd它是长期的。

如果您为其他人管理Linux计算机,则不仅要了解systemd而且还了解System V init。这样,无论遇到哪种情况,您都可以履行职责。

只是在家使用Linux?如果是这样,请选择既要满足您的技术需求又要补充您的Linux意识形态的发行版。

这些年来为什么Linux的systemd仍然存在分歧

发表评论

电子邮件地址不会被公开。 必填项已用*标注