ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-10-03 19:00:49  阅读:244  来源: 互联网

标签:Systemd lib -- systemd 219 编译 usr LFS


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三思而后行 ❤️

标签:Systemd,lib,--,systemd,219,编译,usr,LFS
来源: https://blog.csdn.net/m0_50546016/article/details/120597125

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有