%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 创建一个符号链接,绕过不存在的 xsltproc: ln -sf /tools/bin/true /usr/bin/xsltproc 由于还没有安装好最终的 Util-Linux, 需要在适当的位置创建一些库的符号链接: for file in /tools/lib/lib{blkid,mount,uuid}*; do ln -sf $file /usr/lib/ done 设定好 man 页面: tar -xf ../systemd-man-pages-&systemd-version;.tar.xz 删除在 chroot 环境中无法构建的测试: sed '166,$ d' -i src/resolve/meson.build 应用一个补丁,以修正使用 glibc-2.28 时构建失败的问题: patch -Np1 -i ../systemd-&systemd-version;-glibc_statx_fix-1.patch 应用一个补丁,修复使用 meson-0.48.0 构建时出现的错误: patch -Np1 -i ../systemd-&systemd-version;-meson-0.48.0_fixes-1.patch 从默认的 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 \ meson --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ -Dblkid=true \ -Dbuildtype=release \ -Ddefault-dnssec=no \ -Dfirstboot=false \ -Dinstall-tests=false \ -Dkill-path=/bin/kill \ -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 \ .. 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 文件的服务。 我们在上一章已经创建了这两个文件。 编译该软件包: LANG=en_US.UTF-8 ninja 安装该软件包: LANG=en_US.UTF-8 ninja install 删除一个不需要的目录: rm -rfv /usr/lib/rpm rm -f /usr/bin/xsltproc 创建 systemd-journald 需要的 /etc/machine-id 文件: systemd-machine-id-setup 创建 /lib/systemd/systemd-user-sessions 脚本,使得非特权用户在没有 systemd-logind 的情况下也能登录: cat > /lib/systemd/systemd-user-sessions << "EOF" #!/bin/bash rm -f /run/nologin EOF chmod 755 /lib/systemd/systemd-user-sessions systemd 的内容 安装的程序 安装的库 安装的目录 bootctl, busctl, coredumpctl, halt, hostnamectl, init, journalctl, kernel-install, localectl, loginctl, machinectl, networkctl, poweroff, reboot, runlevel, shutdown, systemctl, systemd-analyze, systemd-ask-password, systemd-cat, systemd-cgls, systemd-cgtop, systemd-delta, systemd-detect-virt, systemd-escape, systemd-hwdb, systemd-inhibit, systemd-machine-id-setup, systemd-mount, systemd-notify, systemd-nspawn, systemd-path, systemd-resolve, systemd-run, systemd-socket-activate, systemd-stdio-bridge, systemd-tmpfiles, systemd-tty-ask-password-agent, telinit, timedatectl, 以及 udevadm libnss_myhostname.so.2, libnss_mymachines.so.2, libnss_resolve.so.2, libnss_systemd.so.2, libsystemd.so, libsystemd-shared-231.so, 以及 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 poweroff 告诉内核停止系统运行并关闭计算机 (见 halt) poweroff reboot 告诉内核重启系统 (见 halt) reboot 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-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-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