File macros.systemd of Package systemd-rpm-macros

#  -*- 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
# 
###

# This is for systemctl
%systemd_requires									\
Requires(pre): systemd									\
Requires(post): systemd									\
Requires(preun): systemd								\
Requires(postun): systemd								\

%_unitdir /usr/lib/systemd/system
%_presetdir /usr/lib/systemd/system-preset
%_udevhwdbdir /usr/lib/udev/hwdb.d
%_udevrulesdir /usr/lib/udev/rules.d
%_journalcatalogdir /usr/lib/systemd/catalog
%_tmpfilesdir /usr/lib/tmpfiles.d
%_sysctldir /usr/lib/sysctl.d
%_ntpunitsdir /usr/lib/systemd/ntp-units.d

%service_add_pre()									\
test -n "$FIRST_ARG" || FIRST_ARG=$1							\
# disable migration if initial install under systemd					\
[ -d /var/lib/systemd/migrated ] || mkdir -p /var/lib/systemd/migrated || :		\
if [ $FIRST_ARG -eq 1 ]; then 								\
  for service in %{?*} ; do								\
    sysv_service=${service%.*}								\
    touch "/var/lib/systemd/migrated/$sysv_service" || :				\
  done											\
else											\
  if [ $FIRST_ARG -gt 1 ]; then 							\
    for service in %{?*} ; do								\
      if [ ! -e "/usr/lib/systemd/system/$service" ]; then				\
	touch "/run/rpm-%{name}-update-$service-new-in-upgrade"				\
      fi										\
    done										\
  fi											\
  for service in %{?*} ; do								\
    sysv_service=${service%.*}								\
    if [ ! -e "/var/lib/systemd/migrated/$sysv_service" ]; then				\
  	services_to_migrate="$services_to_migrate $sysv_service"			\
    fi											\
  done											\
  if [ -n "$services_to_migrate" ]; then						\
    /usr/sbin/systemd-sysv-convert --save $services_to_migrate >/dev/null 2>&1 || :	\
  fi											\
fi											\
%{nil}

# On install, tell systemd to reload its unit files
%service_add_post()									\
test -n "$FIRST_ARG" || FIRST_ARG=$1							\
[ -d /var/lib/systemd/migrated ] || mkdir -p /var/lib/systemd/migrated || :		\
for service in %{?*} ; do								\
  sysv_service=${service%.*}								\
  if [ ! -e "/var/lib/systemd/migrated/$sysv_service" ]; then				\
	services_to_migrate="$services_to_migrate $sysv_service"			\
	touch "/var/lib/systemd/migrated/$sysv_service" || :				\
  fi											\
done											\
/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || :					\
if [ -n "$services_to_migrate" ]; then							\
  /usr/sbin/systemd-sysv-convert --apply $services_to_migrate >/dev/null 2>&1 || :	\
elif [ $FIRST_ARG -eq 1 ]; then								\
  /usr/bin/systemctl preset %{?*} >/dev/null 2>&1 || :					\
elif [ $FIRST_ARG -gt 1 ]; then								\
  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" >/dev/null 2>&1 || :				\
    fi											\
  done											\
fi											\
%{nil}

# On uninstall, disable and stop services
%service_del_preun()									\
test -n "$FIRST_ARG" || FIRST_ARG=$1							\
if [ $FIRST_ARG -eq 0 ]; then								\
# Package removal, not upgrade								\
 /usr/bin/systemctl --no-reload disable %{?*} > /dev/null 2>&1 || :				\
 /usr/bin/systemctl stop %{?*} > /dev/null 2>&1 || :					\
fi											\
%{nil}

# On uninstall, tell systemd to reload its unit files
%service_del_postun()									\
test -n "$FIRST_ARG" || FIRST_ARG=$1							\
if [ $FIRST_ARG -ge 1 ]; then								\
# Package upgrade, not uninstall							\
  if test "$YAST_IS_RUNNING" != "instsys" -a "$DISABLE_RESTART_ON_UPDATE" != yes ; then \
    /usr/bin/systemctl try-restart %{?*} >/dev/null 2>&1 || :					\
  fi \
else # package uninstall								\
  for service in %{?*} ; do								\
    sysv_service=${service%.*}								\
    rm -f "/var/lib/systemd/migrated/$sysv_service" 2> /dev/null || :			\
  done											\
  /usr/bin/systemctl daemon-reload >/dev/null 2>&1 || :					\
fi											\
%{nil}

%udev_hwdb_update() \
/usr/bin/udevadm hwdb --update >/dev/null 2>&1 || : \
%{nil}

%udev_rules_update() \
/usr/bin/udevadm control --reload >/dev/null 2>&1 || : \
%{nil}

%journal_catalog_update() \
/usr/bin/journalctl --update-catalog >/dev/null 2>&1 || : \
%{nil}