Introduction to Systemd
While Systemd was installed when building LFS, there are many
features provided by the package that were not included in the
initial installation because Linux-PAM was not yet installed. The
Systemd package needs to be rebuilt to provide a working
systemd-logind
service, which provides many additional features for dependent
packages.
Systemd Dependencies
Required
Meson Toolchain Files (for lib32)
Recommended
Note
Linux-PAM-1.7.1 is not strictly required to
build Systemd, but the main reason to rebuild Systemd in GLFS
(it's already built in LFS anyway) is for the systemd-logind daemon and the
pam_systemd.so
PAM module.
Linux-PAM-1.7.1 is required for them. All
packages in GLFS book with a dependency on Systemd expect that it
has been rebuilt with Linux-PAM-1.7.1.
Linux-PAM-1.7.1 and Polkit-126 (runtime)
Installation of Systemd
Remove two unneeded groups, render
and sgx
, from the default udev
rules:
sed -i -e 's/GROUP="render"/GROUP="video"/' \
-e 's/GROUP="sgx", //' rules.d/50-udev-default.rules.in
Rebuild Systemd by running the following commands:
mkdir build &&
cd build &&
meson setup --prefix=/usr \
--buildtype=release \
-D default-dnssec=no \
-D firstboot=false \
-D install-tests=false \
-D ldconfig=false \
-D man=auto \
-D sysusers=false \
-D rpmmacrosdir=no \
-D homed=disabled \
-D userdb=false \
-D mode=release \
-D pam=enabled \
-D pamconfdir=/etc/pam.d \
-D dev-kvm-mode=0660 \
-D nobody-group=nogroup \
-D sysupdate=disabled \
-D ukify=disabled \
-D docdir=/usr/share/doc/systemd-257.8 \
.. &&
ninja
Now, as the root
user:
ninja install
lib32 Installation of Systemd
Rebuild lib32-Systemd by running the following commands:
rm -rf * &&
LANG=en_US.UTF-8 \
meson setup --cross-file lib32 \
--prefix=/usr \
--libdir=/usr/lib32 \
--buildtype=release \
-D default-dnssec=no \
-D firstboot=false \
-D install-tests=false \
-D ldconfig=false \
-D man=disabled \
-D sysusers=false \
-D rpmmacrosdir=no \
-D homed=disabled \
-D userdb=false \
-D mode=release \
-D pam=enabled \
-D pamconfdir=/etc/pam.d \
.. &&
LANG=en_US.UTF-8 ninja
Now, as the root
user:
LANG=en_US.UTF-8 DESTDIR=$PWD/DESTDIR ninja install &&
cp -vR DESTDIR/usr/lib32/security /usr/lib32 &&
cp -va DESTDIR/usr/lib32/libsystemd.so* /usr/lib32 &&
cp -va DESTDIR/usr/lib32/libudev.so* /usr/lib32 &&
cp -v DESTDIR/usr/lib32/pkgconfig/* /usr/lib32/pkgconfig &&
rm -rf DESTDIR
Command Explanations
Note
Inspect meson_options.txt
or
meson.options
for a full list of
options.
--buildtype=release
:
Specify a buildtype suitable for stable releases of the package, as
the default may produce unoptimized binaries.
-D pamconfdir=/etc/pam.d
:
Forces the PAM files to be installed in /etc/pam.d rather than
/usr/lib/pam.d.
-D userdb=false
: Removes a
daemon that does not offer any use under a GLFS configuration.
-D homed=disabled
: Removes
a daemon that does not offer any use under a traditional GLFS
configuration, especially using accounts created with useradd. The dependencies needed
won't be installed in this book.
-D ukify=disabled
: Removes
a script for combining a kernel, an initramfs, and a kernel command
line etc. into an UEFI application which can be loaded by the UEFI
firmware to start the embedded Linux kernel. It is not needed if
you followed
BLFS' Grub UEFI Setup.
Configuring Systemd
The /etc/pam.d/system-session
file
needs to be modified and a new file needs to be created in order
for systemd-logind to
work correctly. Run the following commands as the root
user:
grep 'pam_systemd' /etc/pam.d/system-session ||
cat >> /etc/pam.d/system-session << "EOF"
# Begin Systemd addition
session required pam_loginuid.so
session optional pam_systemd.so
# End Systemd addition
EOF
cat > /etc/pam.d/systemd-user << "EOF"
# Begin /etc/pam.d/systemd-user
account required pam_access.so
account include system-account
session required pam_env.so
session required pam_limits.so
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
session optional pam_systemd.so
auth required pam_deny.so
password required pam_deny.so
# End /etc/pam.d/systemd-user
EOF
As the root
user, replace the
running systemd
manager (the init
process) with the systemd executable newly built
and installed:
systemctl daemon-reexec
Note
If you're in a chroot, the above command will be ignored with a
message, but it will not return an error. If running in a Bash
session that exits on error, the above command won't halt it.
Running it is safe.
Important
Now ensure Shadow-4.18.0 has been already rebuilt with
Linux-PAM-1.7.1 support first, then logout,
and login again. This ensures the running login session
registered with systemd-logind and a per-user
Systemd instance running for each user owning a login session.
Many GLFS packages listing Systemd as a dependency need the
systemd-logind
integration and/or a running per-user Systemd instance.
Warning
If you are upgrading from a previous version of Systemd and an
initrd is used for system boot, you should generate a new initrd
before rebooting the system.
Contents
A list of the installed files, along with their short descriptions
can be found at
https://www.linuxfromscratch.org/~thomas/multilib-systemd-m32/chapter08/systemd.html#contents-systemd.
Listed below are the newly installed library along with a short
description.
Installed Libraries:
pam_systemd
Short Descriptions
pam_systemd
|
is a PAM module used to register user sessions with the
systemd login manager, systemd-logind
|