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