Hi all,

we've been doing another round of changes to the RPM macros for systemd.
It is mostly to handle :
- migration from sysvinit (using Fedora scripts, but not relying on
triggers, because they don't play very will with OBS)
- presets (systemctl preset is called automatically)


-- 
Frederic Crozat <[email protected]>
SUSE
# 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
#
# %post
# %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 /bin/systemctl
%systemd_requires                                                               
        \
Requires(pre): systemd                                                          
        \
Requires(post): systemd                                                         
        \
Requires(preun): systemd                                                        
        \
Requires(postun): systemd                                                       
        \

%_unitdir /lib/systemd/system

%service_add_pre()                                                              
        \
test -n "$FIRST_ARG" || FIRST_ARG=$1                                            
        \
# disable migration if initial install under systemd                            
        \
if [ $FIRST_ARG -eq 1 ]; then                                                   
        \
  for service in %{?*} ; do                                                     
        \
    sysv_service=`echo $service | sed -e 's/\\.[a-z]*//g'`                      
        \
    touch "/var/lib/systemd/migrated/$sysv_service"                             
        \
  done                                                                          
        \
else                                                                            
        \
  for service in %{?*} ; do                                                     
        \
    sysv_service=`echo $service | sed -e 's/\\.[a-z]*//g'`                      
        \
    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                                            
        \
for service in %{?*} ; do                                                       
        \
  sysv_service=`echo $service | sed -e 's/\\.[a-z]*//g'`                        
        \
  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                                                                            
        \
if [ -n "$services_to_migrate" ]; then                                          
        \
  /usr/sbin/systemd-sysv-convert --apply $services_to_migrate >/dev/null 2>&1 
|| :      \
fi                                                                              
        \
/bin/systemctl daemon-reload >/dev/null 2>&1 || :                               
        \
/bin/systemctl preset %{?*} >/dev/null 2>&1 || :                                
        \
%{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                                                  
        \
 /bin/systemctl --no-reload disable %{?*} > /dev/null 2>&1 || :                 
        \
 /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                                                
        \
  /bin/systemctl try-restart %{?*} >/dev/null 2>&1 || :                         
        \
else # package uninstall                                                        
        \
  for service in %{?*} ; do                                                     
        \
    sysv_service=`echo $service | sed -e 's/\\.[a-z]*//g'`                      
        \
    rm -f "/var/lib/systemd/migrated/$sysv_service" 2> /dev/null                
        \
  done                                                                          
        \
  /bin/systemctl daemon-reload >/dev/null 2>&1 || :                             
        \
fi                                                                              
        \
%{nil}

_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to