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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jul 22, 2010 at 03:30:42AM +0200, Lennart Poettering wrote:
> On Wed, 21.07.10 20:08, Toshio Kuratomi (a.badger@xxxxxxxxx) 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

Attachment: pgpBLwxvN6ycY.pgp
Description: PGP signature

-- 
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxxx
https://admin.fedoraproject.org/mailman/listinfo/devel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]
  Powered by Linux