diff --git a/systemd-206.ebuild b/systemd-206-r1.ebuild index dc30fa4..89a5e94 100644 --- a/systemd-206.ebuild +++ b/systemd-206-r1.ebuild @@ -7,7 +7,7 @@ EAPI=5 AUTOTOOLS_PRUNE_LIBTOOL_FILES=all PYTHON_COMPAT=( python2_7 ) inherit autotools-utils bash-completion-r1 fcaps linux-info multilib \ - pam python-single-r1 systemd toolchain-funcs udev user + pam python-single-r1 systemd toolchain-funcs user DESCRIPTION="System and service manager for Linux" HOMEPAGE="http://www.freedesktop.org/wiki/Software/systemd" @@ -74,22 +74,6 @@ pkg_pretend() { ~SYSFS ~!IDE ~!SYSFS_DEPRECATED ~!SYSFS_DEPRECATED_V2" # ~!FW_LOADER_USER_HELPER" - # read null-terminated argv[0] from PID 1 - # and see which path to systemd was used (if any) - local init_path - IFS= read -r -d '' init_path < /proc/1/cmdline - if [[ ${init_path} == */bin/systemd ]]; then - eerror "You are using a compatibility symlink to run systemd. The symlink" - eerror "has been removed. Please update your bootloader to use:" - eerror - eerror " init=/usr/lib/systemd/systemd" - eerror - eerror "and reboot your system. We are sorry for the inconvenience." - if [[ ${MERGE_TYPE} != buildonly ]]; then - die "Compatibility symlink used to boot systemd." - fi - fi - if [[ ${MERGE_TYPE} != binary ]]; then if [[ $(gcc-major-version) -lt 4 || ( $(gcc-major-version) -eq 4 && $(gcc-minor-version) -lt 6 ) ]] @@ -133,6 +117,10 @@ src_configure() { # no deps --enable-efi --enable-ima + # These are needed since we do not have the /usr merge + --with-rootlibdir=/$(get_libdir) + --with-rootprefix= + # optional components/dependencies $(use_enable acl) $(use_enable audit) @@ -162,9 +150,6 @@ src_configure() { QUOTACHECK=/usr/sbin/quotacheck ) - # Keep using the one where the rules were installed. - MY_UDEVDIR=$(get_udevdir) - if use firmware-loader; then myeconfargs+=( --with-firmware-path="/lib/firmware/updates:/lib/firmware" @@ -177,33 +162,18 @@ src_configure() { autotools-utils_src_configure } -src_compile() { - autotools-utils_src_compile \ - udevlibexecdir="${MY_UDEVDIR}" -} - src_install() { autotools-utils_src_install -j1 \ - udevlibexecdir="${MY_UDEVDIR}" \ dist_udevhwdb_DATA= - # keep udev working without initramfs, for openrc compat - dodir /bin /sbin - mv "${D}"/usr/lib/systemd/systemd-udevd "${D}"/sbin/udevd || die - mv "${D}"/usr/bin/udevadm "${D}"/bin/udevadm || die - dosym ../../../sbin/udevd /usr/lib/systemd/systemd-udevd - dosym ../../bin/udevadm /usr/bin/udevadm + # add compatibility symlinks + dosym ../bin/udevadm /sbin/udevadm + dosym ../lib/systemd/systemd-udevd /sbin/udevd # zsh completion insinto /usr/share/zsh/site-functions newins shell-completion/systemd-zsh-completion.zsh "_${PN}" - # compat for init= use - dosym ../usr/lib/systemd/systemd /bin/systemd - dosym ../lib/systemd/systemd /usr/bin/systemd - # rsyslog.service depends on it... - dosym ../usr/bin/systemctl /bin/systemctl - # we just keep sysvinit tools, so no need for the mans rm "${D}"/usr/share/man/man8/{halt,poweroff,reboot,runlevel,shutdown,telinit}.8 \ || die @@ -225,14 +195,6 @@ src_install() { # Preserve empty dirs in /etc & /var, bug #437008 keepdir /etc/binfmt.d /etc/modules-load.d /etc/tmpfiles.d \ /etc/systemd/ntp-units.d /etc/systemd/user /var/lib/systemd - - # Check whether we won't break user's system. - local x - for x in /bin/systemd /usr/bin/systemd \ - /usr/bin/udevadm /usr/lib/systemd/systemd-udevd - do - [[ -x ${D}${x} ]] || die "${x} symlink broken, aborting." - done } optfeature() { @@ -249,6 +211,16 @@ optfeature() { elog "${text} (${desc})" } +# This function was lifted from dracut and slightly modified. +ismounted() { + local real_mnt dev mnt etc + real_mnt="$(readlink -e -q $1)" + while read dev mnt etc; do + [ "$mnt" = "$real_mnt" ] && return 0 + done < /proc/self/mounts + return 1 +} + pkg_postinst() { # for udev rules enewgroup dialout @@ -277,10 +249,62 @@ pkg_postinst() { ewarn fi - elog "To get additional features, a number of optional runtime dependencies may" - elog "be installed:" - optfeature 'for GTK+ systemadm UI and gnome-ask-password-agent' \ - 'sys-apps/systemd-ui' + if ! has_version sys-apps/systemd-ui; then + optfeature 'for GTK+ systemadm UI and gnome-ask-password-agent' \ + 'sys-apps/systemd-ui' + fi + + # discover which init process was run + local init_path + IFS= read -r -d '' init_path < /proc/1/cmdline + if [[ ${init_path} != "/lib/systemd/systemd" ]]; then + elog + elog "To use systemd, add the following to your boot loader" + elog "configuration:" + elog + elog "init=/lib/systemd/systemd" + fi + + if [[ ! -L "${ROOT}"/lib && -d "${ROOT}"/usr/lib/systemd/system ]]; then + ewarn + ewarn "You need to re-emerge packages installing files in" + ewarn "/usr/lib/systemd/system so these files move to" + ewarn "/lib/systemd/system." + ewarn + ewarn "One way to do this is to run the following command:" + ewarn "emerge -av1 /usr/lib/systemd/system" + ewarn + ewarn "Once you do this, you may need to disable then re-enable" + ewarn "services. an easy way to do this is to run" + ewarn "systemd-fix-services as root." + fi + + if [[ ! -L "${ROOT}"/lib && -d "${ROOT}"/usr/lib/udev ]]; then + ewarn + ewarn "You need to re-emerge packages installing files in /usr/lib/udev" + ewarn "to move these files to /lib/udev." + ewarn + ewarn "One way to do this is to run the following command:" + ewarn "emerge -av1 /usr/lib/udev" + fi + + if ismounted /usr && [[ -z $REPLACING_VERSIONS ]]; then + ewarn + ewarn "Your system has /usr on a separate partition. This means" + ewarn "you will need to use an initramfs to pre-mount /usr before" + ewarn "systemd runs." + ewarn + ewarn "If this is not set up before your next reboot, systemd may work;" + ewarn "However, you also may experience failures which are very" + ewarn "difficult to troubleshoot." + ewarn + ewarn "For a more detailed explanation, see the following URL:" + ewarn "http://www.freedesktop.org/wiki/Software/systemd/separate-usr-is-broken" + ewarn + ewarn "For more information on setting up an initramfs, see the" + ewarn "following URL:" + ewarn "http://www.gentoo.org/doc/en/initramfs-guide.xml" + fi } pkg_prerm() {