| # shellcheck disable=SC2128,SC2034 |
| # Copyright 2011-2022 Gentoo Authors |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| EAPI=7 |
| PYTHON_COMPAT=( python3_{6..7} ) |
| |
| # Avoid QA warnings |
| TMPFILES_OPTIONAL=1 |
| UDEV_OPTIONAL=1 |
| |
| QA_PKGCONFIG_VERSION=$(ver_cut 1) |
| |
| if [[ ${PV} == 9999 ]]; then |
| EGIT_REPO_URI="https://github.com/systemd/systemd.git" |
| inherit git-r3 |
| else |
| if [[ ${PV} == *.* ]]; then |
| MY_PN=systemd-stable |
| else |
| MY_PN=systemd |
| fi |
| MY_PV=${PV/_/-} |
| MY_P=${MY_PN}-${MY_PV} |
| S=${WORKDIR}/${MY_P} |
| SRC_URI="https://github.com/systemd/${MY_PN}/archive/v${MY_PV}/${MY_P}.tar.gz" |
| KEYWORDS="*" |
| fi |
| |
| inherit bash-completion-r1 flag-o-matic linux-info meson-multilib pam python-any-r1 systemd toolchain-funcs udev usr-ldscript user |
| |
| DESCRIPTION="System and service manager for Linux" |
| HOMEPAGE="http://systemd.io/" |
| |
| LICENSE="GPL-2 LGPL-2.1 MIT public-domain" |
| SLOT="0/2" |
| # lakitu: Added "doc" USE flag to conditionalize the installation of docs. |
| # lakitu: Disable zstd feature as journal files created with this feature are |
| # not supported by older version and it breaks stackdriver logging. |
| # lakitu: platform_gcp predictable-interface-name +networkd-wait-online are to control the network behavior |
| IUSE="acl apparmor audit build cgroup-hybrid cryptsetup curl +dns-over-tls doc elfutils fido2 +gcrypt gnuefi gnutls homed http +hwdb idn importd iptables +kmod +lz4 lzma +openssl pam pcre pkcs11 policykit pwquality qrcode +resolvconf +seccomp selinux split-usr +sysv-utils test tpm vanilla vtconsole xkb -zstd platform_gcp platform_azure platform_aws predictable-interface-name +networkd-wait-online disable-audit-socket" |
| |
| REQUIRED_USE=" |
| dns-over-tls? ( || ( gnutls openssl ) ) |
| homed? ( cryptsetup pam openssl ) |
| importd? ( curl lzma || ( gcrypt openssl ) ) |
| pwquality? ( homed ) |
| " |
| RESTRICT="!test? ( test )" |
| |
| MINKV="4.14" |
| |
| COMMON_DEPEND=" |
| >=sys-apps/util-linux-2.30:0=[${MULTILIB_USEDEP}] |
| sys-libs/libcap:0=[${MULTILIB_USEDEP}] |
| virtual/libcrypt:=[${MULTILIB_USEDEP}] |
| acl? ( sys-apps/acl:0= ) |
| apparmor? ( sys-libs/libapparmor:0= ) |
| audit? ( >=sys-process/audit-2:0= ) |
| cryptsetup? ( >=sys-fs/cryptsetup-2.0.1:0= ) |
| curl? ( net-misc/curl:0= ) |
| elfutils? ( >=dev-libs/elfutils-0.158:0= ) |
| fido2? ( dev-libs/libfido2:0= ) |
| gcrypt? ( >=dev-libs/libgcrypt-1.4.5:0=[${MULTILIB_USEDEP}] ) |
| gnutls? ( >=net-libs/gnutls-3.6.0:0= ) |
| http? ( >=net-libs/libmicrohttpd-0.9.33:0=[epoll(+)] ) |
| idn? ( net-dns/libidn2:= ) |
| importd? ( |
| app-arch/bzip2:0= |
| sys-libs/zlib:0= |
| ) |
| kmod? ( >=sys-apps/kmod-15:0= ) |
| lz4? ( >=app-arch/lz4-0_p131:0=[${MULTILIB_USEDEP}] ) |
| lzma? ( >=app-arch/xz-utils-5.0.5-r1:0=[${MULTILIB_USEDEP}] ) |
| iptables? ( net-firewall/iptables:0= ) |
| openssl? ( >=dev-libs/openssl-1.1.0:0= ) |
| pam? ( sys-libs/pam:=[${MULTILIB_USEDEP}] ) |
| pkcs11? ( app-crypt/p11-kit:0= ) |
| pcre? ( dev-libs/libpcre2 ) |
| pwquality? ( dev-libs/libpwquality:0= ) |
| qrcode? ( media-gfx/qrencode:0= ) |
| seccomp? ( >=sys-libs/libseccomp-2.3.3:0= ) |
| selinux? ( sys-libs/libselinux:0= ) |
| tpm? ( app-crypt/tpm2-tss:0= ) |
| xkb? ( >=x11-libs/libxkbcommon-0.4.1:0= ) |
| zstd? ( >=app-arch/zstd-1.4.0:0=[${MULTILIB_USEDEP}] ) |
| " |
| |
| # Newer linux-headers needed by ia64, bug #480218 |
| # lakitu: Added conditional doc dependency |
| DEPEND="${COMMON_DEPEND} |
| >=sys-kernel/linux-headers-${MINKV} |
| gnuefi? ( >=sys-boot/gnu-efi-3.0.2 ) |
| doc? ( |
| app-text/docbook-xml-dtd:4.2 |
| app-text/docbook-xml-dtd:4.5 |
| app-text/docbook-xsl-stylesheets |
| dev-libs/libxslt:0 |
| $(python_gen_any_dep 'dev-python/lxml[${PYTHON_USEDEP}]') |
| ) |
| " |
| |
| # lakitu: acct-group and acct-user are currently not available. |
| # >=acct-group/adm-0-r1 |
| # >=acct-group/wheel-0-r1 |
| # >=acct-group/kmem-0-r1 |
| # >=acct-group/tty-0-r1 |
| # >=acct-group/utmp-0-r1 |
| # >=acct-group/audio-0-r1 |
| # >=acct-group/cdrom-0-r1 |
| # >=acct-group/dialout-0-r1 |
| # >=acct-group/disk-0-r1 |
| # >=acct-group/input-0-r1 |
| # >=acct-group/kvm-0-r1 |
| # >=acct-group/lp-0-r1 |
| # >=acct-group/render-0-r1 |
| # acct-group/sgx |
| # >=acct-group/tape-0-r1 |
| # acct-group/users |
| # >=acct-group/video-0-r1 |
| # >=acct-group/systemd-journal-0-r1 |
| # >=acct-user/root-0-r1 |
| # acct-user/nobody |
| # >=acct-user/systemd-journal-remote-0-r1 |
| # >=acct-user/systemd-coredump-0-r1 |
| # >=acct-user/systemd-network-0-r1 |
| # acct-user/systemd-oom |
| # >=acct-user/systemd-resolve-0-r1 |
| # >=acct-user/systemd-timesync-0-r1 |
| # baselayout-2.2 has /run |
| RDEPEND="${COMMON_DEPEND} |
| >=sys-apps/baselayout-2.2 |
| selinux? ( |
| sec-policy/selinux-base-policy[systemd] |
| sec-policy/selinux-ntp |
| ) |
| sysv-utils? ( |
| !sys-apps/openrc[sysv-utils(-)] |
| !sys-apps/sysvinit |
| ) |
| !sysv-utils? ( sys-apps/sysvinit ) |
| resolvconf? ( !net-dns/openresolv ) |
| !build? ( || ( |
| sys-apps/util-linux[kill(-)] |
| sys-process/procps[kill(+)] |
| sys-apps/coreutils[kill(-)] |
| ) ) |
| !sys-auth/nss-myhostname |
| !sys-fs/eudev |
| !sys-fs/udev |
| " |
| |
| # sys-apps/dbus: the daemon only (+ build-time lib dep for tests) |
| # lakitu: The following PDEPENDs are present in Gentoo upstream but don't make sense for |
| # lakitu. |
| #>=sys-fs/udev-init-scripts-34 |
| PDEPEND=">=sys-apps/dbus-1.9.8[systemd] |
| hwdb? ( sys-apps/hwids[systemd(+),udev] ) |
| policykit? ( sys-auth/polkit ) |
| !vanilla? ( sys-apps/gentoo-systemd-integration )" |
| |
| BDEPEND=" |
| app-arch/xz-utils:0 |
| dev-util/gperf |
| >=dev-util/meson-0.46 |
| >=sys-apps/coreutils-8.16 |
| sys-devel/gettext |
| virtual/pkgconfig |
| test? ( |
| app-text/tree |
| dev-lang/perl |
| sys-apps/dbus |
| ) |
| app-text/docbook-xml-dtd:4.2 |
| app-text/docbook-xml-dtd:4.5 |
| app-text/docbook-xsl-stylesheets |
| dev-libs/libxslt:0 |
| $(python_gen_any_dep 'dev-python/jinja[${PYTHON_USEDEP}]') |
| $(python_gen_any_dep 'dev-python/lxml[${PYTHON_USEDEP}]') |
| " |
| |
| python_check_deps() { |
| has_version "dev-python/jinja[${PYTHON_USEDEP}]" && |
| has_version "dev-python/lxml[${PYTHON_USEDEP}]" |
| } |
| |
| QA_FLAGS_IGNORED="usr/lib/systemd/boot/efi/.*" |
| QA_EXECSTACK="usr/lib/systemd/boot/efi/*" |
| |
| pkg_pretend() { |
| if [[ ${MERGE_TYPE} != buildonly ]]; then |
| if use test && has pid-sandbox "${FEATURES}"; then |
| ewarn "Tests are known to fail with PID sandboxing enabled." |
| ewarn "See https://bugs.gentoo.org/674458." |
| fi |
| |
| local CONFIG_CHECK=" ~BINFMT_MISC ~BLK_DEV_BSG ~CGROUPS |
| ~CGROUP_BPF ~DEVTMPFS ~EPOLL ~FANOTIFY ~FHANDLE |
| ~INOTIFY_USER ~IPV6 ~NET ~NET_NS ~PROC_FS ~SIGNALFD ~SYSFS |
| ~TIMERFD ~TMPFS_XATTR ~UNIX ~USER_NS |
| ~CRYPTO_HMAC ~CRYPTO_SHA256 ~CRYPTO_USER_API_HASH |
| ~!GRKERNSEC_PROC ~!IDE ~!SYSFS_DEPRECATED |
| ~!SYSFS_DEPRECATED_V2" |
| |
| use acl && CONFIG_CHECK+=" ~TMPFS_POSIX_ACL" |
| use seccomp && CONFIG_CHECK+=" ~SECCOMP ~SECCOMP_FILTER" |
| |
| if kernel_is -ge 5 10 20; then |
| CONFIG_CHECK+=" ~KCMP" |
| else |
| CONFIG_CHECK+=" ~CHECKPOINT_RESTORE" |
| fi |
| |
| if kernel_is -ge 4 18; then |
| CONFIG_CHECK+=" ~AUTOFS_FS" |
| else |
| CONFIG_CHECK+=" ~AUTOFS4_FS" |
| fi |
| |
| if linux_config_exists; then |
| local uevent_helper_path=$(linux_chkconfig_string UEVENT_HELPER_PATH) |
| if [[ -n ${uevent_helper_path} ]] && [[ ${uevent_helper_path} != '""' ]]; then |
| ewarn "It's recommended to set an empty value to the following kernel config option:" |
| ewarn "CONFIG_UEVENT_HELPER_PATH=${uevent_helper_path}" |
| fi |
| if linux_chkconfig_present X86; then |
| CONFIG_CHECK+=" ~DMIID" |
| fi |
| fi |
| |
| if kernel_is -lt ${MINKV//./ }; then |
| ewarn "Kernel version at least ${MINKV} required" |
| fi |
| |
| check_extra_config |
| fi |
| } |
| |
| pkg_setup() { |
| : |
| } |
| |
| src_unpack() { |
| default |
| [[ ${PV} != 9999 ]] || git-r3_src_unpack |
| } |
| |
| src_prepare() { |
| local PATCHES=( |
| ) |
| |
| PATCHES+=( |
| "${FILESDIR}/228-noclean-tmp.patch" |
| # lakitu: lakitu specific patches |
| # CL:*250967 |
| "${FILESDIR}"/232-tmpfiles-no-srv.patch |
| # CL:*256679 |
| "${FILESDIR}"/225-Force-re-creation-of-etc-localtime-symlink.patch |
| # This prevents the kernel from logging all audit messages to |
| # both dmesg and audit log. b/29581598. |
| "${FILESDIR}"/225-audit-set-pid.patch |
| # Allow networkd => hostnamed communication w/o polkit. |
| "${FILESDIR}"/225-allow-networkd-to-hostnamed.patch |
| # Work around the 64 bit restriction of hostname length from |
| # kernel. b/27702816. |
| "${FILESDIR}"/232-single-label-hostname.patch |
| # init and reboot has to be in /sbin for kdump to work. |
| "${FILESDIR}"/239-change-paths-for-udev-rules-init-reboot.patch |
| # Boot into multi-user.target instead of graphical.target. |
| # Remove this patch once stackdriver logging agent is |
| # upgraded with latest systemd version. |
| "${FILESDIR}"/249-machine-id-setup-generate-machine-id-from-DMI-produc.patch |
| "${FILESDIR}"/249-udevd-return-enosys-for-filtered-syscall.patch |
| "${FILESDIR}"/249-networkd-customization.patch |
| # Run systemd-pstore to clean pstore after crash-boot-collect. |
| # So that the behavior of crash reporter won't be affected. |
| "${FILESDIR}"/252-run-systemd-pstore-after-crash-boot-collect.patch |
| # Set NETLINK_DEFAULT_TIMEOUT_USEC to 200s. |
| # If netlink timeout happens, watchdog will restart systemd-networkd. |
| # This patch can be removed if upstream has fixed the issue: |
| # https://github.com/systemd/systemd/issues/25441 |
| "${FILESDIR}"/253-systemd-networkd-set-timeout-to-trigger-watchdog.patch |
| # Revert commit 5d71e463f49518c7702467f6145484afa31bf8ba |
| # logind: implement Type=notify-reload protocol properly |
| # as a workaround to allow systemd-logind to restart itself |
| # upon restarting dbus b/306244969. |
| "${FILESDIR}"/253-systemd-logind-notify-reload-revert.patch |
| # Cherry-pick of upstream https://github.com/systemd/systemd/pull/28870. |
| # Can be removed after upgrade to >=255. b/309475558 |
| "${FILESDIR}"/253-network-route-allow-to-set-tcp-rto.patch |
| "${FILESDIR}"/253-ci-network-add-test-for-route-tcp-rto.patch |
| "${FILESDIR}"/253-network-several-follow-ups-for-tcp-rto-setting.patch |
| # Change not available upstream |
| "${FILESDIR}"/254-machine-id-setup-use-DMI-product-ID-on-GCE.patch |
| # CVE fixes |
| "${FILESDIR}"/CVE-2023-50387.patch |
| "${FILESDIR}"/CVE-2023-50868.patch |
| ) |
| |
| |
| # This patch ensures non link local IPv4 is acquired on eth0 before moving forward; |
| # On GCP, IPv4 address is required to access MDS. |
| if use platform_gcp; then |
| PATCHES+=( |
| "${FILESDIR}"/249-Ensure-systemd-networkd-wait-online-service-waits-for-ipv4-lakitu.patch |
| ) |
| else |
| PATCHES+=( |
| "${FILESDIR}"/248-networkd-wait-online-any-option.patch |
| ) |
| |
| fi |
| |
| |
| #if ! use vanilla; then |
| # PATCHES+=( |
| # "${FILESDIR}/gentoo-generator-path-r2.patch" |
| # "${FILESDIR}/gentoo-systemctl-disable-sysv-sync-r1.patch" |
| # "${FILESDIR}/gentoo-journald-audit.patch" |
| # ) |
| #fi |
| |
| # Fails with split-usr. |
| sed -i -e '2i exit 77' test/test-rpm-macros.sh || die |
| |
| default |
| } |
| |
| src_configure() { |
| # Prevent conflicts with i686 cross toolchain, bug 559726 |
| tc-export AR CC NM OBJCOPY RANLIB |
| |
| # Broken with FORTIFY_SOURCE=3 without a patch. We have to revert |
| # the upstream patch for it because it breaks Clang: bug #841770. |
| # |
| # Our toolchain sets F_S=2 by default w/ >= -O2, so we need |
| # to unset F_S first, then explicitly set 2, to negate any default |
| # and anything set by the user if they're choosing 3 (or if they've |
| # modified GCC to set 3). |
| # |
| if is-flagq '-O[23]' || is-flagq '-Ofast' ; then |
| # We can't unconditionally do this b/c we fortify needs |
| # some level of optimisation. |
| filter-flags -D_FORTIFY_SOURCE=3 |
| append-cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 |
| fi |
| |
| # lakitu: Need python setup only when doc USE flag is |
| # enabled |
| use doc && python_setup |
| |
| multilib-minimal_src_configure |
| } |
| |
| multilib_src_configure() { |
| local myconf=( |
| --localstatedir="${EPREFIX}/var" |
| -Dsupport-url="https://gentoo.org/support/" |
| -Dpamlibdir="$(getpam_mod_dir)" |
| # avoid bash-completion dep |
| -Dbashcompletiondir="$(get_bashcompdir)" |
| # lakitu: Do not want the "split-usr" USE flag |
| # as it uses rootprefix as "/" and lakitu currently |
| # uses "/usr" |
| # make sure we get /bin:/sbin in PATH |
| -Dsplit-usr=true |
| -Dsplit-bin=true |
| -Drootprefix="$(usex split-usr "${EPREFIX:-/}" "${EPREFIX}/usr")" |
| -Drootlibdir="${EPREFIX}/usr/$(get_libdir)" |
| # Avoid infinite exec recursion, bug 642724 |
| -Dtelinit-path="${EPREFIX}/lib/sysvinit/telinit" |
| # no deps |
| -Dima=true |
| -Ddefault-hierarchy=$(usex cgroup-hybrid hybrid unified) |
| # Optional components/dependencies |
| "$(meson_native_use_bool acl)" |
| "$(meson_native_use_bool apparmor)" |
| "$(meson_native_use_bool audit)" |
| "$(meson_native_use_bool cryptsetup libcryptsetup)" |
| "$(meson_native_use_bool curl libcurl)" |
| "$(meson_native_use_bool dns-over-tls dns-over-tls)" |
| "$(meson_native_use_bool elfutils)" |
| "$(meson_native_use_bool fido2 libfido2)" |
| "$(meson_use gcrypt)" |
| "$(meson_native_use_bool gnutls)" |
| "$(meson_native_use_bool homed)" |
| "$(meson_native_use_bool http microhttpd)" |
| "$(meson_native_use_bool idn)" |
| "$(meson_native_use_bool importd)" |
| "$(meson_native_use_bool importd bzip2)" |
| "$(meson_native_use_bool importd zlib)" |
| "$(meson_native_use_bool kmod)" |
| "$(meson_use lz4)" |
| "$(meson_use lzma xz)" |
| "$(meson_use zstd)" |
| "$(meson_native_use_bool iptables libiptc)" |
| "$(meson_native_use_bool openssl)" |
| "$(meson_use pam)" |
| "$(meson_native_use_bool pkcs11 p11kit)" |
| "$(meson_native_use_bool pcre pcre2)" |
| "$(meson_native_use_bool policykit polkit)" |
| "$(meson_native_use_bool pwquality)" |
| "$(meson_native_use_bool qrcode qrencode)" |
| "$(meson_native_use_bool seccomp)" |
| "$(meson_native_use_bool selinux)" |
| "$(meson_native_use_bool tpm tpm2)" |
| "$(meson_native_use_bool test dbus)" |
| "$(meson_native_use_bool xkb xkbcommon)" |
| # lakitu: specifying dbus policy dir path |
| -Ddbuspolicydir="${EPREFIX}/etc/dbus-1/system.d" |
| -Dntp-servers="0.gentoo.pool.ntp.org 1.gentoo.pool.ntp.org 2.gentoo.pool.ntp.org 3.gentoo.pool.ntp.org" |
| # Breaks screen, tmux, etc. |
| -Ddefault-kill-user-processes=false |
| -Dcreate-log-dirs=false |
| |
| # multilib options |
| "$(meson_native_true binfmt)" |
| "$(meson_native_true coredump)" |
| "$(meson_native_true hostnamed)" |
| "$(meson_native_true networkd)" |
| "$(meson_native_true timedated)" |
| "$(meson_native_true tmpfiles)" |
| ) |
| |
| # lakitu: lakitu specific enabled features |
| myconf+=( |
| -Dbinfmt=true |
| -Dcoredump=true |
| -Dhostnamed=true |
| -Dnetworkd=true |
| -Dutmp=true |
| -Dtimedated=true |
| -Dtmpfiles=true |
| ) |
| |
| # lakitu: disable all features not used and not disabled by USE flags. |
| # multilib options |
| myconf+=( |
| -Dbacklight=false |
| -Defi=false |
| -Denvironment-d=false |
| -Dfirstboot=false |
| -Dhibernate=false |
| -Dhwdb=false |
| -Dldconfig=false |
| -Dlocaled=false |
| -Dmachined=false |
| -Dman=false |
| -Dquotacheck=false |
| -Drandomseed=false |
| -Drfkill=false |
| -Dsysusers=false |
| -Dtimesyncd=false |
| -Dvconsole=false |
| -Dbump-proc-sys-fs-file-max=false |
| -Dbump-proc-sys-fs-nr-open=false |
| -Ddefault-mdns=no |
| -Ddefault-llmnr=no |
| ) |
| |
| meson_src_configure "${myconf[@]}" |
| } |
| |
| multilib_src_test() { |
| unset DBUS_SESSION_BUS_ADDRESS XDG_RUNTIME_DIR |
| meson_src_test |
| } |
| |
| # lakitu: lakitu specific src_install customizations. |
| lakitu_src_install() { |
| dosym /usr/bin/udevadm sbin/udevadm |
| dosym /usr/lib/systemd/systemd-udevd sbin/udevd |
| dosym /run/systemd/resolve/resolv.conf etc/resolv.conf |
| dosym /usr/lib/systemd/system/multi-user.target usr/lib/systemd/system/default.target |
| |
| # Disable all sysctl settings. In ChromeOS sysctl.conf is |
| # provided by chromeos-base. |
| rm "${D}"/usr/lib/sysctl.d/* |
| |
| # Install our systemd-preset file. |
| insinto /usr/lib/systemd/system-preset |
| rm -f "${D}"/usr/lib/systemd/system-preset/* |
| doins "${FILESDIR}"/00-lakitu.preset |
| |
| # Enable getty on tty1 if VT console is enabled as it is not |
| # enabled by default post v242. |
| if use vtconsole; then |
| systemd_enable_service getty.target getty@tty1.service |
| fi |
| |
| # Install network files. |
| insinto /usr/lib/systemd/network |
| doins "${FILESDIR}"/99-default.network |
| |
| if use platform_azure; then |
| doins "${FILESDIR}"/zz-azure-default.network |
| elif use platform_aws; then |
| doins "${FILESDIR}"/zz-aws-default.network |
| else |
| doins "${FILESDIR}"/zz-default.network |
| fi |
| |
| if use platform_gcp; then |
| doins "${FILESDIR}"/98-gcp-non-primary.network |
| fi |
| |
| # Disable managing foreign routes and routing rules via systemd. |
| insinto /usr/lib/systemd/networkd.conf.d |
| doins "${FILESDIR}"/networkd/10-disable-route-mgmt.conf |
| |
| if ! use predictable-interface-name; then |
| # Turn off Predictable Network Interface Names to minimize the |
| # upgrade side-effects. |
| # https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ |
| dosym /dev/null /etc/systemd/network/99-default.link |
| fi |
| |
| # Install modprobe.d files. |
| insinto /etc/modprobe.d |
| doins modprobe.d/systemd.conf |
| |
| # Enable accounting for all supported controllers (CPU, Memory and Block) |
| sed -i 's/#DefaultCPUAccounting=no/DefaultCPUAccounting=yes/' "${ED}"/etc/systemd/system.conf |
| sed -i 's/#DefaultBlockIOAccounting=no/DefaultBlockIOAccounting=yes/' "${ED}"/etc/systemd/system.conf |
| sed -i 's/#DefaultMemoryAccounting=no/DefaultMemoryAccounting=yes/' "${ED}"/etc/systemd/system.conf |
| |
| # Set default log rotation policy: 100M for each journal; 1G total. |
| sed -i 's/#SystemMaxUse=/SystemMaxUse=1G/' "${ED}"/etc/systemd/journald.conf |
| sed -i 's/#SystemMaxFileSize=/SystemMaxFileSize=100M/' "${ED}"/etc/systemd/journald.conf |
| |
| # Enable persistent storage for the journal |
| sed -i 's/#Storage=auto/Storage=persistent/' "${ED}"/etc/systemd/journald.conf |
| |
| # Enale default multi-user.target services as all services are |
| # by default disabled. |
| systemd_enable_service multi-user.target dbus-org.freedesktop.network1.service |
| systemd_enable_service multi-user.target dbus-org.freedesktop.resolve1.service |
| systemd_enable_service multi-user.target systemd-networkd.service |
| systemd_enable_service multi-user.target systemd-resolved.service |
| systemd_enable_service multi-user.target remote-fs.target |
| |
| if ! use disable-audit-socket; then |
| systemd_enable_service sockets.target systemd-journald-audit.socket |
| fi |
| |
| if use networkd-wait-online; then |
| systemd_enable_service network-online.target systemd-networkd-wait-online.service |
| fi |
| |
| # Run systemd-pstore to clean pstore when cos metrics are not enabled. |
| systemd_enable_service multi-user.target systemd-pstore.service |
| } |
| |
| |
| multilib_src_install_all() { |
| local rootprefix=$(usex split-usr '' /usr) |
| |
| |
| # meson doesn't know about docdir |
| mv "${ED}"/usr/share/doc/{systemd,${PF}} || die |
| |
| use doc && einstalldocs |
| # lakitu: Do not use nsswitch.conf |
| #dodoc "${FILESDIR}"/nsswitch.conf |
| |
| if ! use resolvconf; then |
| rm -f "${ED}${rootprefix}"/sbin/resolvconf || die |
| fi |
| |
| rm "${ED}"/etc/init.d/README || die |
| rm "${ED}${rootprefix}"/lib/systemd/system-generators/systemd-sysv-generator || die |
| |
| if ! use sysv-utils; then |
| rm "${ED}${rootprefix}/"sbin/{halt,init,poweroff,reboot,runlevel,shutdown,telinit} || die |
| rm "${ED}"/usr/share/man/man1/init.1 || die |
| rm "${ED}"/usr/share/man/man8/{halt,poweroff,reboot,runlevel,shutdown,telinit}.8 || die |
| fi |
| |
| if ! use resolvconf && ! use sysv-utils; then |
| rmdir "${ED}${rootprefix}"/sbin || die |
| fi |
| |
| # https://bugs.gentoo.org/761763 |
| # lakitu: File is not availble. |
| #rm -r "${ED}"/usr/lib/sysusers.d || die |
| |
| # Preserve empty dirs in /etc & /var, bug #437008 |
| keepdir /etc/{binfmt.d,modules-load.d,tmpfiles.d} |
| keepdir /etc/kernel/install.d |
| keepdir /etc/systemd/{network,system,user} |
| keepdir /etc/udev/rules.d |
| |
| if use hwdb; then |
| keepdir /etc/udev/hwdb.d |
| fi |
| |
| keepdir "${rootprefix}"/lib/systemd/{system-sleep,system-shutdown} |
| keepdir /usr/lib/{binfmt.d,modules-load.d} |
| keepdir /usr/lib/systemd/user-generators |
| keepdir /var/lib/systemd |
| keepdir /var/log/journal |
| |
| # lakitu: Comment out this symlink since Lakitu board depends |
| # on /etc/sysctl.d/00-sysctl.conf, and this is a broken link. |
| # After our recent reflactoring, we can use 99-sysctl.conf in |
| # the board only so that the board derivied from project-lakitu |
| # can override the settings using board specific ones. |
| # Symlink /etc/sysctl.conf for easy migration. |
| #dosym ../../../etc/sysctl.conf /usr/lib/sysctl.d/99-sysctl.conf |
| |
| if use pam; then |
| newpamd "${FILESDIR}"/systemd-user.pam systemd-user |
| fi |
| |
| # lakitu: lakitu specific |
| lakitu_src_install |
| |
| # lakitu: Don't remove as these are present in systemd-232 |
| #if use hwdb; then |
| # rm -r "${ED}${rootprefix}"/lib/udev/hwdb.d || die |
| #fi |
| |
| if use split-usr; then |
| # Avoid breaking boot/reboot |
| dosym ../../../lib/systemd/systemd /usr/lib/systemd/systemd |
| dosym ../../../lib/systemd/systemd-shutdown /usr/lib/systemd/systemd-shutdown |
| fi |
| |
| gen_usr_ldscript -a systemd udev |
| } |
| |
| migrate_locale() { |
| local envd_locale_def="${EROOT}/etc/env.d/02locale" |
| local envd_locale=( "${EROOT}"/etc/env.d/??locale ) |
| local locale_conf="${EROOT}/etc/locale.conf" |
| |
| if [[ ! -L ${locale_conf} && ! -e ${locale_conf} ]]; then |
| # If locale.conf does not exist... |
| if [[ -e ${envd_locale} ]]; then |
| # ...either copy env.d/??locale if there's one |
| ebegin "Moving ${envd_locale} to ${locale_conf}" |
| mv "${envd_locale}" "${locale_conf}" |
| eend ${?} || FAIL=1 |
| else |
| # ...or create an empty default |
| ebegin "Creating ${locale_conf}" |
| cat > "${locale_conf}" <<-EOF |
| # This file has been created by the sys-apps/systemd ebuild. |
| # See locale.conf(5) and localectl(1). |
| |
| # LANG=${LANG} |
| EOF |
| eend ${?} || FAIL=1 |
| fi |
| fi |
| |
| if [[ ! -L ${envd_locale} ]]; then |
| # now, if env.d/??locale is not a symlink (to locale.conf)... |
| if [[ -e "${envd_locale}" ]]; then |
| # ...warn the user that he has duplicate locale settings |
| ewarn |
| ewarn "To ensure consistent behavior, you should replace ${envd_locale}" |
| ewarn "with a symlink to ${locale_conf}. Please migrate your settings" |
| ewarn "and create the symlink with the following command:" |
| ewarn "ln -s -n -f ../locale.conf ${envd_locale}" |
| ewarn |
| else |
| # ...or just create the symlink if there's nothing here |
| ebegin "Creating ${envd_locale_def} -> ../locale.conf symlink" |
| ln -n -s ../locale.conf "${envd_locale_def}" |
| eend ${?} || FAIL=1 |
| fi |
| fi |
| } |
| |
| pkg_preinst() { |
| if ! use split-usr; then |
| local dir |
| for dir in bin sbin lib; do |
| if [[ ! ${EROOT}/${dir} -ef ${EROOT}/usr/${dir} ]]; then |
| eerror "\"${EROOT}/${dir}\" and \"${EROOT}/usr/${dir}\" are not merged." |
| eerror "One of them should be a symbolic link to the other one." |
| FAIL=1 |
| fi |
| done |
| if [[ -n ${FAIL} ]]; then |
| eerror "Migration to system layout with merged directories must be performed before" |
| eerror "rebuilding ${CATEGORY}/${PN} with USE=\"-split-usr\" to avoid run-time breakage." |
| #lakitu: split-usr is not enabled, but still showing the error and quits. |
| #die "System layout with split directories still used" |
| fi |
| fi |
| } |
| |
| pkg_postinst() { |
| newusergroup() { |
| enewgroup "$1" |
| enewuser "$1" -1 -1 -1 "$1" |
| } |
| |
| enewgroup input |
| enewgroup systemd-journal |
| enewgroup render |
| enewgroup sgx |
| enewgroup kvm |
| enewgroup dialout |
| newusergroup systemd-network |
| newusergroup systemd-resolve |
| newusergroup systemd-timesync |
| |
| systemd_update_catalog |
| |
| # Keep this here in case the database format changes so it gets updated |
| # when required. |
| if use hwdb; then |
| systemd-hwdb --root="${ROOT}" update |
| fi |
| |
| |
| udev_reload || FAIL=1 |
| |
| # Bug 465468, make sure locales are respected, and ensure consistency |
| # between OpenRC & systemd |
| migrate_locale |
| |
| if [[ -z ${REPLACING_VERSIONS} ]]; then |
| if type systemctl &>/dev/null; then |
| systemctl --root="${ROOT:-/}" enable getty@.service remote-fs.target || FAIL=1 |
| fi |
| elog "To enable a useful set of services, run the following:" |
| elog " systemctl preset-all --preset-mode=enable-only" |
| fi |
| |
| if [[ -L ${EROOT}/var/lib/systemd/timesync ]]; then |
| rm "${EROOT}/var/lib/systemd/timesync" |
| fi |
| |
| if [[ -n ${FAIL} ]]; then |
| eerror "One of the postinst commands failed. Please check the postinst output" |
| eerror "for errors. You may need to clean up your system and/or try installing" |
| eerror "systemd again." |
| eerror |
| fi |
| } |
| |
| pkg_prerm() { |
| # If removing systemd completely, remove the catalog database. |
| if [[ -n ${REPLACED_BY_VERSION} ]]; then |
| rm -f -v "${EROOT}"/var/lib/systemd/catalog/database |
| fi |
| } |