chiark / gitweb /
import: rename download code from "import" to "pull"
[elogind.git] / man / daemon.xml
1 <?xml version='1.0'?> <!--*-nxml-*-->
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4
5 <!--
6   This file is part of systemd.
7
8   Copyright 2010 Lennart Poettering
9
10   systemd is free software; you can redistribute it and/or modify it
11   under the terms of the GNU Lesser General Public License as published by
12   the Free Software Foundation; either version 2.1 of the License, or
13   (at your option) any later version.
14
15   systemd is distributed in the hope that it will be useful, but
16   WITHOUT ANY WARRANTY; without even the implied warranty of
17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18   Lesser General Public License for more details.
19
20   You should have received a copy of the GNU Lesser General Public License
21   along with systemd; If not, see <http://www.gnu.org/licenses/>.
22 -->
23
24 <refentry id="daemon">
25
26   <refentryinfo>
27     <title>daemon</title>
28     <productname>systemd</productname>
29
30     <authorgroup>
31       <author>
32         <contrib>Developer</contrib>
33         <firstname>Lennart</firstname>
34         <surname>Poettering</surname>
35         <email>lennart@poettering.net</email>
36       </author>
37     </authorgroup>
38   </refentryinfo>
39
40   <refmeta>
41     <refentrytitle>daemon</refentrytitle>
42     <manvolnum>7</manvolnum>
43   </refmeta>
44
45   <refnamediv>
46     <refname>daemon</refname>
47     <refpurpose>Writing and packaging system daemons</refpurpose>
48   </refnamediv>
49
50   <refsect1>
51     <title>Description</title>
52
53     <para>A daemon is a service process that runs in the background
54     and supervises the system or provides functionality to other
55     processes. Traditionally, daemons are implemented following a
56     scheme originating in SysV Unix. Modern daemons should follow a
57     simpler yet more powerful scheme (here called "new-style"
58     daemons), as implemented by
59     <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
60     This manual page covers both schemes, and in particular includes
61     recommendations for daemons that shall be included in the systemd
62     init system.</para>
63
64     <refsect2>
65       <title>SysV Daemons</title>
66
67       <para>When a traditional SysV daemon starts, it should execute
68       the following steps as part of the initialization. Note that
69       these steps are unnecessary for new-style daemons (see below),
70       and should only be implemented if compatibility with SysV is
71       essential.</para>
72
73       <orderedlist>
74         <listitem><para>Close all open file descriptors except
75         standard input, output, and error (i.e. the first three file
76         descriptors 0, 1, 2). This ensures that no accidentally passed
77         file descriptor stays around in the daemon process. On Linux,
78         this is best implemented by iterating through
79         <filename>/proc/self/fd</filename>, with a fallback of
80         iterating from file descriptor 3 to the value returned by
81         <function>getrlimit()</function> for
82         <constant>RLIMIT_NOFILE</constant>. </para></listitem>
83
84         <listitem><para>Reset all signal handlers to their default.
85         This is best done by iterating through the available signals
86         up to the limit of <constant>_NSIG</constant> and resetting
87         them to <constant>SIG_DFL</constant>.</para></listitem>
88
89         <listitem><para>Reset the signal mask
90         using
91         <function>sigprocmask()</function>.</para></listitem>
92
93         <listitem><para>Sanitize the environment block, removing or
94         resetting environment variables that might negatively impact
95         daemon runtime.</para></listitem>
96
97         <listitem><para>Call <function>fork()</function>, to create a
98         background process.</para></listitem>
99
100         <listitem><para>In the child, call
101         <function>setsid()</function> to detach from any terminal and
102         create an independent session.</para></listitem>
103
104         <listitem><para>In the child, call <function>fork()</function>
105         again, to ensure that the daemon can never re-acquire a
106         terminal again.</para></listitem>
107
108         <listitem><para>Call <function>exit()</function> in the first
109         child, so that only the second child (the actual daemon
110         process) stays around. This ensures that the daemon process is
111         re-parented to init/PID 1, as all daemons should
112         be.</para></listitem>
113
114         <listitem><para>In the daemon process, connect
115         <filename>/dev/null</filename> to standard input, output, and
116         error.</para></listitem>
117
118         <listitem><para>In the daemon process, reset the umask to 0,
119         so that the file modes passed to <function>open()</function>,
120         <function>mkdir()</function> and suchlike directly control the
121         access mode of the created files and
122         directories.</para></listitem>
123
124         <listitem><para>In the daemon process, change the current
125         directory to the root directory (/), in order to avoid that
126         the daemon involuntarily blocks mount points from being
127         unmounted.</para></listitem>
128
129         <listitem><para>In the daemon process, write the daemon PID
130         (as returned by <function>getpid()</function>) to a PID file,
131         for example <filename>/run/foobar.pid</filename> (for a
132         hypothetical daemon "foobar") to ensure that the daemon cannot
133         be started more than once. This must be implemented in
134         race-free fashion so that the PID file is only updated when it
135         is verified at the same time that the PID previously stored in
136         the PID file no longer exists or belongs to a foreign
137         process.</para></listitem>
138
139         <listitem><para>In the daemon process, drop privileges, if
140         possible and applicable.</para></listitem>
141
142         <listitem><para>From the daemon process, notify the original
143         process started that initialization is complete. This can be
144         implemented via an unnamed pipe or similar communication
145         channel that is created before the first
146         <function>fork()</function> and hence available in both the
147         original and the daemon process.</para></listitem>
148
149         <listitem><para>Call <function>exit()</function> in the
150         original process. The process that invoked the daemon must be
151         able to rely on that this <function>exit()</function> happens
152         after initialization is complete and all external
153         communication channels are established and
154         accessible.</para></listitem>
155       </orderedlist>
156
157       <para>The BSD <function>daemon()</function> function should not
158       be used, as it implements only a subset of these steps.</para>
159
160       <para>A daemon that needs to provide compatibility with SysV
161       systems should implement the scheme pointed out above. However,
162       it is recommended to make this behavior optional and
163       configurable via a command line argument to ease debugging as
164       well as to simplify integration into systems using
165       systemd.</para>
166     </refsect2>
167
168     <refsect2>
169       <title>New-Style Daemons</title>
170
171       <para>Modern services for Linux should be implemented as
172       new-style daemons. This makes it easier to supervise and control
173       them at runtime and simplifies their implementation.</para>
174
175       <para>For developing a new-style daemon, none of the
176       initialization steps recommended for SysV daemons need to be
177       implemented. New-style init systems such as systemd make all of
178       them redundant. Moreover, since some of these steps interfere
179       with process monitoring, file descriptor passing and other
180       functionality of the init system, it is recommended not to
181       execute them when run as new-style service.</para>
182
183       <para>Note that new-style init systems guarantee execution of
184       daemon processes in a clean process context: it is guaranteed
185       that the environment block is sanitized, that the signal
186       handlers and mask is reset and that no left-over file
187       descriptors are passed. Daemons will be executed in their own
188       session, with standard input/output/error connected to
189       <filename>/dev/null</filename> unless otherwise configured. The
190       umask is reset.
191       </para>
192
193       <para>It is recommended for new-style daemons to implement the
194       following:</para>
195
196       <orderedlist>
197         <listitem><para>If <constant>SIGTERM</constant> is received,
198         shut down the daemon and exit cleanly.</para></listitem>
199
200         <listitem><para>If <constant>SIGHUP</constant> is received,
201         reload the configuration files, if this
202         applies.</para></listitem>
203
204         <listitem><para>Provide a correct exit code from the main
205         daemon process, as this is used by the init system to detect
206         service errors and problems. It is recommended to follow the
207         exit code scheme as defined in the <ulink
208         url="http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html">LSB
209         recommendations for SysV init
210         scripts</ulink>.</para></listitem>
211
212         <listitem><para>If possible and applicable, expose the
213         daemon's control interface via the D-Bus IPC system and grab a
214         bus name as last step of initialization.</para></listitem>
215
216         <listitem><para>For integration in systemd, provide a
217         <filename>.service</filename> unit file that carries
218         information about starting, stopping and otherwise maintaining
219         the daemon. See
220         <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
221         for details.</para></listitem>
222
223         <listitem><para>As much as possible, rely on the init system's
224         functionality to limit the access of the daemon to files,
225         services and other resources, i.e. in the case of systemd,
226         rely on systemd's resource limit control instead of
227         implementing your own, rely on systemd's privilege dropping
228         code instead of implementing it in the daemon, and similar.
229         See
230         <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
231         for the available controls.</para></listitem>
232
233         <listitem><para>If D-Bus is used, make your daemon
234         bus-activatable by supplying a D-Bus service activation
235         configuration file. This has multiple advantages: your daemon
236         may be started lazily on-demand; it may be started in parallel
237         to other daemons requiring it -- which maximizes
238         parallelization and boot-up speed; your daemon can be
239         restarted on failure without losing any bus requests, as the
240         bus queues requests for activatable services. See below for
241         details.</para></listitem>
242
243         <listitem><para>If your daemon provides services to other
244         local processes or remote clients via a socket, it should be
245         made socket-activatable following the scheme pointed out
246         below. Like D-Bus activation, this enables on-demand starting
247         of services as well as it allows improved parallelization of
248         service start-up. Also, for state-less protocols (such as
249         syslog, DNS), a daemon implementing socket-based activation
250         can be restarted without losing a single request. See below
251         for details.</para></listitem>
252
253         <listitem><para>If applicable, a daemon should notify the init
254         system about startup completion or status updates via the
255         <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>
256         interface.</para></listitem>
257
258         <listitem><para>Instead of using the
259         <function>syslog()</function> call to log directly to the
260         system syslog service, a new-style daemon may choose to simply
261         log to standard error via <function>fprintf()</function>,
262         which is then forwarded to syslog by the init system. If log
263         levels are necessary, these can be encoded by prefixing
264         individual log lines with strings like
265         <literal>&lt;4&gt;</literal> (for log level 4 "WARNING" in the
266         syslog priority scheme), following a similar style as the
267         Linux kernel's <function>printk()</function> level system. For
268         details, see
269         <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>
270         and
271         <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para></listitem>
272
273       </orderedlist>
274
275       <para>These recommendations are similar but not identical to the
276       <ulink
277       url="https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html">Apple
278       MacOS X Daemon Requirements</ulink>.</para>
279     </refsect2>
280
281   </refsect1>
282   <refsect1>
283     <title>Activation</title>
284
285     <para>New-style init systems provide multiple additional
286     mechanisms to activate services, as detailed below. It is common
287     that services are configured to be activated via more than one
288     mechanism at the same time. An example for systemd:
289     <filename>bluetoothd.service</filename> might get activated either
290     when Bluetooth hardware is plugged in, or when an application
291     accesses its programming interfaces via D-Bus. Or, a print server
292     daemon might get activated when traffic arrives at an IPP port, or
293     when a printer is plugged in, or when a file is queued in the
294     printer spool directory. Even for services that are intended to be
295     started on system bootup unconditionally, it is a good idea to
296     implement some of the various activation schemes outlined below,
297     in order to maximize parallelization. If a daemon implements a
298     D-Bus service or listening socket, implementing the full bus and
299     socket activation scheme allows starting of the daemon with its
300     clients in parallel (which speeds up boot-up), since all its
301     communication channels are established already, and no request is
302     lost because client requests will be queued by the bus system (in
303     case of D-Bus) or the kernel (in case of sockets) until the
304     activation is completed.</para>
305
306     <refsect2>
307       <title>Activation on Boot</title>
308
309       <para>Old-style daemons are usually activated exclusively on
310       boot (and manually by the administrator) via SysV init scripts,
311       as detailed in the <ulink
312       url="http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html">LSB
313       Linux Standard Base Core Specification</ulink>. This method of
314       activation is supported ubiquitously on Linux init systems, both
315       old-style and new-style systems. Among other issues, SysV init
316       scripts have the disadvantage of involving shell scripts in the
317       boot process. New-style init systems generally employ updated
318       versions of activation, both during boot-up and during runtime
319       and using more minimal service description files.</para>
320
321       <para>In systemd, if the developer or administrator wants to
322       make sure that a service or other unit is activated
323       automatically on boot, it is recommended to place a symlink to
324       the unit file in the <filename>.wants/</filename> directory of
325       either <filename>multi-user.target</filename> or
326       <filename>graphical.target</filename>, which are normally used
327       as boot targets at system startup. See
328       <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
329       for details about the <filename>.wants/</filename> directories,
330       and
331       <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
332       for details about the two boot targets.</para>
333
334     </refsect2>
335
336     <refsect2>
337       <title>Socket-Based Activation</title>
338
339       <para>In order to maximize the possible parallelization and
340       robustness and simplify configuration and development, it is
341       recommended for all new-style daemons that communicate via
342       listening sockets to employ socket-based activation. In a
343       socket-based activation scheme, the creation and binding of the
344       listening socket as primary communication channel of daemons to
345       local (and sometimes remote) clients is moved out of the daemon
346       code and into the init system. Based on per-daemon
347       configuration, the init system installs the sockets and then
348       hands them off to the spawned process as soon as the respective
349       daemon is to be started. Optionally, activation of the service
350       can be delayed until the first inbound traffic arrives at the
351       socket to implement on-demand activation of daemons. However,
352       the primary advantage of this scheme is that all providers and
353       all consumers of the sockets can be started in parallel as soon
354       as all sockets are established. In addition to that, daemons can
355       be restarted with losing only a minimal number of client
356       transactions, or even any client request at all (the latter is
357       particularly true for state-less protocols, such as DNS or
358       syslog), because the socket stays bound and accessible during
359       the restart, and all requests are queued while the daemon cannot
360       process them.</para>
361
362       <para>New-style daemons which support socket activation must be
363       able to receive their sockets from the init system instead of
364       creating and binding them themselves. For details about the
365       programming interfaces for this scheme provided by systemd, see
366       <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
367       and
368       <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
369       For details about porting existing daemons to socket-based
370       activation, see below. With minimal effort, it is possible to
371       implement socket-based activation in addition to traditional
372       internal socket creation in the same codebase in order to
373       support both new-style and old-style init systems from the same
374       daemon binary.</para>
375
376       <para>systemd implements socket-based activation via
377       <filename>.socket</filename> units, which are described in
378       <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
379       When configuring socket units for socket-based activation, it is
380       essential that all listening sockets are pulled in by the
381       special target unit <filename>sockets.target</filename>. It is
382       recommended to place a
383       <varname>WantedBy=sockets.target</varname> directive in the
384       <literal>[Install]</literal> section to automatically add such a
385       dependency on installation of a socket unit. Unless
386       <varname>DefaultDependencies=no</varname> is set, the necessary
387       ordering dependencies are implicitly created for all socket
388       units. For more information about
389       <filename>sockets.target</filename>, see
390       <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
391       It is not necessary or recommended to place any additional
392       dependencies on socket units (for example from
393       <filename>multi-user.target</filename> or suchlike) when one is
394       installed in <filename>sockets.target</filename>.</para>
395     </refsect2>
396
397     <refsect2>
398       <title>Bus-Based Activation</title>
399
400       <para>When the D-Bus IPC system is used for communication with
401       clients, new-style daemons should employ bus activation so that
402       they are automatically activated when a client application
403       accesses their IPC interfaces. This is configured in D-Bus
404       service files (not to be confused with systemd service unit
405       files!). To ensure that D-Bus uses systemd to start-up and
406       maintain the daemon, use the <varname>SystemdService=</varname>
407       directive in these service files to configure the matching
408       systemd service for a D-Bus service. e.g.: For a D-Bus service
409       whose D-Bus activation file is named
410       <filename>org.freedesktop.RealtimeKit.service</filename>, make
411       sure to set
412       <varname>SystemdService=rtkit-daemon.service</varname> in that
413       file to bind it to the systemd service
414       <filename>rtkit-daemon.service</filename>. This is needed to
415       make sure that the daemon is started in a race-free fashion when
416       activated via multiple mechanisms simultaneously.</para>
417     </refsect2>
418
419     <refsect2>
420       <title>Device-Based Activation</title>
421
422       <para>Often, daemons that manage a particular type of hardware
423       should be activated only when the hardware of the respective
424       kind is plugged in or otherwise becomes available. In a
425       new-style init system, it is possible to bind activation to
426       hardware plug/unplug events. In systemd, kernel devices
427       appearing in the sysfs/udev device tree can be exposed as units
428       if they are tagged with the string <literal>systemd</literal>.
429       Like any other kind of unit, they may then pull in other units
430       when activated (i.e. plugged in) and thus implement device-based
431       activation. systemd dependencies may be encoded in the udev
432       database via the <varname>SYSTEMD_WANTS=</varname> property. See
433       <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>
434       for details. Often, it is nicer to pull in services from devices
435       only indirectly via dedicated targets. Example: Instead of
436       pulling in <filename>bluetoothd.service</filename> from all the
437       various bluetooth dongles and other hardware available, pull in
438       bluetooth.target from them and
439       <filename>bluetoothd.service</filename> from that target. This
440       provides for nicer abstraction and gives administrators the
441       option to enable <filename>bluetoothd.service</filename> via
442       controlling a <filename>bluetooth.target.wants/</filename>
443       symlink uniformly with a command like <command>enable</command>
444       of
445       <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
446       instead of manipulating the udev ruleset.</para>
447     </refsect2>
448
449     <refsect2>
450       <title>Path-Based Activation</title>
451
452       <para>Often, runtime of daemons processing spool files or
453       directories (such as a printing system) can be delayed until
454       these file system objects change state, or become non-empty.
455       New-style init systems provide a way to bind service activation
456       to file system changes. systemd implements this scheme via
457       path-based activation configured in <filename>.path</filename>
458       units, as outlined in
459       <citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
460     </refsect2>
461
462     <refsect2>
463       <title>Timer-Based Activation</title>
464
465       <para>Some daemons that implement clean-up jobs that are
466       intended to be executed in regular intervals benefit from
467       timer-based activation. In systemd, this is implemented via
468       <filename>.timer</filename> units, as described in
469       <citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
470     </refsect2>
471
472     <refsect2>
473       <title>Other Forms of Activation</title>
474
475       <para>Other forms of activation have been suggested and
476       implemented in some systems. However, there are often simpler or
477       better alternatives, or they can be put together of combinations
478       of the schemes above. Example: Sometimes, it appears useful to
479       start daemons or <filename>.socket</filename> units when a
480       specific IP address is configured on a network interface,
481       because network sockets shall be bound to the address. However,
482       an alternative to implement this is by utilizing the Linux
483       <constant>IP_FREEBIND</constant> socket option, as accessible
484       via <varname>FreeBind=yes</varname> in systemd socket files (see
485       <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
486       for details). This option, when enabled, allows sockets to be
487       bound to a non-local, not configured IP address, and hence
488       allows bindings to a particular IP address before it actually
489       becomes available, making such an explicit dependency to the
490       configured address redundant. Another often suggested trigger
491       for service activation is low system load. However, here too, a
492       more convincing approach might be to make proper use of features
493       of the operating system, in particular, the CPU or IO scheduler
494       of Linux. Instead of scheduling jobs from userspace based on
495       monitoring the OS scheduler, it is advisable to leave the
496       scheduling of processes to the OS scheduler itself. systemd
497       provides fine-grained access to the CPU and IO schedulers. If a
498       process executed by the init system shall not negatively impact
499       the amount of CPU or IO bandwidth available to other processes,
500       it should be configured with
501       <varname>CPUSchedulingPolicy=idle</varname> and/or
502       <varname>IOSchedulingClass=idle</varname>. Optionally, this may
503       be combined with timer-based activation to schedule background
504       jobs during runtime and with minimal impact on the system, and
505       remove it from the boot phase itself.</para>
506     </refsect2>
507
508   </refsect1>
509   <refsect1>
510     <title>Integration with Systemd</title>
511
512     <refsect2>
513       <title>Writing Systemd Unit Files</title>
514
515       <para>When writing systemd unit files, it is recommended to
516       consider the following suggestions:</para>
517
518       <orderedlist>
519         <listitem><para>If possible, do not use the
520         <varname>Type=forking</varname> setting in service files. But
521         if you do, make sure to set the PID file path using
522         <varname>PIDFile=</varname>. See
523         <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
524         for details.</para></listitem>
525
526         <listitem><para>If your daemon registers a D-Bus name on the
527         bus, make sure to use <varname>Type=dbus</varname> in the
528         service file if possible.</para></listitem>
529
530         <listitem><para>Make sure to set a good human-readable
531         description string with
532         <varname>Description=</varname>.</para></listitem>
533
534         <listitem><para>Do not disable
535         <varname>DefaultDependencies=</varname>, unless you really
536         know what you do and your unit is involved in early boot or
537         late system shutdown.</para></listitem>
538
539         <listitem><para>Normally, little if any dependencies should
540         need to be defined explicitly. However, if you do configure
541         explicit dependencies, only refer to unit names listed on
542         <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
543         or names introduced by your own package to keep the unit file
544         operating system-independent.</para></listitem>
545
546         <listitem><para>Make sure to include an
547         <literal>[Install]</literal> section including installation
548         information for the unit file. See
549         <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
550         for details. To activate your service on boot, make sure to
551         add a <varname>WantedBy=multi-user.target</varname> or
552         <varname>WantedBy=graphical.target</varname> directive. To
553         activate your socket on boot, make sure to add
554         <varname>WantedBy=sockets.target</varname>. Usually, you also
555         want to make sure that when your service is installed, your
556         socket is installed too, hence add
557         <varname>Also=foo.socket</varname> in your service file
558         <filename>foo.service</filename>, for a hypothetical program
559         <filename>foo</filename>.</para></listitem>
560
561       </orderedlist>
562     </refsect2>
563
564     <refsect2>
565       <title>Installing Systemd Service Files</title>
566
567       <para>At the build installation time (e.g. <command>make
568       install</command> during package build), packages are
569       recommended to install their systemd unit files in the directory
570       returned by <command>pkg-config systemd
571       --variable=systemdsystemunitdir</command> (for system services)
572       or <command>pkg-config systemd
573       --variable=systemduserunitdir</command> (for user services).
574       This will make the services available in the system on explicit
575       request but not activate them automatically during boot.
576       Optionally, during package installation (e.g. <command>rpm
577       -i</command> by the administrator), symlinks should be created
578       in the systemd configuration directories via the
579       <command>enable</command> command of the
580       <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
581       tool to activate them automatically on boot.</para>
582
583       <para>Packages using
584       <citerefentry project='die-net'><refentrytitle>autoconf</refentrytitle><manvolnum>1</manvolnum></citerefentry>
585       are recommended to use a configure script
586       excerpt like the following to determine the
587       unit installation path during source
588       configuration:</para>
589
590       <programlisting>PKG_PROG_PKG_CONFIG
591 AC_ARG_WITH([systemdsystemunitdir],
592      [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],,
593      [with_systemdsystemunitdir=auto])
594 AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
595      def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
596
597      AS_IF([test "x$def_systemdsystemunitdir" = "x"],
598    [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
599     [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
600     with_systemdsystemunitdir=no],
601    [with_systemdsystemunitdir="$def_systemdsystemunitdir"])])
602 AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
603       [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
604 AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$with_systemdsystemunitdir" != "xno"])</programlisting>
605
606       <para>This snippet allows automatic
607       installation of the unit files on systemd
608       machines, and optionally allows their
609       installation even on machines lacking
610       systemd. (Modification of this snippet for the
611       user unit directory is left as an exercise for the
612       reader.)</para>
613
614       <para>Additionally, to ensure that
615       <command>make distcheck</command> continues to
616       work, it is recommended to add the following
617       to the top-level <filename>Makefile.am</filename>
618       file in
619       <citerefentry project='die-net'><refentrytitle>automake</refentrytitle><manvolnum>1</manvolnum></citerefentry>-based
620       projects:</para>
621
622       <programlisting>DISTCHECK_CONFIGURE_FLAGS = \
623   --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir)</programlisting>
624
625       <para>Finally, unit files should be installed in the system with an automake excerpt like the following:</para>
626
627       <programlisting>if HAVE_SYSTEMD
628 systemdsystemunit_DATA = \
629   foobar.socket \
630   foobar.service
631 endif</programlisting>
632
633       <para>In the
634       <citerefentry project='die-net'><refentrytitle>rpm</refentrytitle><manvolnum>8</manvolnum></citerefentry>
635       <filename>.spec</filename> file, use snippets like the following
636       to enable/disable the service during
637       installation/deinstallation. This makes use of the RPM macros
638       shipped along systemd. Consult the packaging guidelines of your
639       distribution for details and the equivalent for other package
640       managers.</para>
641
642       <para>At the top of the file:</para>
643
644       <programlisting>BuildRequires: systemd
645 %{?systemd_requires}</programlisting>
646
647       <para>And as scriptlets, further down:</para>
648
649       <programlisting>%post
650 %systemd_post foobar.service foobar.socket
651
652 %preun
653 %systemd_preun foobar.service foobar.socket
654
655 %postun
656 %systemd_postun</programlisting>
657
658       <para>If the service shall be restarted during upgrades, replace
659       the <literal>%postun</literal> scriptlet above with the
660       following:</para>
661
662       <programlisting>%postun
663 %systemd_postun_with_restart foobar.service</programlisting>
664
665       <para>Note that <literal>%systemd_post</literal> and
666       <literal>%systemd_preun</literal> expect the names of all units
667       that are installed/removed as arguments, separated by spaces.
668       <literal>%systemd_postun</literal> expects no arguments.
669       <literal>%systemd_postun_with_restart</literal> expects the
670       units to restart as arguments.</para>
671
672       <para>To facilitate upgrades from a package version that shipped
673       only SysV init scripts to a package version that ships both a
674       SysV init script and a native systemd service file, use a
675       fragment like the following:</para>
676
677       <programlisting>%triggerun -- foobar &lt; 0.47.11-1
678 if /sbin/chkconfig --level 5 foobar ; then
679   /bin/systemctl --no-reload enable foobar.service foobar.socket >/dev/null 2>&amp;1 || :
680 fi</programlisting>
681
682       <para>Where 0.47.11-1 is the first package version that includes
683       the native unit file. This fragment will ensure that the first
684       time the unit file is installed, it will be enabled if and only
685       if the SysV init script is enabled, thus making sure that the
686       enable status is not changed. Note that
687       <command>chkconfig</command> is a command specific to Fedora
688       which can be used to check whether a SysV init script is
689       enabled. Other operating systems will have to use different
690       commands here.</para>
691     </refsect2>
692   </refsect1>
693
694   <refsect1>
695     <title>Porting Existing Daemons</title>
696
697     <para>Since new-style init systems such as systemd are compatible
698     with traditional SysV init systems, it is not strictly necessary
699     to port existing daemons to the new style. However, doing so
700     offers additional functionality to the daemons as well as
701     simplifying integration into new-style init systems.</para>
702
703     <para>To port an existing SysV compatible daemon, the following
704     steps are recommended:</para>
705
706     <orderedlist>
707       <listitem><para>If not already implemented, add an optional
708       command line switch to the daemon to disable daemonization. This
709       is useful not only for using the daemon in new-style init
710       systems, but also to ease debugging.</para></listitem>
711
712       <listitem><para>If the daemon offers interfaces to other
713       software running on the local system via local
714       <constant>AF_UNIX</constant> sockets, consider implementing
715       socket-based activation (see above). Usually, a minimal patch is
716       sufficient to implement this: Extend the socket creation in the
717       daemon code so that
718       <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
719       is checked for already passed sockets first. If sockets are
720       passed (i.e. when <function>sd_listen_fds()</function> returns a
721       positive value), skip the socket creation step and use the
722       passed sockets. Secondly, ensure that the file system socket
723       nodes for local <constant>AF_UNIX</constant> sockets used in the
724       socket-based activation are not removed when the daemon shuts
725       down, if sockets have been passed. Third, if the daemon normally
726       closes all remaining open file descriptors as part of its
727       initialization, the sockets passed from the init system must be
728       spared. Since new-style init systems guarantee that no left-over
729       file descriptors are passed to executed processes, it might be a
730       good choice to simply skip the closing of all remaining open
731       file descriptors if sockets are passed.</para></listitem>
732
733       <listitem><para>Write and install a systemd unit file for the
734       service (and the sockets if socket-based activation is used, as
735       well as a path unit file, if the daemon processes a spool
736       directory), see above for details.</para></listitem>
737
738       <listitem><para>If the daemon exposes interfaces via D-Bus,
739       write and install a D-Bus activation file for the service, see
740       above for details.</para></listitem>
741     </orderedlist>
742   </refsect1>
743
744   <refsect1>
745     <title>Placing Daemon Data</title>
746
747     <para>It is recommended to follow the general guidelines for
748     placing package files, as discussed in
749     <citerefentry><refentrytitle>file-hierarchy</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
750   </refsect1>
751
752   <refsect1>
753     <title>See Also</title>
754     <para>
755       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
756       <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
757       <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
758       <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
759       <citerefentry><refentrytitle>daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
760       <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
761       <citerefentry><refentrytitle>file-hierarchy</refentrytitle><manvolnum>7</manvolnum></citerefentry>
762     </para>
763   </refsect1>
764
765 </refentry>