openSUSE:Systemd 状态
使用 systemd - Systemd 状态 - 管理 Systemd - Systemd 打包指南 - 如何编写 Systemd 服务文件 - Systemd 服务文件收集 - Systemd 侦错
Systemd 是新一代的初始化系统,由 Lennart, Kay 和其他许多开发者共同开发。如果你对于 openSUSE 的 systemd 整合工作感兴趣,请阅读此页面。
目录
需整合到 systemd 的项目列表
- 应将默认安装的所有服务都使用原生 systemd 服务处理。
- 不支持 SUSE 的 LSB 扩展 $ALL。需要找到一个解决方案,假设——当然不是真的——使用防火墙。
- YaST2 runlevel 编辑器需要针对 systemd 修改。其他 YaST 模块会使用 runlevel 编辑器的 API 来启用/禁用/查询服务。
- 系统级别的 ulimits (/etc/sysconfig/ulimit, /etc/initscript)?
- 切换 SUSE 专有的配置文件到新的跨发行版配置:/etc/os-release, /etc/locale, /etc/tmpfiles.d/, /etc/vconsole.conf, /etc/modules-load.d/
- 修复找到的 bug(见下)
待启用的服务列表
下面是已默认安装却没有被 systemd 原生处理的服务列表(注意,这是 AJ 系统上的情况,他开启的东西默认可能没开)。
- apparmor
- cycle
- ipconfig
- nfs
- ntp
- xdm
openSUSE 整合 systemd 时发现的问题和 open 状态的 bug 列表
请帮忙修复这些 bug:
请将通用的特性请求或非 openSUSE 特有 bug 提交到 systemd 上游 bugzilla。
如果是报告 openSUSE 的 bug,则将其标记为 bnc#696902 - systemd as default boot handler bug report 的 blocker。
Recipes
创建服务文件
参考 Lennarts 的 systemd 管理员手册第三部分 来学习如何创建一个服务文件。
Fedora 已经有一系列 systemd 文件了,我们只要复制即可。因此,在创建前,请确认 Fedora 的状态 以及检查Lennart 的 unit 文件里有没有。
启用服务
https://fedoraproject.org/wiki/Packaging:Guidelines:Systemd
systemd 和 sysvinit 的简要差别
请记住 systemd 的一个目标是不同发行版之间的协作,所以我们可以跨发行版来分享更多我们现在没有正在做的东西。因此做了下列变动以适应统一的系统环境:
- /var/run + /var/lock + /media 现在都无条件挂载为 tmpfs
- 用 /etc/tmpfiles.d 创建临时文件,因此废弃了 /etc/tmpdirs.d
(这肯定不对,请更正)。
- agetty 替代了 mingetty
- systemd 不再支持 /etc/mtab 以正常文件形式存在,必须链接到 /proc/self/mounts。systemd 安装包会创建该链接。内核的 mounts 文件不再支持使用不信任的 '用户' 进行 umount 操作,需要 util-linux 2.19 以上版本来支持私有的 mtab (openSUSE 11.4 以上版本都有)。
- agetty 的串口控制台设置集成到 systemd 中,因此无需任何配置。
- 未来的 systemd 版本将废除对 /etc/init.d/boot.d 的支持。最好为它们提供替代的 unit 文件。
- systemd 真正遵守 /etc/fstab 中的 noauto 选项,即使是加密分区 (比如 /home)。移除 noauto 或添加 "comment=systemd.automount" 以使用 automount。
应记录的开放问题
打包
- 我打的包中包含一个 sysconfig 文件,仅仅用来设置一个变量以更改进程选项。我可以用 systemd 来实现吗? 要如何去做?
- 程序进程在安装的时候就已默认启动。当更新到包含 systemd 文件的新版本的时候会发生什么? 会默认启用吗?(实际上我已经试过了,服务是在运行的,所以我猜测对于更新的情况是会启用的,但是对于新安装的情况不是这样的?)
- 对于服务,应该使用 systemd 的 socket 激活特性。我应该做些什么来在禁用掉服务的同时却启用 socket 来自动启动服务(就系统设置而言)?让服务/sockets 默认启用的唯一方法就是修改特定的 systemd 包,而不是在软件自身的安装包中吗?听起来有些奇怪,而且非常不幸。例如,如果不使用官方源里的包进行更新的话,那么就无法先安装/更新一个包然后默认启动其服务。
- 当将启用了 systemd 的服务回退到基于 sysvinit 版本时,一些 systemd 中的状态明显没有更新,而且在运行 sysvinit 脚本时发生错误。(这可能更多的算作一个 bug 而非文档中应当讨论问题)
使用 systemd
用户和第三方迁移指南
此问题并不像上面的一样属于开放问题 - 即直接对比与用户相关的特性和功能如何? 例如,使用 sysVinit,可以在启动器的命令行中指定 "init S" 或 "init 3"。用 systemd 怎样才能做到? 第二, 对于第三方的脚本开发者,将init-script 和 service 文件的特性进行一对一的比较将会十分有用。