[HEADS-UP] systemd for F14 - the next steps

Toshio Kuratomi a.badger at gmail.com
Thu Jul 22 23:41:34 UTC 2010


On Thu, Jul 22, 2010 at 03:30:42AM +0200, Lennart Poettering wrote:
> On Wed, 21.07.10 20:08, Toshio Kuratomi (a.badger at gmail.com) wrote:
> 
> > > - If you want to enable and possibly start a service from the %post of
> > >   an RPM then use the "systemd-install enable" command, which will
> > >   create a few symlinks as listed in the [Install] section of the unit
> > >   file. On top of that you may also pass --realize=... to the command,
> > >   which allows you to not only enable the unit for the next boot, but
> > >   also have the changes take effect immediately: i.e. --realize=reload
> > >   is the very least you should use, which simply makes systemd aware of
> > >   the changed symlinks. Then, at time of %preun you should use
> > >   --realize=yes which makes sure the daemon is stopped in
> > >   deinstallation. For a few daemons it makes sense to restart them if
> > >   they are running already during upgrade. Use --realize=minimal for
> > >   those. For even others (usually very low-level ones) it might even
> > >   make sense to start them right-away after installation, even if they
> > >   were not running before. For those use --realize=maybe. But which
> > >   option you use really depends on the package. Most packages
> > >   should probably stick to --realize=yes on %preun and --realize=reload
> > >   in %post. Suggested .spec file fragments you find in the daemon(7) man
> > >   page.
> > > 
> > Normally, we don't want a service to be started just because the package has
> > been installed:
> > 
> 
> Yepp, which is why I said "very low-level ones", i.e. as low-level as
> for example udev, which you really want to be running.
> 
> > https://fedoraproject.org/wiki/Packaging/SysVInitScript.
> > 
> > This is the current recommended scriptlets:
> > 
> > %post
> > # This adds the proper /etc/rc*.d links for the script
> > /sbin/chkconfig --add <script>
> > 
> > %preun
> > if [ $1 = 0 ] ; then
> >     /sbin/service <script> stop >/dev/null 2>&1
> >     /sbin/chkconfig --del <script>
> > fi
> > 
> > %postun
> > if [ "$1" -ge "1" ] ; then
> >     /sbin/service <script> condrestart >/dev/null 2>&1 || :
> > fi
> > 
> > 
> > I think I've got the %preun translated correctly but I'm not sure about
> > either the %post or %postun::
> > 
> > %post
> > # Don't need a %post as systemd automatically knows about the defaults?
> 
> It is needed:
> 
> if [ $1 -eq 1 ] ; then
>         # For new installations, hook unit file into the appropriate places via symlinks
>         /usr/bin/systemd-install enable --realize=reload %{unit name}.service > /dev/null 2>&1 || :
> else
>         # For old installations, just reload the configuration, don't change symlinks
>         /bin/bin/systemd-install realize --realize=reload %{unit name}.service > /dev/null 2>&1 || :
> fi        
> 
My impression from the documentation is that systemd-install enable will
cause the service to be enabled on the next reboot.  Is that not correct?

> > 
> > %preun
> > if [ $1 = 0 ] ; then
> >     /usr/bin/systemd-install disable %{unit name}.service --realize=disable > /dev/null 2>&1 || :
> > fi
> 
> Almost:
> 
> if [ $1 -eq 0 ] ; then
>         /usr/bin/systemd-install disable --realize=yes %{unit name}.service > /dev/null 2>&1 || :
> fi
> 
Ah -- I see you wrote that above.  The spec file example in the man page
seemed to use --realize=disable, though.  What's the difference and should
the man page be changed?  (Or perhaps I misread it.)

> > %postun
> > if [ "$1" -ge "1" ] ; then
> >     # Can't figure out how to do a conditional restart here.  Help?
> > fi
> 
> If you want to restart the service on upgrade I'd do that in %post. It
> should be sufficient to replace --realize=reload by --realize=minimal
> which will restart the unit if it is running, and only then.
> 
%postun is better because the old package has been uninstalled at that
point.  For many packages, that probably won't matter but it's easier to
give one script than to explain that %post will usually work but some
packages will need to use an equivalent action in %postun.

And the same question here about systemd-install enable causing the service
to be enabled on reboot.

-Toshio
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
Url : http://lists.fedoraproject.org/pipermail/devel/attachments/20100722/af0b30a7/attachment.bin 


More information about the devel mailing list