%general-entities; ]> systemd &systemd-version;
&systemd-url;
Systemd-&systemd-version; systemd <para>Systemd 软件包包含控制系统引导、运行和关闭的程序。</para> <segmentedlist> <segtitle>&buildtime;</segtitle> <segtitle>&diskspace;</segtitle> <seglistitem> <seg>&systemd-ch6-sbu;</seg> <seg>&systemd-ch6-du;</seg> </seglistitem> </segmentedlist> </sect2> <sect2 role="installation"> <title>安装 systemd 首先,应用补丁,修复 systemd-networkd 在 Linux 5.2 或更新版本上的问题,以及 systemd 在 AMD Ryzen 系列 CPU 上的问题: patch -Np1 -i ../systemd-&systemd-version;-networkd_and_rdrand_fixes-1.patch 创建一个符号链接,绕过不存在的 xsltproc: ln -sf /tools/bin/true /usr/bin/xsltproc 由于还没有安装好最终的 Util-Linux, 需要在适当的位置创建一些库的符号链接: for file in /tools/lib/lib{blkid,mount,uuid}.so*; do ln -sf $file /usr/lib/ done 设定好 man 页面: tar -xf ../systemd-man-pages-&systemd-version;.tar.xz 删除在 chroot 环境中无法构建的测试: sed '177,$ d' -i src/resolve/meson.build 从默认的 udev 规则中删除不必要的组 render sed -i 's/GROUP="render", //' rules/50-udev-default.rules.in 准备安装 systemd: mkdir -p build cd build PKG_CONFIG_PATH="/usr/lib/pkgconfig:/tools/lib/pkgconfig" \ LANG=en_US.UTF-8 \ CFLAGS+="-Wno-format-overflow" \ meson --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ -Dblkid=true \ -Dbuildtype=release \ -Ddefault-dnssec=no \ -Dfirstboot=false \ -Dinstall-tests=false \ -Dkmod-path=/bin/kmod \ -Dldconfig=false \ -Dmount-path=/bin/mount \ -Drootprefix= \ -Drootlibdir=/lib \ -Dsplit-usr=true \ -Dsulogin-path=/sbin/sulogin \ -Dsysusers=false \ -Dumount-path=/bin/umount \ -Db_lto=false \ -Drpmmacrosdir=no \ .. meson 选项的含义: -D*-path=* 这些开关提供了 systemd 在运行时需要的二进制程序的位置, 这些程序有些尚未安装,有些的 pkgconfig 文件还在 /tools/lib/pkgconfig 目录中。 -Ddefault-dnssec=no 这个开关禁用实验性的 DNSSEC 支持。 -Dfirstboot=false 这个开关防止 systemd 安装用于初始化设定系统的服务。 在 LFS 中所有工作都会手工完成,因此不需要它们。 -Dinstall-tests=false 这个开关防止 systemd 安装编译好的测试文件。 -Dldconfig=false 这个开关防止一个 systemd 单元的安装,它在引导时运行 ldconfig, 这对于 LFS 等源代码发行版来说没有意义,还会增加引导时间。 如果您需要这个功能,可以删除这个开关。 -Droot* 这个开关保证核心程序和共享库被安装到 root 分区下的子目录中。 -Dsplit-usr=true 这个开关确保 systemd 能够在 /bin、/lib 和 /sbin 目录不是指向 /usr 中对应目录的符号链接的情况下工作。 -Dsysusers=false 这个开关防止 systemd 安装负责设定 /etc/group/etc/passwd 文件的服务。 我们在上一章已经创建了这两个文件。 -Drpmmacrosdir=no 该选项禁止安装用于 systemd 的 RPM 宏, 因为 LFS 并不支持 RPM。 编译该软件包: LANG=en_US.UTF-8 ninja 安装该软件包: LANG=en_US.UTF-8 ninja install 删除一个不再必要的符号链接: rm -f /usr/bin/xsltproc 创建 systemd-journald 需要的 /etc/machine-id 文件: systemd-machine-id-setup 删除指向 Util-Linux 库的符号链接: rm -fv /usr/lib/lib{blkid,uuid,mount}.so* 阻止 systemd 创建 /run/nologin, 以允许非特权用户在没有 systemd-logind的情况下登录: rm -f /usr/lib/tmpfiles.d/systemd-nologin.conf systemd 的内容 安装的程序 安装的库 安装的目录 bootctl, busctl, coredumpctl, halt (到 systemctl 的符号链接), hostnamectl, init, journalctl, kernel-install, localectl, loginctl, machinectl, networkctl, portablectl, poweroff (到 systemctl 的符号链接), reboot (到 systemctl 的符号链接), resolvconf (到 resolvectl 的符号链接), resolvectl, runlevel (到 systemctl 的符号链接), shutdown (到 systemctl 的符号链接), systemctl, systemd-analyze, systemd-ask-password, systemd-cat, systemd-cgls, systemd-cgtop, systemd-delta, systemd-detect-virt, systemd-escape, systemd-hwdb, systemd-id128, systemd-inhibit, systemd-machine-id-setup, systemd-mount, systemd-notify, systemd-nspawn, systemd-path, systemd-resolve (到 resolvectl 的符号链接), systemd-run, systemd-socket-activate, systemd-stdio-bridge, systemd-tmpfiles, systemd-tty-ask-password-agent, systemd-umount (到 systemd-mount 的符号链接), telinit (到 systemctl 的符号链接), timedatectl, 以及 udevadm libnss_myhostname.so.2, libnss_mymachines.so.2, libnss_resolve.so.2, libnss_systemd.so.2, libsystemd.so, libsystemd-shared-&systemd-version;.so (在 /lib/systemd 中), 以及 libudev.so /etc/binfmt.d, /etc/init.d, /etc/kernel, /etc/modules-load.d, /etc/sysctl.d, /etc/systemd, /etc/tmpfiles.d, /etc/udev, /etc/xdg/systemd, /lib/systemd, /lib/udev, /usr/include/systemd, /usr/lib/binfmt.d, /usr/lib/kernel, /usr/lib/modules-load.d, /usr/lib/sysctl.d, /usr/lib/systemd, /usr/lib/tmpfiles.d, /usr/share/doc/systemd-&systemd-version;, /usr/share/factory, /usr/share/systemd, /var/lib/systemd, 以及 /var/log/journal 简要描述 bootctl 用于查询固件和启动管理器设置 bootctl busctl 用于探查和监视 D-bus 总线 busctl coredumpctl 用于从 systemd 日志获取核心转储 coredumpctl halt 一般以 -h 参数调用 shutdown 命令,除非在运行级别已经为 0 时,则通知内核停止系统;在系统停止运行时它在 /var/log/wtmp 中进行记录 halt hostnamectl 查询和修改系统机器名 hostnamectl init 在内核初始化硬件后第一个启动的进程, 它接管引导过程,并根据它的配置文件启动所有进程。 init journalctl 用于查询 systemd 日志的内容 journalctl kernel-install 用于在 /boot 中添加或删除内核和 initramfs 映像文件 kernel-install localectl 用于查询和修改系统 locale 和键盘布局设置 localectl loginctl 用于探查和控制 systemd 登录管理器的状态 loginctl machinectl 用于探查和控制 systemd 虚拟机和容器注册管理器的状态 machinectl networkctl 用于探查 systemd-networkd 管理的网络连接状态 networkctl portablectl 用于在本地系统附加或移除可移植服务 portablectl poweroff 告诉内核停止系统运行并关闭计算机 (见 halt) poweroff reboot 告诉内核重启系统 (见 halt) reboot resolvconf systemd-resolved 注册 DNS 服务器和域设置 resolvconf resolvectl 向网络名称解析管理器发送控制命令, 或解析域名,IPv4 和 IPv6 地址,DNS 记录,以及服务。 resolvectl runlevel 报告当前系统运行级别和上一个运行级别, 上一个运行级别被记录在 /var/run/utmp runlevel shutdown 安全地关闭系统,向所有进程发送信号,并通知所有登录用户 shutdown systemctl 用于探查和控制 systemd 系统和服务管理器的状态 systemctl systemd-analyze 用于分析当前运行系统的引导性能 systemd-analyze systemd-ask-password 用于以命令行指定的消息向用户询问系统密码 systemd-ask-password systemd-cat 用于将进程的标准输出和错误输出重定向到系统日志 systemd-cat systemd-cgls 用树的形式递归地显示指定 Linux 控制组 (cgroup) 层次结构的内容 systemd-cgls systemd-cgtop 显示本地 Linux 控制组层次结构中占用资源最多的, 可以按 CPU 、内存和磁盘 I/O 负载排序 systemd-cgtop systemd-delta 用于确定并比较那些覆盖了 /usr 中默认值的 /etc 中的配置文件 systemd-delta systemd-detect-virt 检测系统是否在虚拟化环境下运行 systemd-detect-virt systemd-escape 用于转义字符串,以便将其包含在 systemd 单元名中 systemd-escape systemd-hwdb 用于管理硬件数据库 (hwdb) systemd-hwdb systemd-id128 生成和打印 id128 串 systemd-id128 systemd-inhibit 用于在关机、休眠或待机抑制锁被锁定的情况下运行程序 systemd-inhibit systemd-machine-id-setup 被系统安装工具用于在安装时以随机生成的 ID 初始化 /etc/machine-id 中的机器 ID systemd-machine-id-setup systemd-mount 一个用于临时挂载或自动挂载驱动器的工具 systemd-mount systemd-notify 被守护脚本用于通知 init 系统关于状态变化的信息 systemd-notify systemd-nspawn 用于在轻量级命名空间容器中运行命令或操作系统 systemd-nspawn systemd-path 用于查询系统和用户路径 systemd-path systemd-resolve 用于解析域名、IPv4 和 IPv6 地址、DNS 资源记录 以及服务 systemd-resolve systemd-run 用于创建一个临时的 .service 或 .scope 单元, 并在其中运行指定命令 systemd-run systemd-socket-activate 用于监听 socket 服务,并在连接时启动进程 systemd-socket-activate systemd-tmpfiles 根据 tmpfiles.d 目录中的配置文件给定的文件格式和位置, 创建、修改和清理易失性、临时性文件和目录 systemd-tmpfiles systemd-umount 卸载挂载点 systemd-umount systemd-tty-ask-password-agent 列出或处理等待中的 systemd 密码请求 systemd-tty-ask-password-agent telinit 告诉 init 切换到某个运行级别 telinit timedatectl 用于查询和修改系统时钟及其设置 timedatectl udevadm 通用 udev 管理工具:控制 udevd 守护进程, 提供 udev 数据库的信息,监视 udev 事件 ,等待 udev 事件结束, 测试 udev 配置,或对于给定设备触发 udev 事件 udevadm libsystemd 主要的 systemd 工具库 libsystemd libudev 用于访问 udev 设备信息的库 libudev