Systemd/zh-cn

systemd 是一个现代 SysV-style init 和 rc (运行命令) 作为linux系统以往常用的init的替代引导器.

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

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

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

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

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

目录
目录被systemd 使用，其他的应用程序作为一个非持续性存储的运行时的数据，像文件, 网络编程接口和状态文件.

systemd包将自动创建 本身的路径文件. 然而， 请注意,这一变化也将触发自动安装的OpenRC， 并可能会触发其使用的不同软件包.

Upstream only supports the file being a symlink to. Not creating this symlink will also cause problems with  and. In the past some utilities wrote information (like mount options) into and thus it was supposed to be a regular file. Nowadays all software is supposed to avoid this problem. Still, before switching the file to become a symbolic link, please check to be sure that the system is not affected by any reported regressions.

要创建链接文件，执行：

在启动时确保/usr路径存在
对于{Path|/usr}}拆分 {配置，在你使用systemd前，使用initramfs 来挂载. 请看说明： Gentoo Initramfs 指导.

When using dracut, enable the usrmount module if it is not automatically enabled to mount automatically.

When genkernel-next is used, before rebuilding the kernel, be sure to set the UDEV variable in 's configuration file to. This will pull into the initramfs:

See the Initramfs guide for more alternatives.

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

is either  or one of the other genkernel targets which imply the creation of an initramfs. For more information, look at the output of :

When LVM is used, the daemon needs to be started as well. Otherwise systemd will be unable to mount LVM volumes. can be enabled in :

安装
中包含 udev. 一旦安装了 ，那么就可以删除 ，因为systemd将会提供.

Enable the  USE flag globally (in ). The  USE flag should also be disabled to prevent conflicts with the  service. It is also possible to switch to a systemd subprofile to use saner USE flags defaults in which case it is not necessary to change :

最后，更新系统与Flags:

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

使用systemd引导启动
In order to run systemd, switch the that the executable kernel (or the initramfs) uses.

The following subsections document how to switch the in one of the boot managers or the kernel.

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

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

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

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

当使用 genkernel-next's 引导时, 使用 来替换.

内核配置
The init configuration can also be hard-coded in the kernel configuration. See. Note that this technique works for both and.

设置根（root）密码
请不要忘记设置系统的根密码. 如果出现错误,systemd将提示你输入根密码，从而进入维护模式.

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

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

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

参考 来获得更多选项.

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

Once booted with systemd, the tool is used to set locale and console or X11 keymaps. To change the system locale, run the following command:

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

最后,要设置X11布局:

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

时间和日期
Time and date can be set using the utility. That will also allow users to set up synchronization without needing to rely on or other providers than systemd's own implementation.

To learn how to use simply run:

自动加载模块
Automatic module loading is configured in a different file, or rather directory of files. The configuration files are stored in. On boot every file with a list of modules will be loaded. The file format is a list of modules separated by newlines and can have any name as long as it ends with. The module loading can be separated by program, service or whatever way that fits personal preference. An example is listed below:

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

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

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

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

If that is not the case and the network needs to be configured from console, give nmcli a try, or follow a guided configuration process through :

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

处理日志文件
systemd has its own way of handling log files without needing to rely on any external log system (like or ). Messages can now be read with. It can still be configured to use a preferred external tool for handling them. See to learn how to configure journald to suit personal needs.

Some common options:

For more information and many more options, look at.

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

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


 * The boot option  not only influences the kernel output, but also that of systemd itself. Then, while setting up systemd for the machine, drop the option to see any errors could arise more easily. After that, add it back to get a quiet (and faster) boot.
 * Even passing the  boot option, systemd can still be configured to show its status by also passing.
 * When not using the  boot option, some messages might be overwriting consoles. That is caused by the kernel configuration (see  and look for ). To tweak it pass the   boot parameter to the kernel (and update the value according to preference, for instance set a lower value like 1).

服务
At some point the system will need to be rebooted in order to get systemd running (in system mode). Be sure to read all of this document to ensure systemd is configured as completely as possible before rebooting. Note that works with systemd not running, but that  will not do anything useful without systemd running. Complete the service configuration (enabling and starting of services) after logging in to the system running systemd.

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

可用服务列表
All available service units can be listed using the  argument of :

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

Alternatively the tool can be used to list all services (including implicit ones):

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

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

也可以禁用服务:

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

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

同样的服务也可以停止:

安装自定义单元文件
Custom unit files can be placed in, where they will be recognized after running :

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

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

重载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

 * Problem: When booting the system displays an infinite loop of . The login screen to console never appears since the system never gets to that point in the boot process.


 * Solution: Most of the time this issue is caused when CONFIG_POWER_SUPPLY_DEBUG is enabled in the kernel. The current workaround is to disable this option in the kernel, then recompile, install, and boot the new kernel. The solution can also be found in this thread on the Gentoo forums. According to one user one the forum, this issue was also seen when using I2C eeprom on an embedded system . The solution in this case was to disable the CONFIG_I2C_DEBUG_CORE kernel option.

在任何地方打开图形会话
By default systemd only launches a process when it's going to be used. This causes some display managers (like GDM) to use the remaining TTYs for opening graphical sessions on demand, which can result in having consoles and graphical sessions placed randomly depending on the order they were used.

To stick with a more "classical" behavior (i.e, consoles placed from to  and graphical sessions using the remaining TTYs) force it to always launch  on those:

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

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

systemd-bootchart
当systemd-bootchart试图开始，对它重新调用systemd：

bootchart是一份SVG格式的报告，位于.

syslog-ng与systemd冲突
systemd creates as datagram socket  so syslog-ng needs to be told to read from a unix-dgram instead of a unix-stream as otherwise syslog-ng would be using a "wrong" stream:

syslog-ng source for systemd
There is no need to add  to the  config file. It will cause to fail (at least on version syslog-ng-3.7.2). Update the  line mentioned in the Gentoo Syslog-ng Wiki Page as follows:

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

您可能需要从你的服务文件创建一个新文件. 要做到这一点,使  USE flag 为了. 他将安装. 它将创建一个服务执行文件, 你现在可以把他复制到，手动调整并添加到你所需的级别.

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

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

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

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

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

The error raises due to systemd-networkd working under a non-root user with grsecurity refusing access to the complete structure for such users. To disable this option, disable the CONFIG_GRKERNSEC_SYSFS_RESTRICT kernel option.

另请参阅

 * 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