|
|
(2 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
| There are two options for scriptlets depending on whether we should care about user configuration of what services start in the past.
| | {{admon/note|This page used to contain a draft packaging guidelines which has now been approved.}} |
|
| |
|
| == Start over fresh ==
| | You can now find the current content at the following pages: |
| <pre>
| | * [[Packaging:ScriptletSnippets#Systemd|Scriptlet snippets for systemd-enabled services]] |
| %post
| | * [[Packaging:SysVInitScript#Initscripts_in_addition_to_systemd_unit_files|Scriptlets snippets for sysv initscripts in a subpackage]] |
| if [ $1 -eq 1 ] ; then
| |
| # Initial installation
| |
| # If a package is allowed to autostart:
| |
| /bin/systemctl enable httpd.service >/dev/null 2>&1 || :
| |
| # No autostart:
| |
| # /bin/systemctl daemon-reload >/dev/null 2>&1 || :
| |
| fi
| |
| | |
| %preun
| |
| if [ $1 -eq 0 ] ; then
| |
| # Package removal, not upgrade
| |
| /bin/systemctl --no-reload disable httpd.service > /dev/null 2>&1 || :
| |
| /bin/systemctl stop httpd.service > /dev/null 2>&1 || :
| |
| fi
| |
| | |
| %postun
| |
| /bin/systemctl daemon-reload >/dev/null 2>&1 || :
| |
| if [ $1 -ge 1 ] ; then
| |
| # Package upgrade, not uninstall
| |
| /bin/systemctl try-restart httpd.service >/dev/null 2>&1 || :
| |
| fi
| |
| | |
| # Note: the NEVR in trigger scripts should all be the version in
| |
| # which the package switched to systemd unit files and the comparision
| |
| # should be less than. Using <= the last version with the sysV script won't
| |
| # work for several reasons:
| |
| # 1) disttag is different between Fedora releases
| |
| # 2) An update in an old Fedora release may create a newer NEVR
| |
| # Note that this means an update in an older Fedora release must be NEVR
| |
| # lower than this. Freezing the version and release of the old package and
| |
| # using a number after the disttag is one way to do this. Example:
| |
| # httpd-1.0-1%{?dist} => httpd-1.0-1%{?dist}.1
| |
| | |
| %triggerun -- httpd < 1.0-2
| |
| # Save the current service runlevel info
| |
| # User must manually run sysv2systemd --restore httpd to migrate them to systemd targets
| |
| /bin/sysv2systemd --save httpd
| |
| | |
| # If the package is allowed to autostart:
| |
| /bin/systemctl enable httpd.service >/dev/null 2>&1
| |
| | |
| # Run these because the SysV package being removed won't do them
| |
| /sbin/chkconfig --del httpd >/dev/null 2>&1 || :
| |
| /bin/systemctl try-restart httpd.service >/dev/null 2>&1 || :
| |
| /bin/systemctl daemon-reload >/dev/null 2>&1 || :
| |
| | |
| | |
| # If we're shipping sysvinit scripts
| |
| %triggerpostun -n httpd-sysvinit -- httpd < 1.0-2
| |
| /sbin/chkconfig --add httpd >/dev/null 2>&1 || :
| |
| </pre>
| |
| | |
| {{admon/question|sysv2systemd|Someone needs to write this tool. We think that Lennart might be willing but we'll need to verify}}
| |
| | |
| == Preserve user defaults ==
| |
| | |
| <pre>
| |
| %post
| |
| if [ $1 -eq 1 ] ; then
| |
| # Initial installation
| |
| # If a package is allowed to autostart:
| |
| /bin/systemctl enable httpd.service >/dev/null 2>&1 || :
| |
| # No autostart:
| |
| # /bin/systemctl daemon-reload >/dev/null 2>&1 || :
| |
| fi
| |
| | |
| %preun
| |
| if [ $1 -eq 0 ] ; then
| |
| # Package removal, not upgrade
| |
| /bin/systemctl --no-reload disable httpd.service > /dev/null 2>&1 || :
| |
| /bin/systemctl stop httpd.service > /dev/null 2>&1 || :
| |
| fi
| |
| | |
| %postun
| |
| /bin/systemctl daemon-reload >/dev/null 2>&1 || :
| |
| if [ $1 -ge 1 ] ; then
| |
| # Package upgrade, not uninstall
| |
| /bin/systemctl try-restart httpd.service >/dev/null 2>&1 || :
| |
| fi
| |
| | |
| # Note: the NEVR in trigger scripts should all be the version in
| |
| # which the package switched to systemd unit files and the comparision
| |
| # should be less than. Using <= the last version with the sysV script won't
| |
| # work for several reasons:
| |
| # 1) disttag is different between Fedora releases
| |
| # 2) An update in an old Fedora release may create a newer NEVR
| |
| | |
| %triggerun -- httpd < 1.0-2
| |
| if chkconfig --level --no-redirect 1 foo ; then
| |
| ln -sf /lib/systemd/system/foo.service /etc/systemd/system/rescue.target.wants/ 2>&1 >/dev/null
| |
| multiuser=0
| |
| if chkconfig --level 3 foo; then
| |
| ln -sf /lib/systemd/system/foo.service /etc/systemd/system/multi-user.target.wants/ 2>&1 >/dev/null
| |
| multiuser=1
| |
| fi
| |
| if chkconfig --level 5 foo; then
| |
| # If it's already in multi-user, it will be inherited automatically
| |
| if [ $multiuser -eq 0 ] ; then
| |
| ln -sf /lib/systemd/system/foo.service /etc/systemd/system/graphical.target.wants/ 2>&1 >/dev/null
| |
| fi
| |
| else
| |
| if [ $multiuser -eq 1 ] ; then
| |
| # Note: we don't have to do this; it says that if the user ran something in 3 but
| |
| # disabled it in 5 then we don't want it to run in graphical.target. It's a
| |
| # literal translation
| |
| ln -sf /dev/null /etc/systemd/system/graphical.target.wants/foo.service
| |
| fi
| |
| fi
| |
| # Run these because the SysV package being removed won't do it | |
| /bin/systemctl try-restart httpd.service >/dev/null 2>&1 || :
| |
| | |
| | |
| # Run this because the chkconfig --del in the SysV providing package won't
| |
| # fire unless the package is removed
| |
| /sbin/chkconfig --del httpd >/dev/null 2>&1 || :
| |
| | |
| /bin/systemctl daemon-reload >/dev/null 2>&1 || :
| |
| | |
| # If we're shipping sysvinit scripts
| |
| %triggerpostun -n httpd-sysvinit -- httpd < 1.0-2
| |
| /sbin/chkconfig --add httpd >/dev/null 2>&1 || :
| |
| | |
| </pre>
| |
| | |
| {{admon/question||Be sure to test that the try-restart in the trigger restarts the daemon if it was running in a former sysv package and also does not enable a daemon if it wasn't running. For other test cases, see my notes on the many variants that we have to test here: https://fedoraproject.org/wiki/User:Toshio/Testing_systemd}}
| |