chiark / gitweb /
units: introduce new timers.target and paths.target to hook timer/path units into...
authorLennart Poettering <lennart@poettering.net>
Mon, 25 Mar 2013 20:20:08 +0000 (21:20 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 25 Mar 2013 20:28:30 +0000 (21:28 +0100)
13 files changed:
Makefile.am
man/bootup.xml
man/systemd.special.xml
src/core/path.c
src/core/service.c
src/core/socket.c
src/core/special.h
src/core/timer.c
units/basic.target
units/paths.target [new file with mode: 0644]
units/systemd-ask-password-console.path
units/systemd-ask-password-wall.path
units/timers.target [new file with mode: 0644]

index 2a1a08c..8569983 100644 (file)
@@ -193,8 +193,8 @@ SHUTDOWN_TARGET_WANTS =
 LOCAL_FS_TARGET_WANTS =
 MULTI_USER_TARGET_WANTS =
 SYSINIT_TARGET_WANTS =
-BASIC_TARGET_WANTS =
 SOCKETS_TARGET_WANTS =
+TIMERS_TARGET_WANTS =
 
 SYSTEM_UNIT_ALIASES =
 USER_UNIT_ALIASES =
@@ -211,8 +211,8 @@ install-target-wants-hook:
        what="$(LOCAL_FS_TARGET_WANTS)" && wants=local-fs.target && $(add-wants)
        what="$(MULTI_USER_TARGET_WANTS)" && wants=multi-user.target && $(add-wants)
        what="$(SYSINIT_TARGET_WANTS)" && wants=sysinit.target && $(add-wants)
-       what="$(BASIC_TARGET_WANTS)" && wants=basic.target && $(add-wants)
        what="$(SOCKETS_TARGET_WANTS)" && wants=sockets.target && $(add-wants)
+       what="$(TIMERS_TARGET_WANTS)" && wants=timers.target && $(add-wants)
 
 define add-wants
        [ -z "$$what" ] || ( \
@@ -371,6 +371,8 @@ dist_systemunit_DATA = \
        units/sigpwr.target \
        units/sleep.target \
        units/sockets.target \
+       units/timers.target \
+       units/paths.target \
        units/suspend.target \
        units/swap.target \
        units/systemd-initctl.socket \
@@ -3916,7 +3918,7 @@ SYSINIT_TARGET_WANTS += \
        systemd-tmpfiles-setup.service \
        systemd-sysctl.service \
        systemd-ask-password-console.path
-BASIC_TARGET_WANTS += \
+TIMERS_TARGET_WANTS += \
        systemd-tmpfiles-clean.timer
 
 if HAVE_SYSV_COMPAT
@@ -3938,6 +3940,8 @@ SYSTEM_UNIT_ALIASES += \
 USER_UNIT_ALIASES += \
        $(systemunitdir)/shutdown.target shutdown.target \
        $(systemunitdir)/sockets.target sockets.target \
+       $(systemunitdir)/timers.target timers.target \
+       $(systemunitdir)/paths.target paths.target \
        $(systemunitdir)/bluetooth.target bluetooth.target \
        $(systemunitdir)/printer.target printer.target \
        $(systemunitdir)/sound.target sound.target
index 6592352..a596e85 100644 (file)
         <refsect1>
                 <title>Description</title>
 
-                <para>A number of different components are involved in the
-                system boot. Immediately after power-up, the system
-                BIOS will do minimal hardware initialization, and hand
-                control over to a boot loader stored on a persistent
-                storage device. This boot loader will then invoke an
-                OS kernel from disk (or the network). In the Linux
-                case this kernel now (optionally) extracts and
+                <para>A number of different components are involved in
+                the system boot. Immediately after power-up, the
+                system BIOS will do minimal hardware initialization,
+                and hand control over to a boot loader stored on a
+                persistent storage device. This boot loader will then
+                invoke an OS kernel from disk (or the network). In the
+                Linux case this kernel (optionally) extracts and
                 executes an initial RAM disk image (initrd) such as
                 <citerefentry><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>
-                which looks for the root file system. After the root
-                file system is found and mounted the initrd hands over
-                control to the system manager (such as
+                which looks for the root file system (possibly using
+                <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                for this). After the root file system is found and
+                mounted the initrd hands over control to the host's
+                system manager (such as
                 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>)
                 stored on the OS image which is then responsible for
                 probing all remaining hardware, mounting all necessary
                                                v
                                         sysinit.target
                                                |
-                             _________________/|\___________________
-                            /                  |                    \
-                            |                  |                    |
-                            v                  |                    v
-                        (various               |              rescue.service
-                       sockets...)             |                    |
-                            |                  |                    v
-                            v                  |              <emphasis>rescue.target</emphasis>
-                     sockets.target            |
-                            |                  |
-                            \_________________ |
-                                              \|
+          ____________________________________/|\________________________________________
+         /                  |                  |                    |                    \
+         |                  |                  |                    |                    |
+         v                  v                  |                    v                    v
+     (various           (various               |                (various          rescue.service
+    timers...)          paths...)              |               sockets...)               |
+         |                  |                  |                    |                    v
+         v                  v                  |                    v              <emphasis>rescue.target</emphasis>
+   timers.target      paths.target             |             sockets.target
+         |                  |                  |                    |
+         \__________________|_________________ | ___________________/
+                                              \|/
                                                v
                                          basic.target
                                                |
-            __________________________________/|                                 emergency.service
-           /                |                  |                                         |
-           |                |                  |                                         v
-           v                v                  v                                 <emphasis>emergency.target</emphasis>
-       display-      (various system    (various system
  manager.service       services           services)
-           |           required for            |
-           |          graphical UIs)           v
-           |                |           <emphasis>multi-user.target</emphasis>
-           |                |                  |
-           \_______________ | _________________/
+          ____________________________________/|                                 emergency.service
+         /                  |                  |                                         |
+         |                  |                  |                                         v
+         v                  v                  v                                 <emphasis>emergency.target</emphasis>
+     display-        (various system    (various system
manager.service         services           services)
+         |             required for            |
+         |            graphical UIs)           v
+         |                  |           <emphasis>multi-user.target</emphasis>
+         |                  |                  |
+         \_________________ | _________________/
                            \|/
                             v
-                    <emphasis>graphical.target</emphasis></programlisting>
+                  <emphasis>graphical.target</emphasis></programlisting>
 
                 <para>Target units that are commonly used as boot
                 targets are <emphasis>emphasized</emphasis>. These
         </refsect1>
 
         <refsect1>
-                <title>Initrd System Manager Bootup</title>
-                <para>The default target in the initrd is the initrd.target. The bootup process is
-                identical to the System Manager Bootup until it reaches basic.target. From there,
-                systemd approaches the special initrd.target. If the root device can be mounted at
-                /sysroot, the sysroot.mount unit becomes active and the initrd-root-fs.target is
-                reached.
-                The initrd-parse-etc.service scans /sysroot/etc/fstab for a possible /usr mountpoint
-                and additional entries marked with the <emphasis>x-initrd.mount</emphasis> option.
-                All entries found are mounted below /sysroot, and the initrd-fs.target is reached.
-                The initrd-cleanup.service isolates to the initrd-switch-root.target, where cleanup
-                services can run. As the very last step, the initrd-switch-root.service is activated,
-                which will cause the system to switch its root to /sysroot.
+                <title>Bootup in the Initial RAM Disk (initrd)</title>
+                <para>The initial RAM disk implementation (initrd) can
+                be set up using systemd as well. In this case boot up
+                inside the initrd follows the following
+                structure.</para>
+
+                <para>The default target in the initrd is
+                <filename>initrd.target</filename>. The bootup process
+                begins identical to the system manager bootup (see
+                above) until it reaches
+                <filename>basic.target</filename>. From there, systemd
+                approaches the special target
+                <filename>initrd.target</filename>. If the root device
+                can be mounted at <filename>/sysroot</filename>, the
+                <filename>sysroot.mount</filename> unit becomes active
+                and <filename>initrd-root-fs.target</filename> is
+                reached.  The service
+                <filename>initrd-parse-etc.service</filename> scans
+                <filename>/sysroot/etc/fstab</filename> for a possible
+                <filename>/usr</filename> mount point and additional
+                entries marked with the
+                <emphasis>x-initrd.mount</emphasis> option. All
+                entries found are mounted below
+                <filename>/sysroot</filename>, and
+                <filename>initrd-fs.target</filename> is reached. The
+                service <filename>initrd-cleanup.service</filename>
+                isolates to the
+                <filename>initrd-switch-root.target</filename>, where
+                cleanup services can run. As the very last step, the
+                <filename>initrd-switch-root.service</filename> is
+                activated, which will cause the system to switch its
+                root to <filename>/sysroot</filename>.
                 </para>
 
-<programlisting>
-                             (identical to System Manager Bootup)
-                                               :
+<programlisting>                                               : (beginning identical to above)
                                                :
                                                v
                                          basic.target
                        |             initrd-root-fs.target
                        |                       |
                        |                       v
-                       |            initrd-parse-etc.service
-           (custom initrd services)            |
-                       |                       v
+                       v            initrd-parse-etc.service
+                (custom initrd                 |
+                 services...)                  v
                        |            (sysroot-usr.mount and
                        |             various mounts marked
                        |               with fstab option
-                       |                x-initrd.mount)
+                       |              x-initrd.mount...)
                        |                       |
                        |                       v
                        |                initrd-fs.target
                                                |
                                                v
                         ______________________/|
-                       /                       |
+                       /                       v
                        |        initrd-udevadm-cleanup-db.service
-                       |                       |
-           (custom initrd services)            |
-                       |                       |
+                       v                       |
+                (custom initrd                 |
+                 services...)                  |
                        \______________________ |
                                               \|
                                                v
                                    initrd-switch-root.service
                                                |
                                                v
-                                          switch-root
-</programlisting>
+                                     Transition to Host OS</programlisting>
         </refsect1>
 
 
         <refsect1>
                 <title>System Manager Shutdown</title>
 
-                <para>System shutdown also consists of various target
-                units with some minimal ordering structure
-                applied:</para>
+                <para>System shutdown with systemd also consists of
+                various target units with some minimal ordering
+                structure applied:</para>
 
 
 
index 67a81b6..8a72426 100644 (file)
@@ -73,6 +73,7 @@
                 <filename>network.target</filename>,
                 <filename>nss-lookup.target</filename>,
                 <filename>nss-user-lookup.target</filename>,
+                <filename>paths.target</filename>,
                 <filename>poweroff.target</filename>,
                 <filename>printer.target</filename>,
                 <filename>reboot.target</filename>,
@@ -97,6 +98,7 @@
                 <filename>syslog.socket</filename>,
                 <filename>system-update.target</filename>,
                 <filename>time-sync.target</filename>,
+                <filename>timers.target</filename>,
                 <filename>umount.target</filename></para>
         </refsynopsisdiv>
 
                                 <term><filename>basic.target</filename></term>
                                 <listitem>
                                         <para>A special target unit
-                                        covering early boot-up.</para>
+                                        covering basic boot-up.</para>
                                         <para>systemd automatically
                                         adds dependencies of the types
-                                        Requires and After for this
-                                        target unit to all SysV
-                                        service units configured for
-                                        runlevel 1 to 5.</para>
-                                        <para>Usually this should pull-in
-                                        all sockets, mount points,
-                                        swap devices and other basic
+                                        <varname>Requires=</varname>
+                                        and <varname>After=</varname>
+                                        for this target unit to all
+                                        services (except for those
+                                        with
+                                        <varname>DefaultDependencies=no</varname>).</para>
+
+                                        <para>Usually this should
+                                        pull-in all mount points, swap
+                                        devices, sockets, timers, and
+                                        path units and other basic
                                         initialization necessary for
-                                        the general purpose
-                                        daemons. Most normal daemons
-                                        should have dependencies of
-                                        type After and Requires on
-                                        this unit.</para>
+                                        general purpose
+                                        daemons.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                 <listitem>
                                         <para>This target is started
                                         automatically as soon as a
-                                        bluetooth controller is
+                                        Bluetooth controller is
                                         plugged in or becomes
                                         available at boot.</para>
+
+                                        <para>This may be used to pull
+                                        in Bluetooth management
+                                        daemons dynamically when
+                                        Bluetooth hardware is
+                                        found.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                 <term><filename>dbus.service</filename></term>
                                 <listitem>
                                         <para>A special unit for the
-                                        D-Bus system bus. As soon as
+                                        D-Bus bus daemon. As soon as
                                         this service is fully started
                                         up systemd will connect to it
                                         and register its
                                         <para>A special unit for the
                                         D-Bus system bus socket. All
                                         units with
-                                        <literal>Type=dbus</literal>
+                                        <varname>Type=dbus</varname>
                                         automatically gain a
                                         dependency on this
                                         unit.</para>
                                         <filename>multi-user.target</filename>
                                         or
                                         <filename>graphical.target</filename>.</para>
+
                                         <para>The default unit systemd
                                         starts at bootup can be
                                         overridden with the
                                 <term><filename>getty.target</filename></term>
                                 <listitem>
                                         <para>A special target unit
-                                        that pulls in all local TTY
-                                        <filename>getty</filename> instances.
+                                        that pulls in statically
+                                        configured local TTY
+                                        <filename>getty</filename>
+                                        instances.
                                         </para>
                                 </listitem>
                         </varlistentry>
                                         <filename>multi-user.target</filename>.</para>
 
                                         <para>Units that are needed
-                                        for graphical login shall add
-                                        Wants dependencies for their
-                                        unit to this unit (or
+                                        for graphical logins shall add
+                                        <varname>Wants=</varname>
+                                        dependencies for their unit to
+                                        this unit (or
                                         <filename>multi-user.target</filename>)
-                                        during installation.</para>
+                                        during installation. This is
+                                        best configured via
+                                        <varname>WantedBy=graphical.target</varname>
+                                        in the unit's
+                                        <literal>[Install]</literal>
+                                        section.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                 <term><filename>halt.target</filename></term>
                                 <listitem>
                                         <para>A special target unit
-                                        for shutting down and halting the system.</para>
+                                        for shutting down and halting
+                                        the system. Note that this
+                                        target is distinct from
+                                        <filename>poweroff.target</filename>
+                                        in that it generally really
+                                        just halts the system rather
+                                        than powering it down.</para>
 
                                         <para>Applications wanting to
                                         halt the system should start
                         <varlistentry>
                                 <term><filename>initrd-fs.target</filename></term>
                                 <listitem>
-                                        <para>systemd automatically
-                                        adds dependencies of type
-                                        Before to sysroot-usr.mount and
-                                        all mount points fround in
+                                        <para><citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                                        automatically adds
+                                        dependencies of type
+                                        <varname>Before=</varname> to
+                                        <filename>sysroot-usr.mount</filename>
+                                        and all mount points fround in
                                         <filename>/etc/fstab</filename>
                                         that have the
                                         <option>auto</option> and
                                         <option>x-initrd.mount</option>
                                         mount options set.
-                                        See also <literal>systemd-fstab-generator</literal>.
                                         </para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                 <term><filename>local-fs.target</filename></term>
                                 <listitem>
-                                        <para>systemd automatically
+                                        <para><citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                                        automatically adds
+                                        dependencies of type
+                                        <varname>Before=</varname> to
+                                        all mount units that refer to
+                                        local mount points for this
+                                        target unit. In addition, it
                                         adds dependencies of type
-                                        After to all mount units that
-                                        refer to local mount points
-                                        for this target unit. In
-                                        addition, systemd adds
-                                        dependencies of type Wants to
+                                        <varname>Wants=</varname> to
                                         this target unit for those
                                         mounts listed in
                                         <filename>/etc/fstab</filename>
                                         that have the
-                                        <option>auto</option> and
-                                        <option>comment=systemd.mount</option>
-                                        mount options set.</para>
+                                        <option>auto</option> mount
+                                        option set.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
 
                                         <para>Units that are needed
                                         for a multi-user system shall
-                                        add Wants dependencies to
-                                        this unit for their unit during
-                                        installation.</para>
+                                        add <varname>Wants=</varname>
+                                        dependencies for their unit to
+                                        this unit during
+                                        installation. This is best
+                                        configured via
+                                        <varname>WantedBy=multi-uer.target</varname>
+                                        in the unit's
+                                        <literal>[Install]</literal>
+                                        section.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                 <listitem>
                                         <para>systemd automatically
                                         adds dependencies of type
-                                        After for this target unit to
-                                        all SysV init script service
-                                        units with an LSB header
-                                        referring to the
+                                        <varname>After=</varname> for
+                                        this target unit to all SysV
+                                        init script service units with
+                                        an LSB header referring to the
                                         <literal>$network</literal>
                                         facility.</para>
 
                                         <filename>nss-user-lookup.target</filename>
                                         should be used. systemd
                                         automatically adds
-                                        dependencies of type After for
+                                        dependencies of type
+                                        <varname>After=</varname> for
                                         this target unit to all SysV
                                         init script service units with
                                         an LSB header referring to the
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
+                                <term><filename>paths.target</filename></term>
+                                <listitem>
+                                        <para>A special target unit
+                                        that sets up all path units
+                                        (see
+                                        <citerefentry><refentrytitle>systemd.path</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                                        for details) that shall be
+                                        active after boot.</para>
+
+                                        <para>It is recommended that
+                                        path units installed by
+                                        applications get pulled in via
+                                        <varname>Wants=</varname>
+                                        dependencies from this
+                                        unit. This is best configured
+                                        via a
+                                        <varname>WantedBy=paths.target</varname>
+                                        in the path unit's
+                                        <literal>[Install]</literal>
+                                        section.</para>
+                                </listitem>
+                        </varlistentry>
+                        <varlistentry>
                                 <term><filename>poweroff.target</filename></term>
                                 <listitem>
                                         <para>A special target unit
                                         printer is plugged in or
                                         becomes available at
                                         boot.</para>
+
+                                        <para>This may be used to pull
+                                        in printer management
+                                        daemons dynamically when
+                                        printer hardware is
+                                        found.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
 
                                         <para>systemd automatically
                                         adds dependencies of type
-                                        After for this target unit to
-                                        all SysV init script service
-                                        units with an LSB header
-                                        referring to the
+                                        <varname>After=</varname> for
+                                        this target unit to all SysV
+                                        init script service units with
+                                        an LSB header referring to the
                                         <literal>$remote_fs</literal>
                                         facility.</para>
                                 </listitem>
                         <varlistentry>
                                 <term><filename>initrd-root-fs.target</filename></term>
                                 <listitem>
-                                        <para>systemd automatically
-                                        adds dependencies of type
-                                        Before to the sysroot.mount unit,
-                                        which is generated from the kernel command
-                                        line by the <literal>systemd-fstab-generator</literal>.
+                                        <para><citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                                        automatically adds
+                                        dependencies of type
+                                        <varname>Before=</varname> to
+                                        the
+                                        <filename>sysroot.mount</filename>
+                                        unit, which is generated from
+                                        the kernel command line.
                                         </para>
                                 </listitem>
                         </varlistentry>
                                 <listitem>
                                         <para>systemd automatically
                                         adds dependencies of type
-                                        After for this target unit to
-                                        all SysV init script service
-                                        units with an LSB header
-                                        referring to the
+                                        <varname>After=</varname> for
+                                        this target unit to all SysV
+                                        init script service units with
+                                        an LSB header referring to the
                                         <literal>$portmap</literal>
                                         facility.</para>
                                 </listitem>
 
                                         <para>Services that shall be
                                         terminated on system shutdown
-                                        shall add Conflicts
+                                        shall add <varname>Conflicts=</varname>
                                         dependencies to this unit for
                                         their service unit, which is
                                         implicitly done when
                                         <varname>DefaultDependencies=yes</varname>
                                         is set (the default).</para>
-
-                                        <para>systemd automatically
-                                        adds dependencies of type
-                                        Conflicts to this target unit
-                                        for all SysV init script
-                                        service units that shall be
-                                        terminated in SysV runlevels 0
-                                        or 6.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                         <para>A special target unit
                                         that is pulled in by
                                         <filename>suspend.target</filename>,
-                                        <filename>hibernate.target</filename> and <filename>hybrid-sleep.target</filename>
+                                        <filename>hibernate.target</filename>
+                                        and
+                                        <filename>hybrid-sleep.target</filename>
                                         and may be used to hook units
                                         into the sleep state
                                         logic.</para>
                                         smartcard controller is
                                         plugged in or becomes
                                         available at boot.</para>
+
+                                        <para>This may be used to pull
+                                        in printer management
+                                        daemons dynamically when
+                                        smartcard hardware is
+                                        found.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                 <term><filename>sockets.target</filename></term>
                                 <listitem>
                                         <para>A special target unit
-                                        that sets up all service
-                                        sockets.</para>
+                                        that sets up all socket
+                                        units.(see
+                                        <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                                        for details) that shall be
+                                        active after boot.</para>
 
                                         <para>Services that can be
                                         socket-activated shall add
-                                        Wants dependencies to this
-                                        unit for their socket unit
-                                        during installation.</para>
+                                        <varname>Wants=</varname>
+                                        dependencies to this unit for
+                                        their socket unit during
+                                        installation. This is best
+                                        configured via a
+                                        <varname>WantedBy=sockets.target</varname>
+                                        in the socket unit's
+                                        <literal>[Install]</literal>
+                                        section.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                         sound card is plugged in or
                                         becomes available at
                                         boot.</para>
+
+                                        <para>This may be used to pull
+                                        in audio management daemons
+                                        dynamically when printer
+                                        hardware is found.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
                                 <listitem>
                                         <para>systemd automatically
                                         adds dependencies of type
-                                        After for this target unit to
-                                        all SysV init script service
-                                        units with an LSB header
-                                        referring to the
+                                        <varname>After=</varname> for
+                                        this target unit to all SysV
+                                        init script service units with
+                                        an LSB header referring to the
                                         <literal>$time</literal>
                                         facility.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
+                                <term><filename>timers.target</filename></term>
+                                <listitem>
+                                        <para>A special target unit
+                                        that sets up all timer
+                                        units (see
+                                        <citerefentry><refentrytitle>systemd.timer</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+                                        for details) that shall be
+                                        active after boot.</para>
+
+                                        <para>It is recommended that
+                                        timer units installed by
+                                        applications get pulled in via
+                                        <varname>Wants=</varname>
+                                        dependencies from this
+                                        unit. This is best configured
+                                        via
+                                        <varname>WantedBy=timers.target</varname>
+                                        in the timer unit's
+                                        <literal>[Install]</literal>
+                                        section.</para>
+                                </listitem>
+                        </varlistentry>
+                        <varlistentry>
                                 <term><filename>umount.target</filename></term>
                                 <listitem>
                                         <para>A special target unit
                           <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                           <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
                           <citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-                          <citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+                          <citerefentry><refentrytitle>bootup</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
                           <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
                   </para>
         </refsect1>
index 295e5cd..ff49c06 100644 (file)
@@ -361,12 +361,12 @@ static int path_add_default_dependencies(Path *p) {
 
         assert(p);
 
-        if (UNIT(p)->manager->running_as == SYSTEMD_SYSTEM) {
-                r = unit_add_dependency_by_name(UNIT(p), UNIT_BEFORE,
-                                                SPECIAL_BASIC_TARGET, NULL, true);
-                if (r < 0)
-                        return r;
+        r = unit_add_dependency_by_name(UNIT(p), UNIT_BEFORE,
+                                        SPECIAL_PATHS_TARGET, NULL, true);
+        if (r < 0)
+                return r;
 
+        if (UNIT(p)->manager->running_as == SYSTEMD_SYSTEM) {
                 r = unit_add_two_dependencies_by_name(UNIT(p), UNIT_AFTER, UNIT_REQUIRES,
                                                       SPECIAL_SYSINIT_TARGET, NULL, true);
                 if (r < 0)
index fa8a1cb..98266a5 100644 (file)
@@ -1148,6 +1148,16 @@ static int service_add_default_dependencies(Service *s) {
                                                       SPECIAL_SOCKETS_TARGET, NULL, true);
                 if (r < 0)
                         return r;
+
+                r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
+                                                      SPECIAL_TIMERS_TARGET, NULL, true);
+                if (r < 0)
+                        return r;
+
+                r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
+                                                      SPECIAL_PATHS_TARGET, NULL, true);
+                if (r < 0)
+                        return r;
         }
 
         /* Second, activate normal shutdown */
index a3e3631..31f4bf4 100644 (file)
@@ -331,11 +331,13 @@ static int socket_add_default_dependencies(Socket *s) {
         int r;
         assert(s);
 
-        if (UNIT(s)->manager->running_as == SYSTEMD_SYSTEM) {
-                if ((r = unit_add_dependency_by_name(UNIT(s), UNIT_BEFORE, SPECIAL_SOCKETS_TARGET, NULL, true)) < 0)
-                        return r;
+        r = unit_add_dependency_by_name(UNIT(s), UNIT_BEFORE, SPECIAL_SOCKETS_TARGET, NULL, true);
+        if (r < 0)
+                return r;
 
-                if ((r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true)) < 0)
+        if (UNIT(s)->manager->running_as == SYSTEMD_SYSTEM) {
+                r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true);
+                if (r < 0)
                         return r;
         }
 
index c7b856e..ad873a9 100644 (file)
@@ -46,6 +46,8 @@
 /* Early boot targets */
 #define SPECIAL_SYSINIT_TARGET "sysinit.target"
 #define SPECIAL_SOCKETS_TARGET "sockets.target"
+#define SPECIAL_TIMERS_TARGET "timers.target"
+#define SPECIAL_PATHS_TARGET "paths.target"
 #define SPECIAL_LOCAL_FS_TARGET "local-fs.target"
 #define SPECIAL_LOCAL_FS_PRE_TARGET "local-fs-pre.target"
 #define SPECIAL_INITRD_FS_TARGET "initrd-fs.target"
index d98468f..16b4917 100644 (file)
@@ -96,11 +96,11 @@ static int timer_add_default_dependencies(Timer *t) {
 
         assert(t);
 
-        if (UNIT(t)->manager->running_as == SYSTEMD_SYSTEM) {
-                r = unit_add_dependency_by_name(UNIT(t), UNIT_BEFORE, SPECIAL_BASIC_TARGET, NULL, true);
-                if (r < 0)
-                        return r;
+        r = unit_add_dependency_by_name(UNIT(t), UNIT_BEFORE, SPECIAL_TIMERS_TARGET, NULL, true);
+        if (r < 0)
+                return r;
 
+        if (UNIT(t)->manager->running_as == SYSTEMD_SYSTEM) {
                 r = unit_add_two_dependencies_by_name(UNIT(t), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true);
                 if (r < 0)
                         return r;
index f9d03fa..b67c996 100644 (file)
@@ -8,6 +8,6 @@
 [Unit]
 Description=Basic System
 Documentation=man:systemd.special(7)
-Requires=sysinit.target sockets.target
-After=sysinit.target sockets.target
+Requires=sysinit.target sockets.target timers.target paths.target
+After=sysinit.target sockets.target timers.target paths.target
 RefuseManualStart=yes
diff --git a/units/paths.target b/units/paths.target
new file mode 100644 (file)
index 0000000..25c7fd0
--- /dev/null
@@ -0,0 +1,10 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Paths
+Documentation=man:systemd.special(7)
index 80f6cc4..2949635 100644 (file)
@@ -11,7 +11,7 @@ Documentation=man:systemd-ask-password-console.service(8)
 DefaultDependencies=no
 Conflicts=shutdown.target
 After=plymouth-start.service
-Before=basic.target shutdown.target
+Before=paths.target shutdown.target
 ConditionPathExists=!/run/plymouth/pid
 
 [Path]
index 62dee80..95ec9bc 100644 (file)
@@ -10,7 +10,7 @@ Description=Forward Password Requests to Wall Directory Watch
 Documentation=man:systemd-ask-password-console.service(8)
 DefaultDependencies=no
 Conflicts=shutdown.target
-Before=basic.target shutdown.target
+Before=paths.target shutdown.target
 
 [Path]
 DirectoryNotEmpty=/run/systemd/ask-password
diff --git a/units/timers.target b/units/timers.target
new file mode 100644 (file)
index 0000000..07fda3d
--- /dev/null
@@ -0,0 +1,10 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+[Unit]
+Description=Timers
+Documentation=man:systemd.special(7)