Systemd/zh-cn

is Article description::a modern SysV-style init and replacement for Linux systems. It is supported in Gentoo as an alternative init system.

安装
The core around which all distributions are built is the Linux kernel. It is the layer between the user programs and the system hardware. Gentoo provides its users several possible kernel sources. A full listing with description is available at the Kernel overview page.

For amd64-based systems, Gentoo recommends the sys-kernel/gentoo-sources package.

Choose an appropriate kernel source and install it using emerge:

内核
systemd使现代Linux内核的许多特色得以充分发挥. 现在，要想支持systemd，内核版本必须高于ebuild 2.6.39. 在最新的版本 包中, 有一个快捷的方法，使得systemd成为强制选择或可选的内核选项(请看Kernel/Configuration 来获得进一步的了解):

手动配置内核选项 (这是在不使用时，唯一的选择 ), 下面是内核配置选项的要求或建议:

UEFI系统应该启用下面的选项:

如果你的系统使用BFQ scheduler, 这里推荐使用 BFQ upstream 来启用 "BFQ hierarchical scheduling support" 下的"Enable the block layer -> IO Schedulers".

要获取最新的列表,请参阅部分上游的“需求”说明：README文件.

上游仅支持 ，它是一个链接文件，链接到. 如果不建立这个链接文件，就会导致 和. 在之前有一些系统工具会写入信息(比如写入里面的挂载选项)，因此它应该是一个普通文件. 现在所有的软件应该避免这个问题. 不过,在转换文件成为链接文件之前,请检查 ，来确保系统不受任何已知错误报告的影响.

要创建链接文件，执行：

在启动时确保挂载了/usr路径
如果你对进行单独分区，在你运行systemd前，要使用initramfs 来挂载分区. 就目前而言，这直到包 可用前，使用 或 ，他们支持挂载. 这为的是现在进行安装：

当你使用dracut时，如果它不自动启用模块，请手动安装.

当你使用genkernel-next时，在重新编译内核之前，一定要在配置中设置 UDEV 变量，使他变成. 这将把配置到initramfs中：

参考 Initramfs guide 来获得更多帮助.

使用LVM和initramfs
当使用 sys-fs/lvm2，且系统通过initramfs 启动时，必须使用 包来创建initramfs :

这意味着创建一个initramfs genkernel target，使用 或. 更多有关信息，请查看的提示:

当使用LVM时, 需要启动 守护进程. 否则systemd将无法挂载LVM卷. 可以在中启用:

Profile
开启  在全局USE flag 中，(中). USE flag 也应该被禁用，以防止与服务产生冲突. 另外，也可以切换到一个systemd sub profile使用的较好的USE标记的默认值，在这种情况下，没有必要改变:

Finally update the system with the new profile:

出现依赖性问题时(如  blocking ), ，这可能是world文件已经被记录. 要解决这个问题. 试着取消:

contains udev. Once installed, can be removed as systemd will be the provider for the  requirement.

Bootloader
为了运行systemd,切换可用内核 (或者 initramfs)使用.

接下来的部分文档指导你如何切换 启动管理器或内核.

GRUB Legacy (0.x)
这行代码参数应该被添加到内核的代码行. 这是一个摘自例子，它应该是这样:

如果要想使用OpenRC系统启动，尝试使用  替换.

GRUB 2
当 被使用时， 增加 init 这一行 GRUB_CMDLINE_LINUX :

手动配置GRUB 2文件时(仅限有经验的用户), 添加 参数到  或  命令行.

YABOOT
Yaboot is a boot loader for PowerPC-based hardware running Linux, particularly New World ROM Macintosh systems.

The  argument should be added directly after the kernel command-line. An example from :

You must run the  command each time you modify  for the changes to take effect.

In-kernel config
Init配置也可以在内核配置被固定. 请看. . 注意：这个方法适用于 .和

Upgrades
has the ability to update in-place on a running system (no reboot necessary). After an upgrade to systemd has emerged, run the following command:

Configuration
systemd支持通过几个系统配置文件，来满足系统最基本的运行要求.

Machine ID
创建一个ID来记录工作. 这可以通过以下命令进行：

主机名称
要设置主机名称，创建/编辑 ，然后直接输入所需的主机名.

当使用systemd启动时，一个叫 的工具 ，可以编辑和来达到目的. 要更改主机名，执行：

参考 来获得更多选项.

区域设置
通常,区域设置将从OpenRC转换到安装systemd时被很好的设置. 在你需要时,可以按照Gentoo手册的说明，设置语言环境 :

如果你通过systemd启动，那么工具可以被使用来设置区域在控制台或X11键盘映射的地区设置. 要更改系统区域设置，请运行下列命令：

更改虚拟控制台键盘映射表：

最后,要设置X11布局:

如果需要model, 变量和选项也可以被指定：

After doing any of the above, update the environment so the changes will take effect:

时间和日期
可以使用来设置时间和日期. 它也允许用户设置同步，而无需依赖 或者其他的systemd自己的工具.

学习如何使用 只需运行：

自动加载模块
自动加载模块配置在不同的文件中，或者更确切地说，在目录中的文件中. 配置文件存储在. 在启动与模块列表的每个文件将被加载，文件格式是由换行符分隔模块的列表，并且可以使用任何名称，只要它的扩展名是. 加载模块可以由程序、服务或其他方式,取决于符合个人喜好. 举个例子——. 如下表所示：

systemd-networkd系统守护进程管理网络配置
systemd-networkd在有线网络接口的，简单的配置上是很有用的. 它在默认情况下是禁用的.

要配置systemd-networkd，在路径下创建一个文件：请参考systemd.network(5) 一个简单的DHCP配置如下:

注意systemd-networkd 默认不会自动更新，要systemd管理DNS设置,替换为一个符号连接并启动到systemd-resolved.

网络管理
通常NetworkManager的用于配置网络设置. 为了这个目的，简单地用一个基于X11的桌面时，运行以下命令：

如果情况并非如此,网络需要从终端来配置，nmcli值得试试， 或者遵循配置指导：

nmtui 是一个ncurses的前端，在控制台模式下运行，同时将引导用户的过程中.

处理日志文件
systemd 有自己的方式处理日志文件,而不需要依赖任何外部日志系统 (像 或 ). 日志信息可以通过 来读取. 但是无论如何，它仍然可以被配置为使用一个更优秀的外部工具来处理它们. 请打开终端输入来学习如何配置journald来满足你的个人的需求.

If desired, the logging service be configured to pass log messages to external logging utilities such as sysklog or syslog-ng. See to learn how to configure the systemd-journald service to suit situational needs.

systemd's integrated logging service writes log messages in a secure, binary format. The logs are read by using the command, which is a separate executable from the systemd-journald logging service.

一些常用选项:

想要获得更多信息和更多的选项，请看.

/tmp现在是在tmpfs
除非明确指定挂载其他的文件系统到 在 中配置， systemd将会挂载 作为tmpfs. 这意味着它在每次启动时被清空，其大小将被限制在系统的RAM（内存）大小的50％. 要知道这是为什么，以及想要的行为和如何对其进行修改，请参考：API File Systems.

配置复杂的引导过程
当迁移到systemd用户通常注意到差异引导过程的时间


 * 启动选项 不仅影响了内核输出，也影响了systemd本身.  再就是，当你为你的系统设置systemd时，可以删除该选项来查看哪些是容易发生的错误. 之后，将它添加到一个静默的（和更快的）启动.
 * 甚至通过  启动选项， systemd 仍然可以通过也传递配置以显示其状态.
 * 当不使用 这个选项时，一些日志信息可能会刷满控制台. 这是由内核配置造成的(请参考 并查找). 要调整它通过 的引导参数内核（以及根据喜好更新值，例如设置成像1的较低值）.

服务
在某一时刻，系统需要重新启动来让systemd运行（在system模式）. 请务必仔细阅读本文，以确保在系统重新启动之前尽可能完整的配置systemd. 注意 在systemd不运行时工作. 但 在systemd不运行时不会做任何工作. 登录到正在运行的系统systemd后完成服务配置（启用和启动服务）.

OpenRC 服务
虽然systemd原本旨在支持运行旧的init.d脚本，支持不适合依赖于基于RC像“openrc”的引导，因此它支持在Gentoo上完全禁止. openrc提供了额外的措施来确保初始化. 当openrc不是引导系统器时，init.d不能运行（否则，结果将是不可预知的）.

可用服务列表
列出所有可用服务： :

下列文件扩展名值得关心：

作为选择 工具可用于列出所有服务(包括隐藏的):

最后查看未能运行的服务：

启用、禁用、启动和停止服务
使服务可用的一般方法是使用下面的命令:

也可以禁用服务:

这些命令允许使用默认名称默认目标（包括在服务文件的“安装”部分中指定的服务）. 但是，有时服务或者不提供该信息，或你喜欢有另一个名称/目标.

请注意，这些命令只能启用或禁用系统能够在下次开机启动;要启动该服务，现在，使用：

同样的服务也可以停止:

安装自定义单元文件
可以放在自定义单元文件,确认在那里他们将运行后，运行:

被预留给服务包管理器安装的文件.

自定义单元文件
当需要时只有轻微的修改到一个单位时，那里是无需创建 原始的单元文件的完整拷贝. 重写包提供的管理单元中的设置可以通过链接文件 目录在命名原单位之后 (例如  ) 在中.

重载systemd，需要通知它的变化：

然后服务需要重新来启动应用的更改:

验证更改的变量被应用到服务：

根据自定义名称启用服务
当提供的名称在组件"[安装]"部分的不符合期望，由"Alias"提供永久的新名字，这为此通过 customization 所需，可以手动在 创建一个链接文件. 名称 目录可以指定一个目标或者将取决于新一的另一项服务.

例如，安装 因为在:

要禁用该服务,只删除符号链接即可:

本机服务
Gentoo的安装包已经有systemd组件文件. 对于这些服务,这足以使他们开启它. 快速的迷你安装组件文件可以在systemd eclass users list看到.

下表列出了与OpenRC一致的服务：

时间服务
自从197年版本的systemd，支持计时器,cron 没有必要安装到systemd系统上. 212年版本以来持续性服务被支持,甚至取代了anacron. 持久性计时器在下一次有机会当运行的系统断电后，计时器将列入计划任务.

以下是关于如何使运行在用户的环境下，制作简单定时器的一个例子. 如果没有登录用户或会话运行. 每一个定时服务需要一个定时器和一个服务文件，该文件是由定时器按如下激活的：

首先,告诉systemd要重新扫描服务文件:

可以手动触发备份功能，通过运行下面的命令:

手动启动和停止计时器如下:

最后,激活计时器在每一个系统都启动,运行:

要检查正在运行的服务的最后结果：

电子邮件故障
如果一个定时服务运行和失败可以发送一封电子邮件通知用户或管理员. 这是可能的“OnFailure”节，指定如果服务失败时会发生什么. 检测到故障时由一个非零的返回代码调用脚本.

为了这个，改变脚本如下:

这要求服务 被安装，它可以在 kylemanna's systemd-utils repository被找到.

替换 cron
上面的计时器和服务文件也可以被添加到 让他们有可用的系统体系. 安装部分那时应该说明 来系统启动启用服务.

然而， cron也可以通过位于的脚本运行. 以及其他的你希望的，日常运行的路径. 这种行为可以通过安装 仿真systemd. 然后用以下命令激活新cron替换:

故障排除

 * Upstream debugging guide
 * Upstream debugging guide
 * Upstream debugging guide

/dev/kmsg buffer overrun, some messages lost

 * 问题：启动时系统会显示一个无限循环： . 到控制台的登录屏幕永远不会出现这一问题，因为在启动过程中系统永远不会获取点.


 * 解决方案 ︰ 大多数情况下，在内核中启用 CONFIG_POWER_SUPPLY_DEBUG 选项时，将会导致此问题. 当前的解决方法是在内核中禁用此选项，然后重新编译，安装，并引导新的内核. 也可以在Gentoo 论坛上找到解决办法 此线程 . 根据一个用户一个论坛， 嵌入式的系统上使用 I2C EEPROM 时，是也会出现此问题. 解决办法在这种情况下是禁用 CONFIG_I2C_DEBUG_CORE 内核选项.

在任何地方打开图形会话
默认情况下，当systemd被使用时，它只启动一个进程，这会导致一些显示管理器（像GDM）使用剩余Tty来打开图形的会话，这会导致在控制台和图形会话无计划的放置，而这取决于它们的顺序使用.

保持更 "经典" 的行为 (i.e, 控制台将从 到，图形会话使用剩余的tty) 迫使他总是启动关于那些：

LVM
从OpenRC切换到systemd+LVM，你需要正确挂载系统卷并激活LVM服务：

虽然这可能并不需要激活根（root）卷（如果LVM集成到initramfs），它可能不适用于其他LVM卷，除非该服务被激活.

systemd-bootchart
确保 CONFIG_DEBUG_KERNEL, CONFIG_SCHED_DEBUG ,和var>CONFIG_SCHEDSTATS 可用.

接下来使开机自启动:

这些变化的结果将生成一份位于的SVG格式的bootchart报告. 每次开机后，你都可以利用网络浏览器查看.

作为systemd-bootchart的替代，可以用以下命令查看

syslog-ng关于 systemd 的资源
没有必要添加 到 配置文件. 它会造成 运行错误 (最新版本syslog-ng-3.7.2会发生这个问题)，更新   在syslog-ng article中提到到命令，如下:

sys-fs/cryptsetup配置
systemd似乎不遵守 (参见)因此需要通过配置文件：

Make sure to enable the  USE flag for. It will install that will automatically create a service (  for above example) for each entry on boot.

检查未能启动的部分
检查未能启动的部分

开启调式排错模式
得到更多信息，设置：

或启用调试shell，在 tty9打开一个终端. 这有助于在引导过程中调试服务.

e4rat usage
请记得编辑，设置'init' 到 ，否则它将继续使用OpenRC引导.

GRSecurity hardening
启用 grsecurity ，systemd-networkd可能记录有下面的错误：

错误是因为 systemd-networkd 在非root用户环境下工作，对于这样的用户，使用 grsecurity 拒绝访问完成结构. 要禁用这个选项，禁用内核选项 CONFIG_GRKERNSEC_SYSFS_RESTRICT.

logind 可能也有些许的权限问题 CONFIG_GRKERNSEC_PROC 事件，请看.

shutdown -rF 不强制fsck
在需要时运行 需要启用服务. 它不依赖 的  选项，但相反它依赖以下的内核启动参数.

另请参阅

 * Comparison of init systems - An article comparing and contrasting the differences in Gentoo init systems.
 * Sakaki's EFI Install Guide - Particularly look at the chapter entitled Configuring systemd and installing necessary tools
 * OpenRC to Systemd Cheatsheet

外部资源

 * FAQ
 * Tips and tricks