<listitem><para>In the child, call
<function>fork()</function> again, to
- ensure the daemon can never re-aquire
+ ensure the daemon can never re-acquire
a terminal again.</para></listitem>
<listitem><para>Call <function>exit()</function> in the
url="http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html">LSB
Linux Standard Base Core
Specification</ulink>. This method of
- activation is supported ubiquitiously on Linux
+ activation is supported ubiquitously on Linux
init systems, both old-style and new-style
systems. Among other issues SysV init scripts
have the disadvantage of involving shell
activation of daemons. However, the primary
advantage of this scheme is that all providers
and all consumers of the sockets can be
- started in parallel as soon als all sockets
+ started in parallel as soon as all sockets
are established. In addition to that daemons
can be restarted with losing only a minimal
number of client transactions or even any
to the CPU and IO schedulers. If a process
executed by the init system shall not
negatively impact the amount of CPU or IO
- bandwith available to other processes, it
+ bandwidth available to other processes, it
should be configured with
<varname>CPUSchedulingPolicy=idle</varname>
and/or
--variable=systemdsystemunitdir</command> (for
system services), resp. <command>pkg-config
systemd
- --variable=systemdsessionunitdir</command>
- (for session services). This will make the
+ --variable=systemduserunitdir</command>
+ (for user services). This will make the
services available in the system on explicit
request but not activate them automatically
during boot. Optionally, during package
AC_ARG_WITH([systemdsystemunitdir],
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
[], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
-AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
-AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir"])</programlisting>
+if test "x$with_systemdsystemunitdir" != xno; then
+ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
+fi
+AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])</programlisting>
<para>This snippet allows automatic
installation of the unit files on systemd
machines, and optionally allows their
installation even on machines lacking
systemd. (Modification of this snippet for the
- session unit directory is left as excercise to the
+ user unit directory is left as an exercise for the
reader.)</para>
<para>Additionally, to ensure that
<programlisting>%post
if [ $1 -eq 1 ]; then
- # Enable (but don't start) the units by default
+ # On install (not upgrade), enable (but don't start) the
+ # units by default
/bin/systemctl enable foobar.service foobar.socket >/dev/null 2>&1 || :
- # Alternatively, just call /bin/systemctl daemon-reload here,
- # if the daemon should not be enabled by default on package
+ # Alternatively, just call
+ # /bin/systemctl daemon-reload >/dev/null 2>&1 || :
+ # here, if the daemon should not be enabled by default on
# installation
fi
%preun
if [ $1 -eq 0 ]; then
- # Disable and stop the units
- /bin/systemctl disable foobar.service foobar.socket >/dev/null 2>&1 || :
+ # On uninstall (not upgrade), disable and stop the units
+ /bin/systemctl --no-reload disable foobar.service foobar.socket >/dev/null 2>&1 || :
/bin/systemctl stop foobar.service foobar.socket >/dev/null 2>&1 || :
fi
%postun
+# Reload init system configuration, to make systemd honour changed
+# or deleted unit files
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
if [ $1 -ge 1 ] ; then
- # On upgrade, reload init system configuration if we changed unit files
- /bin/systemctl daemon-reload >/dev/null 2>&1 || :
- # On upgrade, restart the daemon
+ # On upgrade (not uninstall), optionally, restart the daemon
/bin/systemctl try-restart foobar.service >/dev/null 2>&1 || :
fi</programlisting>
script and a native systemd service file, use
a fragment like the following:</para>
- <programlisting>%triggerin -- foobar < 0.47.11-1
-if /sbin/chkconfig foobar ; then
- /bin/systemctl enable foobar.service foobar.socket >/dev/null 2>&1 || :
+ <programlisting>%triggerun -- foobar < 0.47.11-1
+if /sbin/chkconfig --level 5 foobar ; then
+ /bin/systemctl --no-reload enable foobar.service foobar.socket >/dev/null 2>&1 || :
fi</programlisting>
<para>Where 0.47.11-1 is the first package
file. This fragment will ensure that the first
time the unit file is installed it will be
enabled if and only if the SysV init script is
- enabled, thus making sure that the the enable
+ enabled, thus making sure that the enable
status is not changed. Note that
<command>chkconfig</command> is a command
- specific Fedora which can be used to check
+ specific to Fedora which can be used to check
whether a SysV init script is enabled. Other
operating systems will have to use different
commands here.</para>