# $Id$ PNAME="systemd" PVER="238" PBUILD="r3" # 1=enable dev split packages # 0=disable dev split packages ENABLE_DEV_PACKAGES="0" SPLIT_PACKAGES="libsystemd-shared systemd-systemctl libudev udev nss-myhostname libsystemd systemd-coredump systemd systemd-tools" # dev packages if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then SPLIT_PACKAGES+=" libudev-dev udev-dev nss-myhostname-dev systemd-dev" fi PCAT="sys-apps" HOMEPAGE="http://www.freedesktop.org/wiki/Software/systemd" # enable or disable sysvinit support # 1=yes, 0=no SYSVINIT_SUPPORT=0 # enable or disable busybox support # 1=yes, 0=no BUSYBOX_SUPPORT=0 # disable gtk until build with libgee is fixed # 1=yes, 0=no ENABLE_GTK=1 # export this variables for preinstall SPECIAL_VARS="SYSVINIT_SUPPORT BUSYBOX_SUPPORT" # and this functions too SPECIAL_FUNCTIONS="pkg_setup" GLIB2_DEPEND=">= dev-libs/glib2-2.56" GLIBC_DEPEND=">= virtual/glibc" LIBGCC_DEPEND=">= sys-libs/libgcc-7.3" XZ_DEPEND=">= virtual/xz-utils" LIBGCRYPT_DEPEND=">= app-crypt/libgcrypt-1.8" LIBGPGERROR_DEPEND=">= app-crypt/libgpg-error-1.31" LIBNOTIFY_DEPEND=">= x11-libs/libnotify-0.7" LIBGEE_DEPEND=">= dev-libs/libgee-0.20" LIBCAP_DEPEND=">= sys-libs/libcap-2.25" ELFUTILS_DEPEND=">= dev-libs/elfutils-libs-0.170" LIBBLKID_DEPEND=">= sys-libs/libblkid-2.32" LIBIDN_DEPEND=">= net-dns/libidn-1.35" COMMON_DEPEND="${GLIBC_DEPEND} ${LIBGCC_DEPEND} ${LIBCAP_DEPEND}" DAEMON_DEPEND="${COMMON_DEPEND} ${GLIB2_DEPEND} >= sys-apps/acl-2.2 >= virtual/procps >= sys-apps/util-linux-2.32 >= sys-apps/kmod-25" COREDUMP_DEPEND="${COMMON_DEPEND} ${LIBGCRYPT_DEPEND} ${LIBGPGERROR_DEPEND} ${ELFUTILS_DEPEND}" SYSTEMCTL_DEPEND="${COMMON_DEPEND} ${LIBIDN_DEPEND}" LIBUDEV_DEPEND="${COMMON_DEPEND}" NSS_DEPEND="${COMMON_DEPEND} ${LIBGCRYPT_DEPEND} ${LIBGPGERROR_DEPEND}" LIBSYSTEMD_DEPEND="${COMMON_DEPEND} ${LIBGCRYPT_DEPEND} ${LIBGPGERROR_DEPEND} ${XZ_DEPEND}" LIBSYSTEMD_SHARED_DEPEND="${COMMON_DEPEND} ${LIBGCRYPT_DEPEND} ${LIBBLKID_DEPEND}" # only /etc/os-release is supported from now on SYSTEMD_DEPEND="${DAEMON_DEPEND} ${XZ_DEPEND} ${LIBGCRYPT_DEPEND} ${LIBGPGERROR_DEPEND} ${LIBIDN_DEPEND} >= sys-apps/mage-release-1 >= sys-apps/dbus-1.10 >= sys-fs/cryptsetup-2.0 >= dev-libs/dbus-glib-0.110 >= net-libs/libcurl-7.60 >= sys-libs/pam-1.3 >= sys-apps/shadow-4.2" TOOLS_DEPEND=">= dev-python/python3-dbus-1.2 >= sys-apps/polkit-0.114" UDEV_DEPEND="${DAEMON_DEPEND} >= dev-libs/libusb-compat-0.1.4 >= virtual/usbutils >= virtual/pciutils >= sys-libs/libuuid-2.32 >= sys-fs/libgudev-232" PYTHON_DEPEND=">= dev-lang/python3-3.6 >= dev-python/python3-lxml-4.1" if [[ ${ENABLE_GTK} = 1 ]] then TOOLS_DEPEND="${TOOLS_DEPEND} >= x11-libs/gtk3+-3.22 ${LIBGEE_DEPEND} ${LIBNOTIFY_DEPEND}" fi # busybox supports requires sysvinit support if [[ ${BUSYBOX_SUPPORT} = 1 ]] then [[ ${SYSVINIT_SUPPORT} != 1 ]] && SYSVINIT_SUPPORT=1 fi if [[ ${SYSVINIT_SUPPORT} = 1 ]] then SYSTEMD_DEPEND="${SYSTEMD_DEPEND} >= sys-apps/sysvinit-2.88" fi SDEPEND="${LIBUDEV_DEPEND} ${NSS_DEPEND} ${LIBSYSTEMD_DEPEND} ${LIBSYSTEMD_SHARED_DEPEND} ${SYSTEMCTL_DEPEND} ${SYSTEMD_DEPEND} ${TOOLS_DEPEND} ${UDEV_DEPEND} ${PYTHON_DEPEND} ${COREDUMP_DEPEND} >= app-text/docbook-xsl-stylesheets-1.76 >= app-text/docbook-xml-dtd42-4.2 >= app-text/docbook-xml-dtd45-4.5 >= dev-libs/libcgroup-0.41 >= dev-libs/libxslt-1.1.32 >= dev-lang/vala-0.40 >= dev-util/intltool-0.51 >= dev-util/gperf-3.1 >= virtual/kernel-headers" SRCFILE="v${PVER}.tar.gz" SRCDIR="${BUILDDIR}/${PNAME}-${PVER}" UDEV_CONFIG_PVER="20151110-1" UDEV_CONFIG_SRCFILE="config-udev-${UDEV_CONFIG_PVER}.tar.bz2" UDEV_CONFIG_SRCDIR="${BUILDDIR}/config-udev-${UDEV_CONFIG_PVER}" if [[ ${ENABLE_GTK} = 1 ]] then UI_PVER="3" UI_SRCFILE="${PNAME}-ui-${UI_PVER}.tar.xz" UI_SRCDIR="${BUILDDIR}/${PNAME}-ui-${UI_PVER}" fi sminclude multilib python3 mtools meson cleanutils udev msetfeature "!check" SRC_URI=( https://github.com/${PNAME}/${PNAME}/archive/${SRCFILE} mirror://${PNAME}/${SRCFILE} mirror://udev/${UDEV_CONFIG_SRCFILE} mirror://${PNAME}/${PNAME}-238-magellan-configurable-getty.patch mirror://${PNAME}/${PNAME}-236-uucp-group.patch mirror://${PNAME}/${PNAME}-233-systemd-user-pam.patch mirror://${PNAME}/${PNAME}-235-generator-path.patch mirror://${PNAME}/${PNAME}-238-fix-util-linux-2.32-header-issues.patch mirror://${PNAME}/login-manager.pamd mirror://${PNAME}/systemd-user.pamd ) if [[ ${ENABLE_GTK} = 1 ]] then SRC_URI+=( http://www.freedesktop.org/software/${PNAME}/${UI_SRCFILE} ) fi UP2SEPERATOR="v" UP2DATE="updatecmd https://github.com/systemd/systemd/releases | highesttarball gz" split_info_libudev() { DESCRIPTION="Dynamic library to access udev device information." DEPEND="${LIBUDEV_DEPEND}" PCAT="sys-fs" } split_info_libudev-dev() { DESCRIPTION="Development files for libudev." DEPEND=">= sys-fs/libudev-${PVER}" PCAT="sys-fs" } split_info_udev() { DESCRIPTION="A Userspace Implementation for dynamic /dev nodes." DEPEND="${UDEV_DEPEND} == sys-fs/libudev-${PVER} == sys-libs/libsystemd-shared-${PVER} == sys-apps/systemd-systemctl-${PVER}" PCAT="sys-fs" } split_info_udev-dev() { DESCRIPTION="Development files for udev." DEPEND=">= sys-fs/udev-${PVER}" PCAT="sys-fs" } split_info_nss-myhostname() { DESCRIPTION="glibc plugin for local system host name resolution." DEPEND="${NSS_DEPEND}" PCAT="net-dns" } split_info_nss-myhostname-dev() { DESCRIPTION="Development files for nss-myhostname." DEPEND=">= net-dns/nss-myhostname-${PVER}" PCAT="net-dns" } split_info_libsystemd() { DESCRIPTION="systemd library." DEPEND="${LIBSYSTEMD_DEPEND}" PCAT="sys-libs" } split_info_libsystemd-shared() { DESCRIPTION="systemd shared helper library." DEPEND="${LIBSYSTEMD_SHARED_DEPEND}" PCAT="sys-libs" } split_info_systemd-systemctl() { DESCRIPTION="systemd services control utility." DEPEND="${SYSTEMCTL_DEPEND} == sys-libs/libsystemd-shared-${PVER}" } split_info_systemd-coredump() { DESCRIPTION="systemd coredump utility." DEPEND="${COREDUMP_DEPEND} == sys-libs/libsystemd-shared-${PVER}" } split_info_systemd() { DESCRIPTION="System and Session Manager." DEPEND="${SYSTEMD_DEPEND} == sys-libs/libsystemd-${PVER} == sys-libs/libsystemd-shared-${PVER} == net-dns/nss-myhostname-${PVER} == sys-apps/systemd-coredump-${PVER} == sys-apps/systemd-systemctl-${PVER} == sys-fs/udev-${PVER}" # systemd >=195 provides now full syslog facilities PROVIDE="virtual/syslog" } split_info_systemd-dev() { DESCRIPTION="Development files for systemd." DEPEND="== sys-fs/libudev-dev-${PVER} == net-dns/nss-myhostname-dev-${PVER} == sys-fs/udev-dev-${PVER} >= sys-apps/systemd-dev-${PVER}" } split_info_systemd-tools() { local gtkdesc [[ ${ENABLE_GTK} = 1 ]] && gtkdesc="for gtk3/gnome and " DESCRIPTION="Systemd utilites ${gtkdesc}for analysing the boot process." DEPEND="== sys-apps/systemd-${PVER} == sys-libs/libsystemd-shared-${PVER} ${TOOLS_DEPEND}" } pkg_setup() { # adding lock group mgroupadd -o "-g 54" lock # adding journal group/users mgroupadd -o "-g 190" systemd-journal mgroupadd -o "-g 191" systemd-journal-gateway museradd -o "-u 191 -g systemd-journal-gateway -d /var/log/journal -s /bin/false" systemd-journal-gateway mgroupadd -o "-g 196" systemd-journal-remote museradd -o "-u 196 -g systemd-journal-remote -d /var/log/journal/remote -s /bin/false" systemd-journal-remote mgroupadd -o "-g 197" systemd-journal-upload museradd -o "-u 197 -g systemd-journal-upload -d /var/log/journal/upload -s /bin/false" systemd-journal-upload # adding other systemd group/users mgroupadd -o "-g 192" systemd-timesync museradd -o "-u 192 -g systemd-timesync -l -d / -s /bin/false" systemd-timesync mgroupadd -o "-g 193" systemd-network museradd -o "-u 193 -g systemd-network -l -d / -s /bin/false" systemd-network mgroupadd -o "-g 194" systemd-resolve museradd -o "-u 194 -g systemd-resolve -l -d / -s /bin/false" systemd-resolve mgroupadd -o "-g 195" systemd-bus-proxy museradd -o "-u 195 -g systemd-bus-proxy -l -d / -s /bin/false" systemd-bus-proxy } src_prepare() { munpack ${SRCFILE} || die oldmunpack ${UDEV_CONFIG_SRCFILE} || die if [[ ${ENABLE_GTK} = 1 ]] then SRCDIR="${UI_SRCDIR}" munpack ${UI_SRCFILE} || die fi # upstream: fix issues with util-linux-2.32 headers mpatch ${PNAME}-238-fix-util-linux-2.32-header-issues.patch || die # magellan-only: use a configurable getty mpatch ${PNAME}-238-magellan-configurable-getty.patch || die # replace dialout group with uucp for ttys mpatch ${PNAME}-236-uucp-group.patch || die # honor pam system-auth mpatch ${PNAME}-233-systemd-user-pam.patch || die # look in /usr/lib and /lib for systemd generators mpatch ${PNAME}-235-generator-path.patch || die # fix rootlink install location sed -i "s:^\(udevdir=\).*:\1/usr/lib/udev:" ${UDEV_CONFIG_SRCDIR}/Makefile || die } src_compile() { local myconf meson_setup_builddir || die # fixes build errors, enforce utf-8 export LC_ALL=en_US.UTF-8 # disable dnssec myconf+=" $(meson_opt default-dnssec no)" # disable kill user processes as this will prevent screen and tmux from working correctly # see: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=825394 # https://bugs.freedesktop.org/show_bug.cgi?id=94508 # https://bbs.archlinux.org/viewtopic.php?id=204307 # https://github.com/systemd/systemd/issues/2900 myconf+=" $(meson_opt kill-user-processes false)" # no rpm macros myconf+=" $(meson_opt rpmmacrosdir no)" meson_configure \ --libexecdir=/usr/lib \ --localstatedir=/var \ $(meson_opt pamlibdir /usr/'$(mlibdir)'/security) \ $(meson_opt ima false) \ $(meson_opt audit false) \ $(meson_opt selinux false) \ $(meson_opt qrencode false) \ $(meson_opt pam true) \ $(meson_opt xz true) \ $(meson_opt acl true) \ $(meson_opt libcryptsetup true) \ $(meson_opt sysvinit-path /etc/rc.d/init.d) \ $(meson_opt sysvrcnd-path /etc/rc.d) \ $(meson_opt loadkeys-path /usr/bin/loadkeys) \ $(meson_opt setfont-path /usr/bin/setfont) \ $(meson_opt tty-gid 4) \ $(meson_opt sysusers true) \ ${myconf} \ || die mninja || die if [[ ${ENABLE_GTK} = 1 ]] then SRCDIR="${UI_SRCDIR}" mconfigure || die SRCDIR="${UI_SRCDIR}" mmake || die fi } src_install_systemd() { DESTDIR=${BINDIR} mninja install || die # keep some directories mkeepdir /run || die mkeepdir /etc/modules-load.d || die mkeepdir /etc/sysctl.d || die mkeepdir /etc/tmpfiles.d || die mkeepdir /etc/binfmt.d || die # make sure the shutdown/sleep drop-in dirs exist mkeepdir /usr/lib/systemd/system-shutdown || die mkeepdir /usr/lib/systemd/system-sleep || die # make sure the NTP units dir exists mkeepdir /usr/lib/systemd/ntp-units.d || die # make sure directories in /var exist mkeepdir /var/lib/systemd/coredump || die mkeepdir /var/lib/systemd/catalog || die mkeepdir /var/lib/systemd/backlight || die mkeepdir /var/lib/systemd/rfkill || die mkeepdir /var/log/journal || die if [[ ${SYSVINIT_SUPPORT} != 1 ]] then echo "Include SysV init Compat symlinks" # create SysV compatibility symlinks. systemctl/systemd are smart # enough to detect in which way they are called. minstalldir /usr/sbin || die mlink ../lib/systemd/systemd /usr/sbin/init || die local i for i in reboot halt poweroff shutdown telinit runlevel do mlink ../bin/systemctl /usr/sbin/${i} || die done else echo "Using sysvinit package for SysV compat" fi # we create all wants links manually at installation time to make sure # they are not owned and hence overriden by mage after the user deleted # them. rm -r ${BINDIR}/etc/systemd/system/*.target.wants || die # but make sure these directories are properly owned mkeepdir /usr/lib/systemd/system/basic.target.wants || die mkeepdir /usr/lib/systemd/system/default.target.wants || die mkeepdir /usr/lib/systemd/system/dbus.target.wants || die mkeepdir /usr/lib/systemd/system/syslog.target.wants || die # make sure the user generators dir exists too mkeepdir /usr/lib/systemd/user-generators || die mkeepdir /usr/lib/systemd/system-generators || die # login-manager pam policy - force register kdm, gdm etc with pam_systemd minstallpam login-manager.pamd login-manager || die minstallpam systemd-user.pamd systemd-user || die # we have no rpm, remove config macros #mdelete -r /etc/rpm || die minstalldocs DISTRO_PORTING LICENSE README TODO || die # remove files which are owned by other packages mdelete /etc/systemd/coredump.conf || die mdelete /usr/bin/coredumpctl || die mdelete /usr/bin/systemctl || die mdelete /usr/bin/systemd-analyze || die mdelete /usr/bin/kernel-install || die mdelete -r /etc/udev || die mdelete /usr/bin/udevadm || die mdelete /usr/include/libudev.h || die mdelete /usr/lib/sysctl.d/50-coredump.conf || die mdelete /usr/lib/systemd/systemd-coredump || die mdelete /usr/lib/systemd/systemd-udevd || die mdelete /usr/lib/systemd/system/systemd-udevd-control.socket || die mdelete /usr/lib/systemd/system/systemd-udevd-kernel.socket || die mdelete /usr/lib/systemd/system/systemd-udevd.service || die mdelete /usr/lib/systemd/system/systemd-udev-settle.service || die mdelete /usr/lib/systemd/system/systemd-udev-trigger.service || die mdelete /usr/lib/systemd/libsystemd-shared-\*.so || die mdelete -r /usr/lib/udev || die mdelete /usr/$(mlibdir)/libudev\* || die mdelete /usr/$(mlibdir)/libnss_myhostname\* || die mdelete /usr/$(mlibdir)/libsystemd.\* || die mdelete /usr/$(mlibdir)/pkgconfig/libudev.pc || die if [[ $(mlibdir) != lib ]] then mdelete /usr/lib/libudev\* || die mdelete /usr/lib/libnss_myhostname\* || die mdelete /usr/lib/libsystemd.\* || die mdelete /usr/lib/pkgconfig/libudev.pc || die fi mdelete /usr/share/man/man1/coredumpctl.1 || die mdelete /usr/share/man/man1/systemctl.1 || die mdelete /usr/share/man/man5/coredump.conf.5 || die mdelete /usr/share/man/man5/coredump.conf.d.5 || die mdelete /usr/share/man/man8/systemd-coredump.8 || die mdelete /usr/share/man/man7/udev.7 || die mdelete /usr/share/man/man8/systemd-udevd.8 || die mdelete /usr/share/man/man8/udevadm.8 || die mdelete /usr/share/man/man8/nss-myhostname.8 || die mdelete /usr/share/pkgconfig/udev.pc || die # install udev rule for systemd all-abis minstalludevrule ${BUILDDIR}/build-$(mabi)/rules/99-systemd.rules || die # ghost own runtime generated config files minstalldir /etc/X11/xorg.conf.d || die memptyfile /etc/X11/xorg.conf.d/00-keyboard.conf || die memptyfile /etc/machine-id || die memptyfile /etc/machine-info || die # and set CONFIG_PROTECT_MASK for them minstalldir /etc/env.d || die MCONFIG=/etc/env.d/02systemd mclearconfig || die maddconfig 'CONFIG_PROTECT_IGNORE="/etc/machine-id /etc/machine-info /etc/X11/xorg.conf.d/00-keyboard.conf"' || die if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then mdelete -r /usr/include || die mdelete -r /usr/share/bash-completion || die mdelete -r /usr/share/doc || die mdelete -r /usr/share/man || die mdelete -r /usr/share/pkgconfig || die mdelete -r /usr/share/zsh || die #mdelete -r /usr/$(mlibdir)/rpm || die mdelete -r /usr/$(mlibdir)/pkgconfig || die if [[ $(mlibdir) != lib ]] then #mdelete -r /usr/$(mlibdir)/rpm || die mdelete -r /usr/$(mlibdir)/pkgconfig || die fi fi } src_install_systemd-dev() { DESTDIR=${BINDIR} mninja install || die minstalldocs DISTRO_PORTING LICENSE README TODO || die # remove files which are owned by other packages mdelete /usr/include/libudev.h || die mdelete /usr/$(mlibdir)/pkgconfig/libudev.pc || die if [[ $(mlibdir) != lib ]] then mdelete /usr/lib/pkgconfig/libudev.pc || die fi mdelete /usr/share/man/man1/coredumpctl.1 || die mdelete /usr/share/man/man5/coredump.conf.5 || die mdelete /usr/share/man/man5/coredump.conf.d.5 || die mdelete /usr/share/man/man8/systemd-coredump.8 || die mdelete /usr/share/man/man7/udev.7 || die mdelete /usr/share/man/man8/systemd-udevd.8 || die mdelete /usr/share/man/man8/udevadm.8 || die mdelete /usr/share/man/man8/nss-myhostname.8 || die mdelete /usr/share/pkgconfig/udev.pc || die # usr/$(mlibdir)/rpm # $([[ $(mlibdir) != lib ]] && echo 'usr/lib/rpm') zapmost ${BINDIR} \ usr/include \ usr/share/bash-completion \ usr/share/doc \ usr/share/man \ usr/share/pkgconfig \ usr/share/zsh \ usr/$(mlibdir)/pkgconfig \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/pkgconfig') \ || die } src_install_systemd-coredump() { DESTDIR=${BINDIR} mninja install || die zapmost ${BINDIR} \ etc/systemd/coredump.conf \ usr/bin/coredumpctl \ usr/lib/sysctl.d/50-coredump.conf \ usr/lib/systemd/systemd-coredump \ usr/share/man/man1/coredumpctl.1 \ usr/share/man/man5/coredump.conf.5 \ usr/share/man/man5/coredump.conf.d.5 \ usr/share/man/man8/systemd-coredump.8 \ || die } src_install_systemd-systemctl() { DESTDIR=${BINDIR} mninja install || die zapmost ${BINDIR} \ usr/bin/systemctl \ usr/share/man/man1/systemctl.1 \ || die } src_install_systemd-tools() { if [[ ${ENABLE_GTK} = 1 ]] then SRCDIR="${UI_SRCDIR}" mmake DESTDIR=${BINDIR} install || die fi all-abis minstallexec ${BUILDDIR}/build-$(mabi)/systemd-analyze || die all-abis minstallexec ${SRCDIR}-$(mabi)/src/kernel-install/kernel-install || die } src_install_libudev() { DESTDIR=${BINDIR} mninja install || die # cleanup all files but the libudev owned ones zapmost ${BINDIR} \ usr/include/libudev.h \ usr/$(mlibdir)/libudev\* \ usr/$(mlibdir)/pkgconfig/libudev.pc \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/libudev*') \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/pkgconfig/libudev.pc') \ || die if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then mdelete -r /usr/include || die mdelete -r /usr/$(mlibdir)/pkgconfig || die fi } src_install_libudev-dev() { DESTDIR=${BINDIR} mninja install || die # cleanup all files but the libudev owned ones zapmost ${BINDIR} \ usr/include/libudev.h \ usr/$(mlibdir)/pkgconfig/libudev.pc \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/pkgconfig/libudev.pc') \ || die } src_install_udev() { DESTDIR=${BINDIR} mninja install || die # cleanup all files but the udev owned ones zapmost ${BINDIR} \ etc/udev \ usr/bin/udevadm \ usr/lib/systemd/systemd-udevd \ usr/lib/systemd/system/systemd-udevd-control.socket \ usr/lib/systemd/system/systemd-udevd-kernel.socket \ usr/lib/systemd/system/systemd-udevd.service \ usr/lib/systemd/system/systemd-udev-settle.service \ usr/lib/systemd/system/systemd-udev-trigger.service \ usr/lib/udev \ usr/share/man/man7/udev.7 \ usr/share/man/man8/systemd-udevd.8 \ usr/share/man/man8/udevadm.8 \ usr/share/pkgconfig/udev.pc \ || die # remove udev rule for systemd mdelete /usr/lib/udev/rules.d/99-systemd.rules || die minstalldocs LICENSE* NEWS README TODO || die # install our config cd ${UDEV_CONFIG_SRCDIR} make DESTDIR=${BINDIR} install || die if [[ ${SYSVINIT_SUPPORT} = 1 ]] then # install sysvinit rc. script make DESTDIR=${BINDIR} install-sysvinit || die fi # create symlinks for these utilities to /sbin minstalldir /usr/sbin || die # where multipath-tools expect them to be mlink ../lib/udev/scsi_id /usr/sbin/ || die # mark some dirs undeletable mkeepdir /etc/udev/rules.d || die mkeepdir /usr/lib/udev/state || die # CONFIG_PROTECT_MASK for /etc/udev/rules.d minstalldir /etc/env.d || die MCONFIG="/etc/env.d/02udev" mclearconfig || die maddconfig 'CONFIG_PROTECT_MASK="/etc/udev/rules.d"' || die if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then mdelete -r /usr/share || die fi } src_install_udev-dev() { DESTDIR=${BINDIR} mninja install || die # cleanup all files but the udev owned ones zapmost ${BINDIR} \ usr/share/man/man7/udev.7 \ usr/share/man/man8/systemd-udevd.8 \ usr/share/man/man8/udevadm.8 \ usr/share/pkgconfig/udev.pc \ || die minstalldocs LICENSE* NEWS README TODO || die } src_install_nss-myhostname() { DESTDIR=${BINDIR} mninja install || die # cleanup all files but the nss-myhostname owned ones zapmost ${BINDIR} \ usr/$(mlibdir)/libnss_myhostname\* \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/libnss_myhostname*') \ usr/share/man/man8/nss-myhostname.8 \ || die if [[ ${ENABLE_DEV_PACKAGES} = 1 ]] then mdelete -r /usr/share || die fi } src_install_nss-myhostname-dev() { DESTDIR=${BINDIR} mninja install || die # cleanup all files but the nss-myhostname owned ones zapmost ${BINDIR} \ usr/share/man/man8/nss-myhostname.8 \ || die } src_install_libsystemd() { DESTDIR=${BINDIR} mninja install || die # cleanup all files but the libsystem owned ones zapmost ${BINDIR} \ usr/$(mlibdir)/libsystemd.\* \ $([[ $(mlibdir) != lib ]] && echo 'usr/lib/libsystemd.*') \ || die } src_install_libsystemd-shared() { DESTDIR=${BINDIR} mninja install || die # cleanup all files but the libsystem-shared owned ones zapmost ${BINDIR} \ usr/lib/systemd/libsystemd-shared-\*.so \ || die } preinstall_udev() { if [[ ! -z $(magequery -n hotplug) ]] then echo -e ${COLRED} echo -e "Error: sys-apps/hotplug is installed!!" echo -e "hotplug is now fully provided by udev itself and it is not recommend to use this anymore." echo -e "Please uninstall sys-apps/hotplug first!" echo -e ${COLDEFAULT} die "sys-apps/hotplug found!" fi # move udev state if [ ! -L ${MROOT}/lib ] then if [[ -d ${MROOT}/lib/udev-state ]] then mv -f ${MROOT}/lib/udev-state/* ${MROOT}/usr/lib/udev/state/ rm -r ${MROOT}/lib/udev-state fi if [[ -d ${MROOT}/lib/udev/state ]] then mv -f ${MROOT}/lib/udev/state/* ${MROOT}/usr/lib/udev/state/ rm -r ${MROOT}/lib/udev/state fi fi # remove deprecated udev devices dir if [[ -d ${MROOT}/lib/udev/devices ]] then rm -r ${MROOT}/lib/udev/devices fi if [[ -d ${MROOT}/usr/lib/udev/devices ]] then rm -r ${MROOT}/usr/lib/udev/devices fi if [[ -f ${MROOT}/etc/udev/udev.config ]] && [[ ! -f ${MROOT}/etc/udev/udev.rules ]] then mv -f ${MROOT}/etc/udev/udev.config ${MROOT}/etc/udev/udev.rules fi # delete the old udev.hotplug symlink if it is present if [[ -h ${MROOT}/etc/hotplug.d/default/udev.hotplug ]] then rm -f ${MROOT}/etc/hotplug.d/default/udev.hotplug fi # delete the old wait_for_sysfs.hotplug symlink if it is present if [[ -h ${MROOT}/etc/hotplug.d/default/05-wait_for_sysfs.hotplug ]] then rm -f ${MROOT}/etc/hotplug.d/default/05-wait_for_sysfs.hotplug fi # delete the old 10-udev.hotplug symlink if it is present if [[ -h ${MROOT}/etc/hotplug.d/default/10-udev.hotplug ]] then rm -f ${MROOT}/etc/hotplug.d/default/10-udev.hotplug fi # delete the deprectated udev-late rc-script [[ -x ${MROOT}/sbin/rc-config ]] && ${MROOT}/sbin/rc-config del udev-late # delete obsolete hotplug.dev script if [[ -f ${MROOT}/etc/dev.d/net/hotplug.dev ]] then rm -f ${MROOT}/etc/dev.d/net/hotplug.dev fi # delete deprecated pnp-aliases if [[ -f ${MROOT}/etc/modprobe.d/pnp-aliases ]] then rm -f ${MROOT}/etc/modprobe.d/pnp-aliases fi # delete deprecated blacklist if [[ -f ${MROOT}/etc/udev/blacklist ]] then rm -f ${MROOT}/etc/udev/blacklist fi # delete all udev.rules which are moved from /etc/udev to /lib/udev local rule for rule in 40-arch-s390.rules \ 61-persistent-storage-edd.rules \ 75-persistent-net-generator.rules \ 64-md-raid.rules \ 65-permissions.rules \ 64-device-mapper.rules \ 40-alsa.rules \ 40-zaptel.rules \ 60-persistent-input.rules \ 40-arch-ia64.rules \ 05-udev-early.rules \ 40-arch-ppc.rules \ 60-cdrom_id.rules \ 40-pilot-links.rules \ 95-udev-late.rules \ 40-magellan.rules \ 50-udev-default.rules \ 80-drivers.rules \ 30-kernel-compat.rules \ 40-video.rules \ 60-persistent-storage-tape.rules \ 75-cd-aliases-generator.rules \ 60-persistent-storage.rules do # delete obsolete hotplug.dev script if [[ -f ${MROOT}/etc/udev/rules.d/${rule} ]] then rm -f ${MROOT}/etc/udev/rules.d/${rule} fi done echo "Network device naming is now controlled by udev's net_setup_link" echo "builtin. Refer to the NETWORK LINK CONFIGURATION section of the" echo "udev manpage for a full description." if [ -e ${MROOT}/etc/udev/rules.d/80-net-name-slot.rules ] then echo echo "Renaming old 80-net-name-slot.rules to 80-net-setup-link.rules in order" echo "to preserve existing network naming behavior." mv -v ${MROOT}/etc/udev/rules.d/80-net-name-slot.rules \ ${MROOT}/etc/udev/rules.d/80-net-setup-link.rules fi } postinstall_udev() { [[ ! -d ${MROOT}/run ]] && install -d ${MROOT}/run # systemd if [[ -x /usr/bin/systemctl ]] && [[ -z ${MROOT} ]] && [[ ${MROOT} != / ]] then # reload config systemctl daemon-reload # try to kill if ! systemctl stop systemd-udevd.service systemd-udevd-control.socket systemd-udevd-kernel.socket >/dev/null 2>&1 then # kill daemon if we are not in a chroot if [[ /proc/1/exe ]] && [[ -d /proc/1/root ]] then if [[ $(stat -Lc '%%D-%%i' /) = $(stat -Lc '%%D-%%i' /proc/1/root) ]] then udevadm control --exit 2>&1 fi fi fi # start the daemon if ! systemctl start systemd-udevd.service >/dev/null 2>&1 then # start daemon if we are not in a chroot if [[ -f /proc/1/exe ]] && [[ -d /proc/1/root ]] then if [[ $(stat -Lc '%%D-%%i' /) = $(stat -Lc '%%D-%%i' /proc/1/root) ]] then /usr/lib/systemd/systemd-udevd --daemon fi fi fi # sysV else # after install/uprade, udev *must* be reloaded if already running if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]] && [[ -n $(pidof systemd-udevd) ]] && [[ ${MAGE_BOOTSTRAP} != true ]] then echo "MROOT=/; restarting udev daemon ..." # support old installations too killall -15 udevd &> /dev/null killall -15 systemd-udevd &> /dev/null sleep 1 killall -9 systemd-udevd &> /dev/null killall -9 udevd &> /dev/null /usr/lib/systemd/systemd-udevd --daemon fi fi if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]] then # update hwdb udevadm hwdb --update > /dev/null 2>&1 fi } postinstall_nss-myhostname() { # add myhostname to the hosts line of /etc/nsswitch.conf if [ -f ${MROOT}/etc/nsswitch.conf ] then sed -i -e ' /^hosts:/ !b /\/ b s/[[:blank:]]*$/ myhostname/ ' ${MROOT}/etc/nsswitch.conf fi } postremove_nss-myhostname() { # remove myhostname from the hosts line of /etc/nsswitch.conf if [ ! -e ${MROOT}/usr/$(mlibdir)/libnss_myhostname.so.* ] then if [ -f ${MROOT}/etc/nsswitch.conf ] then sed -i -e ' /^hosts:/ !b s/[[:blank:]]\+myhostname\>// ' ${MROOT}/etc/nsswitch.conf fi fi } preinstall_systemd() { if [[ ${SYSVINIT_SUPPORT} != 1 ]] then if [[ ! -z $(magequery -n sysvinit) ]] then echo -e ${COLRED} echo -e "Error: sys-apps/sysvinit is installed!!" echo -e "sysvinit is now replaced by systemd which is the new default init system." echo -e "Please uninstall sys-apps/sysvinit first!" echo -e ${COLDEFAULT} die "sys-apps/sysvinit found!" fi fi # adding users pkg_setup # fix broken systemd installations, where # /usr/lib/systemd/systemd is a directory and not the daemon-exec if [ -d ${MROOT}/usr/lib/systemd/systemd ] then rm -r ${MROOT}/usr/lib/systemd/systemd fi # rename configuration files that changed their names if [ -f ${MROOT}/etc/systemd/systemd-logind.conf ] then mv -n ${MROOT}/etc/systemd/{systemd-,}logind.conf fi if [ -f ${MROOT}/etc/systemd/systemd-journald.conf ] then mv -n ${MROOT}/etc/systemd/{systemd-,}journald.conf fi # move old stuff around in /var/lib if [ -f ${MROOT}/var/lib/random-seed ] then [ -d ${MROOT}/var/lib/systemd ] || install -d ${MROOT}/var/lib/systemd mv -n ${MROOT}/var/lib/random-seed ${MROOT}/var/lib/systemd/random-seed fi if [ -f ${MROOT}/var/lib/backlight ] then [ -d ${MROOT}/var/lib/systemd ] || install -d ${MROOT}/var/lib/systemd mv -n ${MROOT}/var/lib/backlight ${MROOT}/var/lib/systemd/backlight fi } postinstall_systemd() { # remove deprecated compat libraries local lib for lib in daemon id128 journal login do if [[ -n $(magequery -n libsystemd-${lib}) ]] then echo "Uninstalling deprecated 'libsystemd-${lib}'" mage uninstall libsystemd-${lib} fi done # try to read default runlevel from the old inittab if it exists local runlevel runlevel=$(awk -F ':' '$3 == "initdefault" && $1 !~ "^#" { print $2 }' ${MROOT}/etc/inittab 2> /dev/null) local target if [[ -z ${runlevel} ]] then target="/usr/lib/systemd/system/graphical.target" else target="/usr/lib/systemd/system/runlevel${runlevel}.target" fi # and symlink what we found to the new-style default.target ln -snf ${target} ${MROOT}/etc/systemd/system/default.target # convert modules.autoload if [ -f ${MROOT}/etc/modules.autoload ] then local modules # get only lines which are not commented or empty; # if we get any items than the modules.autoload is in use modules=$(sed -e '/^#/d' -e '/^$/d' ${MROOT}/etc/modules.autoload) if [[ ! -z ${modules} ]] then [ ! -d ${MROOT}/etc/modules-load.d ] && install -d ${MROOT}/etc/modules-load.d echo -e "# Converted by systemd install from /etc/modules.autoload\n#\n#" \ > ${MROOT}/etc/modules-load.d/modules.autoload.conf cat ${MROOT}/etc/modules.autoload \ >> ${MROOT}/etc/modules-load.d/modules.autoload.conf fi fi # check mtab and replace with a symlink if required if [[ ! -L ${MROOT}/etc/mtab ]] || \ [[ $(readlink ${MROOT}/etc/mtab) != /proc/self/mounts ]] then ln -snf /proc/self/mounts ${MROOT}/etc/mtab fi if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]] then # create machine-id if [ ! -s /etc/machine-id ] then systemd-machine-id-setup fi # create a random-seed /usr/lib/systemd/systemd-random-seed save # allow detect-virt to be run by unprivileged code setcap cap_dac_override,cap_sys_ptrace+ep /usr/bin/systemd-detect-virt # restart systemd daemon systemctl daemon-reexec # restart systemd-logind daemon systemctl try-restart systemd-logind.service # update journal catalog journalctl --update-catalog > /dev/null 2>&1 # create missing tmpfiles systemd-tmpfiles --create > /dev/null 2>&1 # set acls for wheel and adm group if [ -x /usr/bin/setfacl ] then /usr/bin/setfacl -Rnm g:wheel:rx,d:g:wheel:rx,g:adm:rx,d:g:adm:rx /var/log/journal/ > /dev/null 2>&1 fi # enable the services we install by default. systemctl enable \ getty@tty1.service \ remote-fs.target \ systemd-timesyncd.service #systemd-readahead-replay.service #systemd-readahead-collect.service #console-getty.service #console-shell.service #debug-shell.service #systemd-networkd.service fi echo echo "with >=systemd-216 coredumps are no longer sent to the journal by default." echo "To re-enable:" echo ' echo >/etc/sysctl.d/50-coredump.conf \' echo ' "kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e"' echo if [[ ${SYSVINIT_SUPPORT} = 1 ]] then echo echo "systemd has been installed to /usr/lib/systemd/systemd. Please ensure you append" echo "init=/usr/lib/systemd/systemd to your kernel command line in your bootloader." echo fi }