Ubuntu 15.04 带来的较大变化是从 upstart 切换到 systemd 作为管理启动和系统服务启动的默认设置。
有人能向非技术用户充分解释这会对我们产生什么影响吗?以及这为什么重要吗?
答案1
普通用户不应该注意到任何变化,这是设计使然。它是一个 init 系统,而不是用户传统上与之交互的东西。它应该完全取代 Upstart 提供的功能——并做一些额外的事情——但非技术用户唯一会看这时就出问题了。
积极使用和开发 Upstart 的用户、系统管理员和开发人员是需要解决问题的人。Ubuntu Wiki 上的迁移文档帮助开发人员转换他们的初始化脚本,但用户和系统操作员可以继续使用 Upstart,只需坚持使用 14.04(支持到 2019 年)。
改变的原因和理由实际上不是来自 Ubuntu 方面。Canonical 对 Upstart(他们的项目)很满意,但许多 Debian 用户希望转向现代的 init 引擎,以便在启动时获得更好的并发性,并在所有服务中获得更好的监控功能。
这意味着各种选择之间的斗争(理由)并且 systemd 最终获胜。
Canonical 与 Debian 合作因为它最简单,也可能是最好的。他们可以放弃一个项目,而不会与上游发生冲突。它还使我们与其他正在转向 systemd 的发行版(Red Hat、Fedora 等)保持一致。更加专注,重复工作更少。
总结对于非技术人员来说,这根本不会影响你。对于 Ubuntu 来说,这意味着更少的工作和更好的初始化系统。
答案2
有人能向非技术用户充分解释这会对我们产生什么影响吗?
理论上,这不会影响那些不了解系统实际运作细节的非技术最终用户。实际上,你会看到很多事情。
以下是一个不完整的列表:
- 如果你有使用 upstart 作业定义文件来启动程序的附加软件,它们将停止工作。你必须安装(并可能编写,但更常见的是,从已经编写的其他人那里窃取)systemd服务单位文件。例如:https://askubuntu.com/questions/613785
- systemd 开发人员对电源管理等方面的各种设计假设导致其默认设置与您可能习惯的设置不一致。 systemd 开发人员对于笔记本电脑盖子开关的响应方式有非常明确的想法, 例如。
- 如果您使用的是 nvidia 专有显示驱动程序,则 systemd 中的各种设计决策都会对您产生影响。例如:https://askubuntu.com/questions/613773
- 对于来自 upstart 的用户来说,这并不重要,因为 Ubuntu 用户已经有手册页告诉他们这一点好几年了,但我提到这一点是为了那些可能会读到这篇文章的非 Ubuntu 用户:来自 System 5
init
+的其他 Linux 操作系统用户rc
对 systemd 的事实感到困惑仅有的与 System 5 向后兼容rc
。与 upstart 以及大多数其他系统一样,它声称并且不提供与 System 5init
及其配置文件的向后兼容性/etc/inittab
。因此,那些听从了 30 多年前人们的建议“好吧,你可以把它编辑成
/etc/inittab
……”的人,或者那些使用遵循该建议的软件的人,现在拥有的软件不会从 bootstrap 启动。示例:https://unix.stackexchange.com/a/196197/5132 - 你不能单用户模式通过 systemd
shutdown
命令,就像使用前面的shutdown
命令一样。除了它被称为救援模式在 systemd 术语中,救援模式在 systemd 世界观中不被视为关闭状态。它被视为跑步状态。shutdown now
将关闭机器。这是systemctl rescue
在 systemd 世界中进入单用户模式。进一步阅读: https://unix.stackexchange.com/a/196471/5132 - 再说最后一个话题:如果你还没有抛弃运行级别现在是时候这么做了。进一步阅读:https://unix.stackexchange.com/a/196014/5132
- 您必须小心遵循随机 WWW 浏览中发现的一般 systemd 建议,因为您“知道”现在“一切都是 systemd”。您会看到人们谈论使用选项运行命令
--user
。systemctl
这不适用于 Ubuntu(目前)。upstart 和 systemd 在这方面有很大不同,Ubuntu 版本 15 仍然使用 upstart每个会话初始化而不是 systemd每个用户实例。 所以https://superuser.com/a/860598/38062例如,不适用。☺
答案3
正如其他人已经指出的那样,理论上,这不应该影响非技术最终用户 - 并且理论上理论和实践之间没有区别,但实践中是有区别的。
澄清
我认为这里发布的几件事需要澄清:
它是一个初始化系统,而不是用户传统上与之交互的东西。
SysV init 和 Upstart 都是这种情况,但 systemd 不再是这种情况。它确实很多用户传统上与之交互的事物:
它应该完全取代 Upstart 提供的功能——并且还能做一些额外的事情
需要澄清两件事 - 首先是关于完全替换 Upstart:
没有 SysV 启动脚本
人们使用 systemd 时遇到的一个问题是它不运行 SysV init 脚本。因此有一个例子没有完全取代 Upstart 提供的功能。
这是我们 30 多年来可以依赖的东西,传统上您需要编写 SysV init 脚本以实现最大程度的可移植性,而无需重复(通过编写相同脚本的多个版本),但现在情况已不再如此。
当仅使用来自官方存储库的软件包时,这应该不是问题,因为大概所有曾经具有 SysV init 或 Upstart 脚本的软件包都需要在打包之前重写其脚本。
只有那些碰巧使用第三方或自定义软件的人才会遇到这个问题,这些软件的初始化脚本是为 SysV init 或 Upstart 编写的,在升级到带有 systemd 的系统之前,这些软件需要重写初始化脚本(或者安装 upstart,这是也是一个选择或者迁移到不使用 systemd 的系统)。
systemd-sysv-generator 可以自动将 SysV init 脚本转换为 systemd 脚本,但是一些错误以及一长串明显的不兼容性。
现在,第二个澄清——关于那几件额外的事情:
一些额外的东西
systemd 将涵盖的“一些额外内容”——根据systemd 的展望——已取得的成就以及未来发展演讲者伦纳特·普特林2014 年 GNOME.asia 的活动如下:
- 初始化系统
- 日志记录
- 登录管理
- 设备管理
- 临时和易失文件管理
- 二进制格式注册
- 背光保存/恢复
- rfkill 保存/恢复
- 启动图
- 预读
- 加密存储设置
- EFI/GPT 分区发现
- 虚拟机/容器注册
- 容器管理
- 主机名管理
- 区域管理
- 时间管理
- 随机种子管理
- sysctl 变量管理
- 控制台管理
- 内省
- 自动发现
- 即插即用
- 网络管理
- systemd-networkd
- DNS 缓存
- mDNS 响应器
- LLMNR 响应者
- DNSSEC 验证
- 内核中的 IPC
- 总线
- SD 总线
- 使用 NTP 进行时间同步
- systemd-timesyncd
- 与容器集成
- 服务沙盒
- 应用程序沙盒
- 操作系统映像格式
- 容器镜像格式
- 应用程序图像格式
- 具有自动发现功能的 GPT
- 无状态系统
- 可实例化系统
- 恢复出厂设置
- 节点初始化和更新
- 与云集成
- 跨节点的服务管理
- 可验证的操作系统映像直至固件
- 引导加载
- 构建互联网的下一代操作系统 统一发行版之间毫无意义的差异
所以回到:“它是一个 init 系统,而不是用户传统上与之交互的东西。”——必须指出的是,init 系统只是该列表中的一项。
最后,我想评论的最后一件事是:
只有当出现问题时,非技术用户才会看到这一点。
噢,真是松了一口气。:)
变化
对于最终用户来说,最显著的变化(除了脚本本身)是启动和停止服务以及使用以下命令:
不再按预期工作。例如,nohup
是一个 POSIX 命令,用于确保在您退出会话后进程继续运行。它不再起作用在 systemd 上。此外,像screen
和这样的程序tmux
需要以特殊方式调用,否则与它们一起运行的进程将被终止(而首先不终止这些进程通常是运行 screen 或 tmux 的主要原因)。
这不是一个错误,而是一个设计选择,因此将来不太可能修复。这就是 Lennart Poettering说关于这个问题:
在我看来,UNIX 默认允许任意用户代码在注销后不受限制地保留,这实际上很奇怪。许多操作系统人士已经讨论了很长时间,这应该是可能的,但肯定不是默认的,但到目前为止,没有人敢将其从默认设置变成可选项。注销后不清理用户会话不仅丑陋且有点黑客行为,而且还存在安全问题。 systemd 230 现在终于打开了开关,并最终在用户注销时默认正确清理所有内容。
更多信息请参阅:
- Systemd 默认开始终止后台进程
- Systemd v230 在用户注销、屏幕损坏、tmux 后终止后台进程
- Debian 错误 #825394:用户注销后,systemd 会终止后台进程
跑步screen
- 暴发户:
screen
- 系统:
systemd-run --user --scope screen
(注意:上述“upstart”的行为实际上是 systemd 以外的任何行为,这不是 upstart 特有的)
开始作业 foo:
- 暴发户:
start foo
- 系统:
systemctl start foo
停止作业 foo:
- 暴发户:
stop foo
- 系统:
systemctl stop foo
重新启动作业 foo:
- 暴发户:
restart foo
- 系统:
systemctl restart foo
列出职位及其状态:
- 暴发户:
initctl list
- 系统:
systemctl status
(请参阅我的回答Upstart 和 systemd 的优点/缺点是什么?以获取超出该问题范围的更多详细信息。)
日志
处理日志也有很大的区别,因为与 Unix 传统相反,systemd 的日志以自定义格式存储在二进制文件中,因此:
cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log
您需要使用特殊命令来访问您的日志:
sudo journalctl -u foo
sudo journalctl -u foo -f
争议
systemd 最初引入 Debian,后来又引入 Ubuntu,这并非没有引起争议和强烈反对,正如写过以下文章的人所知道的那样:
- 认识 Devuan,这是因 systemd 激烈反抗而诞生的 Debian 分支(PCWorld)
- 拿起你的干草叉:Ubuntu 将于周一切换为 systemd(《登记册》)
- Linus Torvalds 和其他人在 Linux 的 systemd 上(ZDNet)
- 关于 systemd 的争议(勘误表安全)
这Debian 对 systemd 的官方立场以及由此产生的争议导致了2014 年出埃及宣言并结束伊恩·杰克逊辞职。
初始自由,Without-Systemd.org和Systemd-Free 网站倡议诞生了,有很多Hacker News 上的讨论。
进一步阅读
- 今天的坏消息:systemd-resolved 将在 Ubuntu 16.10 中部署作者:Paul Wouters
- 反对 systemd 的论点在没有 Systemd 的情况下
- systemd 与 SysV 不兼容列表(官方文件)
- 在 Ubuntu 15.04 上重新启用 Upstart作者:Derrik Diener
- systemd sysv init 兼容模式:其工作原理以及发生故障时的故障排除
- Upstart 和 systemd 的优点/缺点是什么?在 unix.stackexchange.com 上