《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.63. Systemd-219

简介:

             systemd 软件包包含用于控制启动、运行和关闭系统的程序。

大概编译时间: 2.1 SBU
需要磁盘空间 815 MB

6.63.1.安装 systemd

首先创建文件使得当使用第五章中编译的 Util-Linux 以及停用默认的 LTO(链接时优化) 时能顺利编译 systemd:

cat > config.cache << "EOF"
KILL=/bin/kill
HAVE_BLKID=1
BLKID_LIBS="-lblkid"
BLKID_CFLAGS="-I/tools/include/blkid"
HAVE_LIBMOUNT=1
MOUNT_LIBS="-lmount"
MOUNT_CFLAGS="-I/tools/include/libmount"
cc_cv_CFLAGS__flto=no
EOF
AI 代码解读

默认要停用 LTO 是因为它会使 systemd 以及其它辅助程序链接到 libgcc_s.so、导致编译速度下降以及编译后代码量更大。

另外,修复一个使用第五章中编译的 Util-Linux 时的编译错误:

sed -i "s:blkid/::" $(grep -rl "blkid/blkid.h")

应用下面的补丁使得安装 compat pkg-config 文件但不安装在 LFS 中没有用的 compat 库:

patch -Np1 -i ../systemd-219-compat-1.patch

停用一个总是失败的测试例程:

sed -i "s:test/udev-test.pl ::g" Makefile.in

准备编译 systemd:

./configure --prefix=/usr                                           \
            --sysconfdir=/etc                                       \
            --localstatedir=/var                                    \
            --config-cache                                          \
            --with-rootprefix=                                      \
            --with-rootlibdir=/lib                                  \
            --enable-split-usr                                      \
            --disable-gudev                                         \
            --disable-firstboot                                     \
            --disable-ldconfig                                      \
            --disable-sysusers                                      \
            --without-python                                        \
            --docdir=/usr/share/doc/systemd-219                     \
            --with-dbuspolicydir=/etc/dbus-1/system.d               \
            --with-dbussessionservicedir=/usr/share/dbus-1/services \
            --with-dbussystemservicedir=/usr/share/dbus-1/system-services

配置选项的含义:

--config-cache

该选项告诉编译系统使用之前创建的 config.cache 文件。

--with-root*

这些选项确保核心程序以及共享库安装到根目录的子目录中。

--enable-split-usr

该选项确保系统中 /bin、/lib 和 /sbin 目录没有到 /usr 对应位置的符号链接时 systemd 仍能正常工作。

--disable-gudev --without-python

这些选项停用 LFS 没有提供所需依赖的可用功能。

--disable-firstboot

该选项防止安装系统初次启动时会进行设置的 systemd 服务。由于 LFS 中所有都要手动设置,它们并无用处。

--disable-ldconfig

该选项防止安装启动时会运行 ldconfig 而导致启动时间过长的 systemd 单元。尽管对于类似 LFS 之类的源发行版并无用处,如果需要该功能的话可以移除这个选项。

--disable-sysusers

该选项防止安装设置 /etc/group/etc/passwd 文件的 systemd 服务。本章前面章节中已经创建了这两个文件。

--with-dbus*

这些选项确保 D-Bus 配置文件安装到了正确的位置。

编译软件包:

make LIBRARY_PATH=/tools/lib

该软件包有个测试套件,但只能在安装后运行。

安装软件包:

make LD_LIBRARY_PATH=/tools/lib install

移动 NSS 库到 /lib

mv -v /usr/lib/libnss_{myhostname,mymachines,resolve}.so.2 /lib

移除一个不必要的目录:

rm -rfv /usr/lib/rpm

创建和 Sysvinit 兼容的符号链接,使得 systemd 作为默认的启动系统:

for tool in runlevel reboot shutdown poweroff halt telinit; do
     ln -sfv ../bin/systemctl /sbin/${tool}
done
ln -sfv ../lib/systemd/systemd /sbin/init

移除一个到不存在组的引用并修复一个配置文件使得启动时不会导致 systemd-tmpfiles 失败:

sed -i "s:0775 root lock:0755 root root:g" /usr/lib/tmpfiles.d/legacy.conf
sed -i "/pam.d/d" /usr/lib/tmpfiles.d/etc.conf

创建 systemd-journald 需要的 /etc/machine-id 文件:

systemd-machine-id-setup

由于测试套件高度依赖于宿主系统的内核配置,一些测试很可能失败。另外还需要做些更改使得不会查找本章后面 Util-Linux 软件包安装的一个程序。用以下命令测试结果:

sed -i "s:minix:ext4:g" src/test/test-path-util.c
make LD_LIBRARY_PATH=/tools/lib -k check

6.63.2. 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-notify, systemd-nspawn, systemd-path, systemd-run, 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, libsystemd.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-219, /usr/share/factory, /usr/share/systemd, /var/lib/systemd, 和 /var/log/journal

简要介绍

bootctl

用于查询固件和启动管理设置

busctl

用于自检和监控 D-Bus 总线

coredumpctl

用于检索 systemd 日志生成的核心转储

halt

通常调用带 -h 参数的 shutdown 命令,除非已经是运行等级 0,然后告诉内核暂停系统;它会在 /var/log/wtmp 文件中标记正准备关闭系统。

hostnamectl

用于查询或更改系统名称以及相关的设置

init

内核初始化硬件后接管引导程序而启动的第一个进程,它会启动设置的其它进程。

journalctl

用于查询 systemd 日志的内容

kernel-install

用于向 / 从 /boot 中添加或移除内核以及 initramfs 镜像

localectl

用于查询和更改系统地区和键盘布局设置

loginctl

用于自检和控制 systemd 登录管理器的状态

machinectl

用于自检和控制 systemd 虚拟机和容器注册管理器的状态

networkctl

用于检查 systemd-networkd 所看到的网络链接状态

poweroff

告诉内核暂停系统并关闭计算机 (查看 halt

reboot

告诉内核重启系统 (查看 halt

runlevel

报告之前和当期的运行等级、即 /var/run/utmp 文件中的最后一个运行等级记录

shutdown

以安全的方式关闭系统、向所有进程发送信号并通知所有登录的用户

systemctl

用于自检和控制 systemd 系统和服务管理器的状态

systemd-analyze

用于确定当前引导中的系统启动性能

systemd-ask-password

通过命令行中的问题消息用于向用户查询系统密码或口令

systemd-cat

用于连接进程日志的 STDOUT 和 STDERR

systemd-cgls

以树的形式递归显示指定 Linux 控制组层次结构的内容

systemd-cgtop

按照 CPU、内存和磁盘 I/O 负载的顺序显示本地 Linux 控制组层次结构的顶层控制组

systemd-delta

用于识别和比较 /etc 中覆盖 /usr 对应部分的配置文件

systemd-detect-virt

在虚拟化环境中检测执行情况

systemd-escape

用于在 systemd 单元名称中包含转义字符串

systemd-hwdb

用户管理硬件数据库(hwdb)

systemd-inhibit

用于在关机、睡眠或空闲休眠锁时执行程序

systemd-machine-id-setup

启动时系统安装程序用随机生成的 ID 初始化保存到 /etc/machine-id 的机器 ID

systemd-notify

守护进程脚本用于通知 init 系统状态更改

systemd-nspawn

用于在轻量级容器空间中运行命令或操作系统

systemd-path

用于查询系统和用户路径

systemd-run

用于创建并运行一个临时 .service 或 .scope 单元并在其中运行指定命令

systemd-tmpfiles

基于配置文件格式和 tmpfiles.d 指定的位置创建、删除以及清理易变的和临时文件和目录

systemd-tty-ask-password-agent

用于列出或执行正在等待的 systemd 密码请求

telinit

告诉 init 要更改的运行等级

timedatectl

用于查询和更改系统时间和设置

udevadm

通用 Udev 管理工具:控制 udevd 守护进程、从 Udev 数据库提供信息、 监控 uevent、等待 uevent 完成、检测 Udev 配置、为指定设备触发 uevents

libsystemd

systemd 工具库

libudev

用于获取 Udev 设备信息的库

目录
打赏
0
0
0
0
16429
分享
相关文章
Linux系统中的cd命令:目录切换技巧
踏过千山,越过万水,人生就是一场不断前行的旅程,总充满了未知与挑战。然而,“cd”命令如同你的旅伴,会带你穿梭在如棋盘一般的文件系统中,探索每一处未知。希望你能从“cd”命令中找到乐趣,像是掌控了一种络新妙的魔法,去向未知进发,开始你的探索之旅。
62 24
Linux系统之su命令的基本使用
Linux系统之su命令的基本使用
34 1
Linux系统之su命令的基本使用
|
19天前
|
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
98 27
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
37 10
|
3天前
|
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
29 1
|
10天前
|
利用PHP压缩音频:Linux环境下的ffmpeg简易安装指南
希望这个指南能为你的编程之旅提供帮助。只需记住,每一行代码都像音乐的音符,组合在一起,创造出美妙的旋律。祝你编程愉快!
47 6
YashanDB Linux客户端安装
本文详细介绍了YashanDB客户端在Linux系统中的安装、使用与卸载步骤。安装方法包括适用于所有Linux平台的脚本安装和专用于CentOS的rpm安装。脚本安装需解压软件包并配置环境变量,而rpm安装则需以root用户执行相关命令。此外,文章还说明了如何通过yasql连接YashanDB并进行数据库操作,以及两种安装方式对应的卸载方法,帮助用户顺利完成客户端的管理与维护。
|
22天前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
93 10
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等