Linux教程

【LFS 系列】从零开始 DIY Linux 系统:(六)构建 LFS 系统 - Systemd-219

本文主要是介绍【LFS 系列】从零开始 DIY Linux 系统:(六)构建 LFS 系统 - Systemd-219,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

安装 systemd

首先进入到源码目录,解压软件包:

cd /sources
tar xf systemd-219.tar.xz
cd systemd-219

首先创建文件使得当使用第五章中编译的 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

默认要停用 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

编译软件包:

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


安装完成后清理工作:

cd ..
rm -rf systemd-219

本次分享到此结束啦~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。

❤️ 技术交流可以 关注公众号:Lucifer三思而后行 ❤️

这篇关于【LFS 系列】从零开始 DIY Linux 系统:(六)构建 LFS 系统 - Systemd-219的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!