# -*- Mode: makefile; indent-tabs-mode: t -*- */ # RPM macros for packages installing systemd unit files # ### # # When a package install systemd unit files, it should use the following macros: # # add %systemd_requires in the specfile # # %pre # %service_add_pre demo.service demo1.service # # %post # %service_add_post demo.service demo1.service # # %preun # %service_del_preun demo.service # # %postun # %service_del_postun demo.service # %service_del_postun_without_restart demo.service # %_unitdir /usr/lib/systemd/system %_userunitdir /usr/lib/systemd/user %_presetdir /usr/lib/systemd/system-preset %_userpresetdir /usr/lib/systemd/user-preset %_udevhwdbdir /usr/lib/udev/hwdb.d %_udevrulesdir /usr/lib/udev/rules.d %_journalcatalogdir /usr/lib/systemd/catalog %_tmpfilesdir /usr/lib/tmpfiles.d %_sysusersdir /usr/lib/sysusers.d %_sysctldir /usr/lib/sysctl.d %_ntpunitsdir /usr/lib/systemd/ntp-units.d %_binfmtdir /usr/lib/binfmt.d %_environmentdir /usr/lib/environment.d %_modulesloaddir /usr/lib/modules-load.d %_modprobedir /usr/lib/modprobe.d %_systemdgeneratordir /usr/lib/systemd/system-generators %_systemdusergeneratordir /usr/lib/systemd/user-generators %_systemd_system_env_generator_dir /usr/lib/systemd/system-environment-generators %_systemd_user_env_generator_dir /usr/lib/systemd/user-environment-generators %systemd_requires \ Requires(pre): systemd \ Requires(post): systemd \ Requires(preun): systemd \ Requires(postun): systemd \ %{nil} %systemd_ordering \ OrderWithRequires(post): systemd \ OrderWithRequires(preun): systemd \ OrderWithRequires(postun): systemd \ %{nil} %_restart_on_update_force() /usr/bin/systemctl try-restart %{*} || : %{nil} %_restart_on_update_never() : # Restart of %{*} skipped %{nil} %_restart_on_update() \ if [ -e /etc/sysconfig/services]; then \ DISABLE_RESTART_ON_UPDATE= \ . /etc/sysconfig/services \ case "$DISABLE_RESTART_ON_UPDATE" in \ yes|1) ;; \ *) /usr/bin/systemctl try-restart %{*} || : \ esac \ fi \ %{nil} %service_add_pre() \ if [ $1 -gt 1 -a -x /usr/bin/systemctl ]; then \ for service in %{?*} ; do \ # The tag file might have been left by a preceding \ # update (see bsc#1059627) \ rm -f "/run/rpm-%{name}-update-$service-new-in-upgrade" \ \ if [ ! -e "/usr/lib/systemd/system/$service" ]; then \ touch "/run/rpm-%{name}-update-$service-new-in-upgrade" \ fi \ done \ fi \ %{nil} # On install, tell systemd to reload its unit files %service_add_post() \ if [ -x /usr/bin/systemctl ]; then \ # FIXME: why is this needed ? \ /usr/bin/systemctl daemon-reload || : \ \ if [ $1 -eq 1 ]; then \ /usr/bin/systemctl preset %{?*} || : \ else \ for service in %{?*} ; do \ if [ -e "/run/rpm-%{name}-update-$service-new-in-upgrade" ]; then \ rm -f "/run/rpm-%{name}-update-$service-new-in-upgrade" \ /usr/bin/systemctl preset "$service" || : \ fi \ done \ /usr/lib/systemd/systemd-sysv-convert --apply %{?*} || : \ fi \ fi \ %{nil} # On uninstall, disable and stop services # # Note: '-n' and '-f' options are still allowed to keep backward compatibility # with SLE # %service_del_preun(fn) \ if [ $1 -eq 0 -a -x /usr/bin/systemctl ]; then \ # Package removal, not upgrade \ /usr/bin/systemctl --no-reload disable --now %{?*} || : \ fi \ %{nil} # On uninstall, tell systemd to reload its unit files. # On update, tell systemd to reload its unit files but don't restart service. # %service_del_postun_without_restart() \ if [ -x /usr/bin/systemctl ]; then \ /usr/bin/systemctl daemon-reload || : \ fi \ %{nil} # On uninstall, tell systemd to reload its unit files # # Options used if not in an installation systems # -f : force service restart on update (deprecated) # -n : do not touch active service (deprecated, replaced by %service_del_postun_without_restart) # # The default is to read DISABLE_RESTART_ON_UPDATE from /etc/sysconfig/services # %service_del_postun(fn) \ %service_del_postun_without_restart %{?*} \ if [ $1 -ge 1 -a -x /usr/bin/systemctl ]; then \ # Package upgrade, not uninstall \ %{expand:%%_restart_on_update%{-f:_force}%{!-f:%{-n:_never}} %{?*}} \ fi \ %{nil} # # Upstream variants # %systemd_post() \ if [ $1 -eq 1 -a -x /usr/bin/systemctl ] ; then \ # Initial installation \ /usr/bin/systemctl --no-reload preset %{?*} || : \ fi \ %{nil} %systemd_user_post() %{expand:%systemd_post \\--global %%{?*}} %systemd_preun(fn) \ if [ $1 -eq 0 -a -x /usr/bin/systemctl ]; then \ # Package removal, not upgrade \ /usr/bin/systemctl --no-reload disable --now %{?*} || : \ fi \ %{nil} %systemd_user_preun() \ if [ $1 -eq 0 -a -x /usr/bin/systemctl ]; then \ # Package removal, not upgrade \ /usr/bin/systemctl --global disable %{?*} || : \ fi \ %{nil} %systemd_postun() \ if [ -x /usr/bin/systemctl ]; then \ /usr/bin/systemctl daemon-reload || : \ fi \ %{nil} %systemd_user_postun() %{nil} %systemd_user_postun_with_restart() %{nil} %systemd_postun_with_restart() \ if [ -x /usr/bin/systemctl ]; then \ /usr/bin/systemctl daemon-reload || : \ fi \ if [ $1 -ge 1 -a -x /usr/bin/systemctl ]; then \ # Package upgrade, not uninstall \ /usr/bin/systemctl try-restart %{?*} || : \ fi \ %{nil} %udev_hwdb_update() \ [ -x /usr/bin/udevadm ] && /usr/bin/udevadm hwdb --update || : \ %{nil} %udev_rules_update() \ [ -x /usr/bin/udevadm ] && /usr/bin/udevadm control --reload || : \ %{nil} %journal_catalog_update() \ [ -x /usr/bin/journalctl ] && /usr/bin/journalctl --update-catalog || : \ %{nil} %tmpfiles_create() \ [ -z "${TRANSACTIONAL_UPDATE}" -a -x /usr/bin/systemd-tmpfiles ] && \ /usr/bin/systemd-tmpfiles --create %{?*} || : \ %{nil} %sysusers_create() \ [ -x /usr/bin/systemd-sysusers ] && /usr/bin/systemd-sysusers %{?*} || : \ %{nil} %sysusers_create_inline() \ if [ -x /usr/bin/systemd-sysusers ]; then \ echo %{?*} | systemd-sysusers - || : \ fi \ %{nil} %sysctl_apply() \ [ -x /usr/lib/systemd/systemd-sysctl ] && \ /usr/lib/systemd/systemd-sysctl %{?*} || : \ %{nil} %binfmt_apply() \ [ -x /usr/lib/systemd/systemd-binfmt ] && \ /usr/lib/systemd/systemd-binfmt %{?*} || : \ %{nil}