Files
Arch-R/packages/sysutils/systemd/package.mk
Matthias Reichl 8f1344f6fd Move kernel overlays setup to init
When running kernel-overlays-setup as a systemd service we have
a short window where /lib/firmware isn't available.

This causes drm edid override to occasionally fail if the edid file
is requested between switching to sysroot and completion of the
kernel-overlays-setup script.

Setting up firmware and module overlays in init, before switching
to sysroot, closes the gap and also has the benefit that we no longer
need to care about the rather tedious systemd unit ordering.

Signed-off-by: Matthias Reichl <hias@horus.com>
2021-02-08 16:16:17 +01:00

290 lines
12 KiB
Makefile

# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="systemd"
PKG_VERSION="247"
PKG_SHA256="77146f7b27334aa69ef6692bed92c3c893685150f481e7254b81d4ea0f66c640"
PKG_LICENSE="LGPL2.1+"
PKG_SITE="http://www.freedesktop.org/wiki/Software/systemd"
PKG_URL="https://github.com/systemd/systemd/archive/v${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain libcap kmod util-linux entropy libidn2 wait-time-sync"
PKG_LONGDESC="A system and session manager for Linux, compatible with SysV and LSB init scripts."
PKG_MESON_OPTS_TARGET="--libdir=/usr/lib \
-Drootprefix=/usr \
-Dsplit-usr=false \
-Dsplit-bin=true \
-Ddefault-hierarchy=hybrid \
-Dtty-gid=5 \
-Dtests=false \
-Dseccomp=false \
-Dselinux=false \
-Dapparmor=false \
-Dpolkit=false \
-Dacl=false \
-Daudit=false \
-Dblkid=true \
-Dfdisk=false \
-Dkmod=true \
-Dpam=false \
-Dpwquality=false \
-Dmicrohttpd=false \
-Dlibcryptsetup=false \
-Dlibcurl=false \
-Dlibidn=false \
-Dlibidn2=true \
-Dlibiptc=false \
-Dqrencode=false \
-Dgcrypt=false \
-Dgnutls=false \
-Dopenssl=false \
-Dp11kit=false \
-Delfutils=false \
-Dzlib=false \
-Dbzip2=false \
-Dxz=false \
-Dlz4=false \
-Dxkbcommon=false \
-Dpcre2=false \
-Dglib=false \
-Ddbus=false \
-Ddefault-dnssec=no \
-Dimportd=false \
-Dremote=false \
-Dutmp=true \
-Dhibernate=false \
-Denvironment-d=false \
-Dbinfmt=false \
-Drepart=false \
-Dcoredump=false \
-Dresolve=false \
-Dlogind=true \
-Dhostnamed=true \
-Dlocaled=false \
-Dmachined=false \
-Dportabled=false \
-Duserdb=false \
-Dhomed=false \
-Dnetworkd=false \
-Dtimedated=false \
-Dtimesyncd=true \
-Dfirstboot=false \
-Drandomseed=false \
-Dbacklight=false \
-Dvconsole=false \
-Dquotacheck=false \
-Dsysusers=false \
-Dtmpfiles=true \
-Dhwdb=true \
-Drfkill=false \
-Dldconfig=false \
-Defi=false \
-Dtpm=false \
-Dima=false \
-Dsmack=false \
-Dgshadow=false \
-Didn=false \
-Dnss-myhostname=false \
-Dnss-mymachines=false \
-Dnss-resolve=false \
-Dnss-systemd=false \
-Dman=false \
-Dhtml=false \
-Dlink-udev-shared=true \
-Dlink-systemctl-shared=true \
-Dlink-networkd-shared=false \
-Dbashcompletiondir=no \
-Dzshcompletiondir=no \
-Dkmod-path=/usr/bin/kmod \
-Dmount-path=/usr/bin/mount \
-Dumount-path=/usr/bin/umount \
-Ddebug-tty=${DEBUG_TTY} \
-Dversion-tag=${PKG_VERSION}"
pre_configure_target() {
export TARGET_CFLAGS="${TARGET_CFLAGS} -fno-schedule-insns -fno-schedule-insns2 -Wno-format-truncation"
export LC_ALL=en_US.UTF-8
}
post_makeinstall_target() {
# remove unneeded stuff
safe_remove ${INSTALL}/etc/init.d
safe_remove ${INSTALL}/etc/systemd/system
safe_remove ${INSTALL}/etc/xdg
safe_remove ${INSTALL}/etc/X11
safe_remove ${INSTALL}/usr/bin/kernel-install
safe_remove ${INSTALL}/usr/lib/kernel/install.d
safe_remove ${INSTALL}/usr/lib/rpm
safe_remove ${INSTALL}/usr/lib/systemd/user
safe_remove ${INSTALL}/usr/lib/tmpfiles.d/etc.conf
safe_remove ${INSTALL}/usr/lib/tmpfiles.d/home.conf
safe_remove ${INSTALL}/usr/share/factory
# clean up hwdb
safe_remove ${INSTALL}/usr/lib/udev/hwdb.d/20-OUI.hwdb
safe_remove ${INSTALL}/usr/lib/udev/hwdb.d/20-acpi-vendor.hwdb
safe_remove ${INSTALL}/usr/lib/udev/hwdb.d/20-bluetooth-vendor-product.hwdb
safe_remove ${INSTALL}/usr/lib/udev/hwdb.d/20-net-ifname.hwdb
safe_remove ${INSTALL}/usr/lib/udev/hwdb.d/20-sdio-classes.hwdb
safe_remove ${INSTALL}/usr/lib/udev/hwdb.d/20-sdio-vendor-model.hwdb
# remove Network adaper renaming rule, this is confusing
safe_remove ${INSTALL}/usr/lib/udev/rules.d/80-net-setup-link.rules
safe_remove ${INSTALL}/usr/lib/udev/rules.d/71-seat.rules
safe_remove ${INSTALL}/usr/lib/udev/rules.d/73-seat-late.rules
# remove getty units, we dont want a console
safe_remove ${INSTALL}/usr/lib/systemd/system/autovt@.service
safe_remove ${INSTALL}/usr/lib/systemd/system/console-getty.service
safe_remove ${INSTALL}/usr/lib/systemd/system/container-getty@.service
safe_remove ${INSTALL}/usr/lib/systemd/system/getty.target
safe_remove ${INSTALL}/usr/lib/systemd/system/getty@.service
safe_remove ${INSTALL}/usr/lib/systemd/system/serial-getty@.service
safe_remove ${INSTALL}/usr/lib/systemd/system/*.target.wants/getty.target
# remove other notused or nonsense stuff (our /etc is ro)
safe_remove ${INSTALL}/usr/lib/systemd/systemd-update-done
safe_remove ${INSTALL}/usr/lib/systemd/system/systemd-update-done.service
safe_remove ${INSTALL}/usr/lib/systemd/system/*.target.wants/systemd-update-done.service
# remove systemd-hwdb-update. we have own hwdb.service
safe_remove ${INSTALL}/usr/lib/systemd/system/systemd-hwdb-update.service
# remove nspawn
safe_remove ${INSTALL}/usr/bin/systemd-nspawn
safe_remove ${INSTALL}/usr/lib/systemd/system/systemd-nspawn@.service
# remove unneeded generators
for gen in ${INSTALL}/usr/lib/systemd/system-generators/*; do
case "${gen}" in
*/systemd-debug-generator)
# keep it
;;
*)
safe_remove "${gen}"
;;
esac
done
# remove catalog
safe_remove ${INSTALL}/usr/lib/systemd/catalog
# remove partition
safe_remove ${INSTALL}/usr/lib/systemd/systemd-growfs
safe_remove ${INSTALL}/usr/lib/systemd/systemd-makefs
# distro preset policy
safe_remove ${INSTALL}/usr/lib/systemd/system-preset/*
echo "disable *" > ${INSTALL}/usr/lib/systemd/system-preset/99-default.preset
safe_remove ${INSTALL}/usr/lib/systemd/user-preset/*
echo "disable *" > ${INSTALL}/usr/lib/systemd/user-preset/90-systemd.preset
# remove networkd
safe_remove ${INSTALL}/usr/lib/systemd/network
# remove systemd-time-wait-sync (not detecting slew time updates, using package wait-time-sync)
safe_remove ${INSTALL}/usr/lib/systemd/system/systemd-time-wait-sync.service
safe_remove ${INSTALL}/usr/lib/systemd/systemd-time-wait-sync
# tune journald.conf
sed -e "s,^.*Compress=.*$,Compress=no,g" -i ${INSTALL}/etc/systemd/journald.conf
sed -e "s,^.*SplitMode=.*$,SplitMode=none,g" -i ${INSTALL}/etc/systemd/journald.conf
sed -e "s,^.*RuntimeMaxUse=.*$,RuntimeMaxUse=2M,g" -i ${INSTALL}/etc/systemd/journald.conf
sed -e "s,^.*RuntimeMaxFileSize=.*$,RuntimeMaxFileSize=128K,g" -i ${INSTALL}/etc/systemd/journald.conf
sed -e "s,^.*SystemMaxUse=.*$,SystemMaxUse=10M,g" -i ${INSTALL}/etc/systemd/journald.conf
# tune logind.conf
sed -e "s,^.*HandleLidSwitch=.*$,HandleLidSwitch=ignore,g" -i ${INSTALL}/etc/systemd/logind.conf
sed -e "s,^.*HandlePowerKey=.*$,HandlePowerKey=ignore,g" -i ${INSTALL}/etc/systemd/logind.conf
# replace systemd-machine-id-setup with ours
safe_remove ${INSTALL}/usr/lib/systemd/system/systemd-machine-id-commit.service
safe_remove ${INSTALL}/usr/lib/systemd/system/*.target.wants/systemd-machine-id-commit.service
safe_remove ${INSTALL}/usr/bin/systemd-machine-id-setup
mkdir -p ${INSTALL}/usr/bin
cp ${PKG_DIR}/scripts/systemd-machine-id-setup ${INSTALL}/usr/bin
cp ${PKG_DIR}/scripts/userconfig-setup ${INSTALL}/usr/bin
cp ${PKG_DIR}/scripts/usercache-setup ${INSTALL}/usr/bin
cp ${PKG_DIR}/scripts/environment-setup ${INSTALL}/usr/bin
# use systemd to set cpufreq governor and tunables
find_file_path scripts/cpufreq && cp -PRv ${FOUND_PATH} ${INSTALL}/usr/bin
mkdir -p ${INSTALL}/usr/sbin
cp ${PKG_DIR}/scripts/network-base-setup ${INSTALL}/usr/sbin
cp ${PKG_DIR}/scripts/systemd-timesyncd-setup ${INSTALL}/usr/sbin
# /etc/resolv.conf and /etc/hosts must be writable
ln -sf /run/libreelec/resolv.conf ${INSTALL}/etc/resolv.conf
ln -sf /run/libreelec/hosts ${INSTALL}/etc/hosts
ln -sf /run/libreelec/environment ${INSTALL}/etc/environment
# provide 'halt', 'shutdown', 'reboot' & co.
ln -sf /usr/bin/systemctl ${INSTALL}/usr/sbin/halt
ln -sf /usr/bin/systemctl ${INSTALL}/usr/sbin/poweroff
ln -sf /usr/bin/systemctl ${INSTALL}/usr/sbin/reboot
ln -sf /usr/bin/systemctl ${INSTALL}/usr/sbin/runlevel
ln -sf /usr/bin/systemctl ${INSTALL}/usr/sbin/shutdown
ln -sf /usr/bin/systemctl ${INSTALL}/usr/sbin/telinit
# strip
debug_strip ${INSTALL}/usr
# defaults
mkdir -p ${INSTALL}/usr/config
cp -PR ${PKG_DIR}/config/* ${INSTALL}/usr/config
safe_remove ${INSTALL}/etc/modules-load.d
ln -sf /storage/.config/modules-load.d ${INSTALL}/etc/modules-load.d
ln -sf /storage/.config/logind.conf.d ${INSTALL}/etc/systemd/logind.conf.d
ln -sf /storage/.config/sleep.conf.d ${INSTALL}/etc/systemd/sleep.conf.d
ln -sf /storage/.config/timesyncd.conf.d ${INSTALL}/etc/systemd/timesyncd.conf.d
safe_remove ${INSTALL}/etc/sysctl.d
ln -sf /storage/.config/sysctl.d ${INSTALL}/etc/sysctl.d
safe_remove ${INSTALL}/etc/tmpfiles.d
ln -sf /storage/.config/tmpfiles.d ${INSTALL}/etc/tmpfiles.d
safe_remove ${INSTALL}/etc/udev/hwdb.d
ln -sf /storage/.config/hwdb.d ${INSTALL}/etc/udev/hwdb.d
safe_remove ${INSTALL}/etc/udev/rules.d
ln -sf /storage/.config/udev.rules.d ${INSTALL}/etc/udev/rules.d
}
post_install() {
add_group systemd-journal 190
add_group systemd-timesync 191
add_user systemd-timesync x 191 191 "systemd-timesync" "/" "/bin/false"
add_group systemd-network 193
add_user systemd-network x 193 193 "systemd-network" "/" "/bin/sh"
add_group audio 63
add_group cdrom 11
add_group dialout 18
add_group disk 6
add_group floppy 19
add_group kmem 9
add_group kvm 10
add_group lp 7
add_group render 12
add_group tape 33
add_group tty 5
add_group video 39
add_group utmp 22
add_group input 199
enable_service machine-id.service
enable_service debugconfig.service
enable_service userconfig.service
enable_service usercache.service
enable_service envconfig.service
enable_service hwdb.service
enable_service cpufreq.service
enable_service network-base.service
enable_service systemd-timesyncd.service
enable_service systemd-timesyncd-setup.service
}