summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-03-25 21:20:08 +0100
committerLennart Poettering <lennart@poettering.net>2013-03-25 21:28:30 +0100
commite3d84721dc9bcf9008f72dae03ff0f7842d0bb4b (patch)
tree2f62446a9d8961872060346793f788e3cac366fd
parent1b036593b76614dd05942a78120c151161cccc0f (diff)
units: introduce new timers.target and paths.target to hook timer/path units into for boot
-rw-r--r--Makefile.am10
-rw-r--r--man/bootup.xml143
-rw-r--r--man/systemd.special.xml258
-rw-r--r--src/core/path.c10
-rw-r--r--src/core/service.c10
-rw-r--r--src/core/socket.c10
-rw-r--r--src/core/special.h2
-rw-r--r--src/core/timer.c8
-rw-r--r--units/basic.target4
-rw-r--r--units/paths.target10
-rw-r--r--units/systemd-ask-password-console.path2
-rw-r--r--units/systemd-ask-password-wall.path2
-rw-r--r--units/timers.target10
13 files changed, 319 insertions, 160 deletions
diff --git a/Makefile.am b/Makefile.am
index 2a1a08ce9b..8569983a15 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -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
diff --git a/man/bootup.xml b/man/bootup.xml
index 65923528d4..a596e85b70 100644
--- a/man/bootup.xml
+++ b/man/bootup.xml
@@ -50,18 +50,20 @@
<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
@@ -132,35 +134,35 @@
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
@@ -174,23 +176,41 @@
</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
@@ -203,13 +223,13 @@
| 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
@@ -225,11 +245,11 @@
|
v
______________________/|
- / |
+ / v
| initrd-udevadm-cleanup-db.service
- | |
- (custom initrd services) |
- | |
+ v |
+ (custom initrd |
+ services...) |
\______________________ |
\|
v
@@ -239,17 +259,16 @@
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>
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index 67a81b639b..8a7242662d 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -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>
@@ -116,22 +118,23 @@
<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>
@@ -139,9 +142,15 @@
<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>
@@ -169,7 +178,7 @@
<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
@@ -182,7 +191,7 @@
<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>
@@ -198,6 +207,7 @@
<filename>multi-user.target</filename>
or
<filename>graphical.target</filename>.</para>
+
<para>The default unit systemd
starts at bootup can be
overridden with the
@@ -247,8 +257,10 @@
<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>
@@ -261,11 +273,17 @@
<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>
@@ -290,7 +308,13 @@
<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
@@ -300,16 +324,17 @@
<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>
@@ -338,20 +363,21 @@
<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>
@@ -377,9 +403,15 @@
<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>
@@ -387,10 +419,10 @@
<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>
@@ -418,7 +450,8 @@
<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
@@ -441,6 +474,29 @@
</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
@@ -463,6 +519,12 @@
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>
@@ -490,10 +552,10 @@
<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>
@@ -525,11 +587,14 @@
<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>
@@ -538,10 +603,10 @@
<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>
@@ -574,20 +639,12 @@
<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>
@@ -607,7 +664,9 @@
<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>
@@ -621,20 +680,35 @@
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>
@@ -645,6 +719,11 @@
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>
@@ -710,15 +789,38 @@
<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
@@ -788,7 +890,7 @@
<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>
diff --git a/src/core/path.c b/src/core/path.c
index 295e5cdf0e..ff49c069ee 100644
--- a/src/core/path.c
+++ b/src/core/path.c
@@ -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)
diff --git a/src/core/service.c b/src/core/service.c
index fa8a1cb039..98266a5a90 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -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 */
diff --git a/src/core/socket.c b/src/core/socket.c
index a3e3631dac..31f4bf49b6 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -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;
}
diff --git a/src/core/special.h b/src/core/special.h
index c7b856e2bd..ad873a9c31 100644
--- a/src/core/special.h
+++ b/src/core/special.h
@@ -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"
diff --git a/src/core/timer.c b/src/core/timer.c
index d98468fd9e..16b49174d3 100644
--- a/src/core/timer.c
+++ b/src/core/timer.c
@@ -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;
diff --git a/units/basic.target b/units/basic.target
index f9d03fa16f..b67c996b39 100644
--- a/units/basic.target
+++ b/units/basic.target
@@ -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
index 0000000000..25c7fd031e
--- /dev/null
+++ b/units/paths.target
@@ -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)
diff --git a/units/systemd-ask-password-console.path b/units/systemd-ask-password-console.path
index 80f6cc4c18..2949635fea 100644
--- a/units/systemd-ask-password-console.path
+++ b/units/systemd-ask-password-console.path
@@ -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]
diff --git a/units/systemd-ask-password-wall.path b/units/systemd-ask-password-wall.path
index 62dee80552..95ec9bc8a0 100644
--- a/units/systemd-ask-password-wall.path
+++ b/units/systemd-ask-password-wall.path
@@ -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
index 0000000000..07fda3d9d0
--- /dev/null
+++ b/units/timers.target
@@ -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)