[systemd-commits] 6 commits - Makefile.am TODO man/systemd.special.xml src/core src/fstab-generator units/local-fs.target units/nss-lookup.target units/nss-user-lookup.target units/remote-fs-pre.target units/remote-fs-setup.target units/remote-fs.target

Lennart Poettering lennart at kemper.freedesktop.org
Mon Mar 25 15:10:04 PDT 2013


 Makefile.am                           |    3 
 TODO                                  |    6 
 man/systemd.special.xml               |  373 ++++++++++++++++++++--------------
 src/core/mount.c                      |   17 +
 src/core/special.h                    |    1 
 src/fstab-generator/fstab-generator.c |   39 ++-
 units/local-fs.target                 |    1 
 units/nss-lookup.target               |    1 
 units/nss-user-lookup.target          |    1 
 units/remote-fs-pre.target            |    1 
 units/remote-fs-setup.target          |   11 +
 units/remote-fs.target                |    3 
 12 files changed, 288 insertions(+), 169 deletions(-)

New commits:
commit e06e62f4a1d7a976587c4241eca157ce98d2da33
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Mar 25 22:32:59 2013 +0100

    man: properly document the system targets that are also available for the user instance

diff --git a/Makefile.am b/Makefile.am
index 8569983..40453de 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -3944,7 +3944,8 @@ USER_UNIT_ALIASES += \
 	$(systemunitdir)/paths.target paths.target \
 	$(systemunitdir)/bluetooth.target bluetooth.target \
 	$(systemunitdir)/printer.target printer.target \
-	$(systemunitdir)/sound.target sound.target
+	$(systemunitdir)/sound.target sound.target \
+	$(systemunitdir)/smartcard.target smartcard.target
 
 GENERAL_ALIASES += \
 	$(systemunitdir)/remote-fs.target $(pkgsysconfdir)/system/multi-user.target.wants/remote-fs.target \
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index a76e4cc..b77b60d 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -927,7 +927,13 @@
                 similar definitions as their system counterparts:
                 <filename>default.target</filename>,
                 <filename>shutdown.target</filename>,
-                <filename>sockets.target</filename></para>
+                <filename>sockets.target</filename>,
+                <filename>timers.target</filename>,
+                <filename>paths.target</filename>,
+                <filename>bluetooth.target</filename>,
+                <filename>printer.target</filename>,
+                <filename>smartcard.target</filename>,
+                <filename>sound.target</filename>.</para>
 
                 <para>In addition the following special unit is
                 understood only when systemd runs as service instance:</para>

commit 54f874c56bebfaf199f84fca4bb2650a859bfac2
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Mar 25 22:30:51 2013 +0100

    man: rearrange systemd.special(7) to clarify which units are passive and which ones aren't
    
    This also adds a short explanation paragraph for this.

diff --git a/TODO b/TODO
index 0eae14f..b49d3e1 100644
--- a/TODO
+++ b/TODO
@@ -51,10 +51,6 @@ Features:
 
 * when prompting for a hdd password show GUID partition label
 
-* document which targets shall be pulled in by users of the facility,
-  and which ones are to be pulled in by the implementors of the
-  facility.
-
 * teach udev + logind's uaccess to somehow handle the "dead" device nodes from:
      /lib/modules/$(uname -r)/modules.devname
   and apply ACLs to them if they have TAG=="uaccess" in udev rules.
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index 1897447..a76e4cc 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -139,22 +139,6 @@
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
-                                <term><filename>bluetooth.target</filename></term>
-                                <listitem>
-                                        <para>This target is started
-                                        automatically as soon as a
-                                        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>ctrl-alt-del.target</filename></term>
                                 <listitem>
                                         <para>systemd starts this
@@ -382,18 +366,6 @@
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
-                                <term><filename>local-fs-pre.target</filename></term>
-                                <listitem>
-                                        <para>This target unit is
-                                        automatically ordered before
-                                        all local mount points marked
-                                        with <option>auto</option>
-                                        (see above). It can be used to
-                                        execute certain units before
-                                        all local mounts.</para>
-                                </listitem>
-                        </varlistentry>
-                        <varlistentry>
                                 <term><filename>multi-user.target</filename></term>
                                 <listitem>
                                         <para>A special target unit
@@ -439,42 +411,6 @@
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
-                                <term><filename>nss-lookup.target</filename></term>
-                                <listitem>
-                                        <para>A target that should be
-                                        used as synchronization point
-                                        for all host/network name
-                                        service lookups. Note that
-                                        this is independent of
-                                        user/group name lookups for
-                                        which
-                                        <filename>nss-user-lookup.target</filename>
-                                        should be used. systemd
-                                        automatically adds
-                                        dependencies of type
-                                        <varname>After=</varname> for
-                                        this target unit to all SysV
-                                        init script service units with
-                                        an LSB header referring to the
-                                        <literal>$named</literal>
-                                        facility.</para>
-                                </listitem>
-                        </varlistentry>
-                        <varlistentry>
-                                <term><filename>nss-user-lookup.target</filename></term>
-                                <listitem>
-                                        <para>A target that should be
-                                        used as synchronization point
-                                        for all user/group name
-                                        service lookups. Note that
-                                        this is independent of
-                                        host/network name lookups for
-                                        which
-                                        <filename>nss-lookup.target</filename>
-                                        should be used. </para>
-                                </listitem>
-                        </varlistentry>
-                        <varlistentry>
                                 <term><filename>paths.target</filename></term>
                                 <listitem>
                                         <para>A special target unit
@@ -513,22 +449,6 @@
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
-                                <term><filename>printer.target</filename></term>
-                                <listitem>
-                                        <para>This target is started
-                                        automatically as soon as a
-                                        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>
                                 <term><filename>reboot.target</filename></term>
                                 <listitem>
                                         <para>A special target unit
@@ -562,36 +482,6 @@
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
-                                <term><filename>remote-fs-pre.target</filename></term>
-                                <listitem>
-                                        <para>This target unit is
-                                        automatically ordered before
-                                        all remote mount point units
-                                        (see above). It can be used to
-                                        run certain units before the
-                                        remote mounts are
-                                        established. Note that this
-                                        unit is generally not part of
-                                        the initial transaction,
-                                        unless the unit that wants to
-                                        be ordered before all remote
-                                        mounts pulls it in via a
-                                        <varname>Wants=</varname> type
-                                        dependency. If the unit wants
-                                        to be pulled in by the first
-                                        remote mount showing up it
-                                        should use
-                                        <filename>remote-fs-setup.target</filename>
-                                        (see below).</para>
-
-                                        <para>Again, this target unit
-                                        is <emphasis>not</emphasis>
-                                        suitable for pulling in other
-                                        units, it is only useful for
-                                        ordering.</para>
-                                </listitem>
-                        </varlistentry>
-                        <varlistentry>
                                 <term><filename>remote-fs-setup.target</filename></term>
                                 <listitem>
                                         <para>This target unit is
@@ -605,7 +495,7 @@
                                         this target is not ordered
                                         against the remote mounts, use
                                         <filename>remote-fs-pre.target</filename>
-                                        for that.</para>
+                                        for that (see below).</para>
 
                                         <para>Again, this target unit
                                         is <emphasis>not</emphasis>
@@ -641,19 +531,6 @@
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
-                                <term><filename>rpcbind.target</filename></term>
-                                <listitem>
-                                        <para>systemd automatically
-                                        adds dependencies of type
-                                        <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>
-                        </varlistentry>
-                        <varlistentry>
                                 <term><filename>runlevel2.target</filename></term>
                                 <term><filename>runlevel3.target</filename></term>
                                 <term><filename>runlevel4.target</filename></term>
@@ -715,22 +592,6 @@
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
-                                <term><filename>smartcard.target</filename></term>
-                                <listitem>
-                                        <para>This target is started
-                                        automatically as soon as a
-                                        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
@@ -754,21 +615,6 @@
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
-                                <term><filename>sound.target</filename></term>
-                                <listitem>
-                                        <para>This target is started
-                                        automatically as soon as a
-                                        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>
                                 <term><filename>suspend.target</filename></term>
                                 <listitem>
                                         <para>A special target unit
@@ -827,19 +673,6 @@
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
-                                <term><filename>time-sync.target</filename></term>
-                                <listitem>
-                                        <para>systemd automatically
-                                        adds dependencies of type
-                                        <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
@@ -885,6 +718,208 @@
         </refsect1>
 
         <refsect1>
+                <title>Special System Units for Devices</title>
+
+                <para>Some target units are automatically pulled in as
+                devices of certain kinds show up in the system. These
+                may be used to automatically activate various services
+                based on the specific type of the available
+                hardware.</para>
+
+                <variablelist>
+                        <varlistentry>
+                                <term><filename>bluetooth.target</filename></term>
+                                <listitem>
+                                        <para>This target is started
+                                        automatically as soon as a
+                                        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>printer.target</filename></term>
+                                <listitem>
+                                        <para>This target is started
+                                        automatically as soon as a
+                                        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>
+                                <term><filename>smartcard.target</filename></term>
+                                <listitem>
+                                        <para>This target is started
+                                        automatically as soon as a
+                                        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>sound.target</filename></term>
+                                <listitem>
+                                        <para>This target is started
+                                        automatically as soon as a
+                                        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>
+                </variablelist>
+        </refsect1>
+
+        <refsect1>
+                <title>Special Passive System Units </title>
+
+                <para>A number of special system targets are defined
+                that can be used to properly order boot-up of optional
+                services. These targets are generally not part of the
+                initial boot transaction, unless they are explicitly
+                pulled in by one of the implementing services. Note
+                specifically, that these <emphasis>passive</emphasis>
+                target units are generally not pulled in by the
+                consumer of a service, but by the provider of the
+                service. This means: a consuming service should order
+                itself after these targets (as appropriate), but not
+                pull it in. A providing service should order itself
+                before these targets (as appropriate) and pull it in
+                (via a <varname>Wants=</varname> type
+                dependency).</para>
+
+                <variablelist>
+                        <varlistentry>
+                                <term><filename>local-fs-pre.target</filename></term>
+                                <listitem>
+                                        <para>This target unit is
+                                        automatically ordered before
+                                        all local mount points marked
+                                        with <option>auto</option>
+                                        (see above). It can be used to
+                                        execute certain units before
+                                        all local mounts.</para>
+                                </listitem>
+                        </varlistentry>
+                        <varlistentry>
+                                <term><filename>nss-lookup.target</filename></term>
+                                <listitem>
+                                        <para>A target that should be
+                                        used as synchronization point
+                                        for all host/network name
+                                        service lookups. Note that
+                                        this is independent of
+                                        user/group name lookups for
+                                        which
+                                        <filename>nss-user-lookup.target</filename>
+                                        should be used. systemd
+                                        automatically adds
+                                        dependencies of type
+                                        <varname>After=</varname> for
+                                        this target unit to all SysV
+                                        init script service units with
+                                        an LSB header referring to the
+                                        <literal>$named</literal>
+                                        facility.</para>
+                                </listitem>
+                        </varlistentry>
+                        <varlistentry>
+                                <term><filename>nss-user-lookup.target</filename></term>
+                                <listitem>
+                                        <para>A target that should be
+                                        used as synchronization point
+                                        for all user/group name
+                                        service lookups. Note that
+                                        this is independent of
+                                        host/network name lookups for
+                                        which
+                                        <filename>nss-lookup.target</filename>
+                                        should be used. </para>
+                                </listitem>
+                        </varlistentry>
+                        <varlistentry>
+                                <term><filename>remote-fs-pre.target</filename></term>
+                                <listitem>
+                                        <para>This target unit is
+                                        automatically ordered before
+                                        all remote mount point units
+                                        (see above). It can be used to
+                                        run certain units before the
+                                        remote mounts are
+                                        established. Note that this
+                                        unit is generally not part of
+                                        the initial transaction,
+                                        unless the unit that wants to
+                                        be ordered before all remote
+                                        mounts pulls it in via a
+                                        <varname>Wants=</varname> type
+                                        dependency. If the unit wants
+                                        to be pulled in by the first
+                                        remote mount showing up it
+                                        should use
+                                        <filename>remote-fs-setup.target</filename>
+                                        (see above).</para>
+
+                                        <para>Again, this target unit
+                                        is <emphasis>not</emphasis>
+                                        suitable for pulling in other
+                                        units, it is only useful for
+                                        ordering.</para>
+                                </listitem>
+                        </varlistentry>
+                        <varlistentry>
+                                <term><filename>rpcbind.target</filename></term>
+                                <listitem>
+                                        <para>systemd automatically
+                                        adds dependencies of type
+                                        <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>
+                        </varlistentry>
+                        <varlistentry>
+                                <term><filename>time-sync.target</filename></term>
+                                <listitem>
+                                        <para>systemd automatically
+                                        adds dependencies of type
+                                        <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>
+                </variablelist>
+        </refsect1>
+
+        <refsect1>
                 <title>Special User Units</title>
 
                 <para>When systemd runs as a user instance, the

commit 627506f104b8b4c974fb3a0958d8202217f599f6
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Mar 25 22:10:32 2013 +0100

    units: there is no point in pulling in ordering 'provides'-style targets
    
    Units such as nss-lookup.target, nss-user-lookup.target,
    remote-fs-pre.target, local-fs-pre.target, time-sync.target,
    rpcbind.target are to be pulled in by the implementing services, and
    that's there only purpose. They should not have any 'active component'
    otherwise, so let's drop all further deps from these units.

diff --git a/units/nss-lookup.target b/units/nss-lookup.target
index eea905a..339b507 100644
--- a/units/nss-lookup.target
+++ b/units/nss-lookup.target
@@ -11,4 +11,3 @@
 [Unit]
 Description=Host and Network Name Lookups
 Documentation=man:systemd.special(7)
-After=network.target
diff --git a/units/nss-user-lookup.target b/units/nss-user-lookup.target
index 3e0fced..43b722c 100644
--- a/units/nss-user-lookup.target
+++ b/units/nss-user-lookup.target
@@ -11,4 +11,3 @@
 [Unit]
 Description=User and Group Name Lookups
 Documentation=man:systemd.special(7)
-After=network.target
diff --git a/units/remote-fs-pre.target b/units/remote-fs-pre.target
index 2169533..febdc01 100644
--- a/units/remote-fs-pre.target
+++ b/units/remote-fs-pre.target
@@ -8,4 +8,3 @@
 [Unit]
 Description=Remote File Systems (Pre)
 Documentation=man:systemd.special(7)
-After=network.target nss-lookup.target

commit 752beb0c8560fb7e989d2f8da5e10c4692d78422
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Mar 25 22:09:53 2013 +0100

    update TODO

diff --git a/TODO b/TODO
index 1a414d5..0eae14f 100644
--- a/TODO
+++ b/TODO
@@ -44,6 +44,8 @@ Fedora 19:
 
 Features:
 
+* remove duplicate default deps logic from fstab-generator vs. mount.c
+
 * when isolating, try to figure out a way how we implicitly can order
   all units we stop before the isolating unit...
 

commit e8d2f6cde0af86eece9118718ad0a8a19e1cffec
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Mar 25 22:04:40 2013 +0100

    units: introduce remote-fs-setup.target to pull in dependencies from remote mounts
    
    This introduces remote-fs-setup.target independently of
    remote-fs-pre.target. The former is only for pulling things in, the
    latter only for ordering.
    
    The new semantics:
    
    remote-fs-setup.target: is pulled in automatically by all remote mounts.
    Shall be used to pull in other units that want to run when at least one
    remote mount is set up. Is not ordered against the actual mount units,
    in order to allow activation of its dependencies even 'a posteriori',
    i.e. when a mount is established outside of systemd and is only picked
    up by it.
    
    remote-fs-pre.target: needs to be pulled in automatically by the
    implementing service, is otherwise not part of the initial transaction.
    This is ordered before all remote mount units.
    
    A service that wants to be pulled in and run before all remote mounts
    should hence have:
    
    a) WantedBy=remote-fs-setup.target -- so that it is pulled in
    
    b) Wants=remote-fs-pre.target + Before=remote-fs-pre.target -- so that
       it is ordered before the mount point, normally.

diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index 8a72426..1897447 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -79,6 +79,7 @@
                 <filename>reboot.target</filename>,
                 <filename>remote-fs.target</filename>,
                 <filename>remote-fs-pre.target</filename>,
+                <filename>remote-fs-setup.target</filename>,
                 <filename>rescue.target</filename>,
                 <filename>initrd-root-fs.target</filename>,
                 <filename>rpcbind.target</filename>,
@@ -565,11 +566,52 @@
                                 <listitem>
                                         <para>This target unit is
                                         automatically ordered before
-                                        all remote mount points marked
-                                        with <option>auto</option>
+                                        all remote mount point units
                                         (see above). It can be used to
-                                        execute certain units before
-                                        all remote mounts.</para>
+                                        run certain units before the
+                                        remote mounts are
+                                        established. Note that this
+                                        unit is generally not part of
+                                        the initial transaction,
+                                        unless the unit that wants to
+                                        be ordered before all remote
+                                        mounts pulls it in via a
+                                        <varname>Wants=</varname> type
+                                        dependency. If the unit wants
+                                        to be pulled in by the first
+                                        remote mount showing up it
+                                        should use
+                                        <filename>remote-fs-setup.target</filename>
+                                        (see below).</para>
+
+                                        <para>Again, this target unit
+                                        is <emphasis>not</emphasis>
+                                        suitable for pulling in other
+                                        units, it is only useful for
+                                        ordering.</para>
+                                </listitem>
+                        </varlistentry>
+                        <varlistentry>
+                                <term><filename>remote-fs-setup.target</filename></term>
+                                <listitem>
+                                        <para>This target unit is
+                                        automatically pulled in (by a
+                                        <varname>Wants=</varname> type
+                                        dependency) by all remote
+                                        mount points. It can be used
+                                        to run certain units when at
+                                        least one remote file system
+                                        is to be mounted. Note that
+                                        this target is not ordered
+                                        against the remote mounts, use
+                                        <filename>remote-fs-pre.target</filename>
+                                        for that.</para>
+
+                                        <para>Again, this target unit
+                                        is <emphasis>not</emphasis>
+                                        suitable for ordering, it is
+                                        only useful for pulling in
+                                        other units.</para>
                                 </listitem>
                         </varlistentry>
                         <varlistentry>
diff --git a/src/core/mount.c b/src/core/mount.c
index 0adf04e..c4074eb 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -441,7 +441,7 @@ static int mount_add_quota_links(Mount *m) {
 static int mount_add_default_dependencies(Mount *m) {
         int r;
         MountParameters *p;
-        const char *after;
+        const char *after, *setup;
 
         assert(m);
 
@@ -456,15 +456,24 @@ static int mount_add_default_dependencies(Mount *m) {
         if (path_equal(m->where, "/"))
                 return 0;
 
-        if (mount_is_network(p))
+        if (mount_is_network(p)) {
                 after = SPECIAL_REMOTE_FS_PRE_TARGET;
-        else
+                setup = SPECIAL_REMOTE_FS_SETUP_TARGET;
+        } else {
                 after = SPECIAL_LOCAL_FS_PRE_TARGET;
+                setup = NULL;
+        }
 
-        r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_WANTS, UNIT_AFTER, after, NULL, true);
+        r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, after, NULL, true);
         if (r < 0)
                 return r;
 
+        if (setup) {
+                r = unit_add_dependency_by_name(UNIT(m), UNIT_WANTS, setup, NULL, true);
+                if (r < 0)
+                        return r;
+        }
+
         r = unit_add_two_dependencies_by_name(UNIT(m), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_UMOUNT_TARGET, NULL, true);
         if (r < 0)
                 return r;
diff --git a/src/core/special.h b/src/core/special.h
index ad873a9..dae7446 100644
--- a/src/core/special.h
+++ b/src/core/special.h
@@ -54,6 +54,7 @@
 #define SPECIAL_INITRD_ROOT_FS_TARGET "initrd-root-fs.target"
 #define SPECIAL_REMOTE_FS_TARGET "remote-fs.target"       /* LSB's $remote_fs */
 #define SPECIAL_REMOTE_FS_PRE_TARGET "remote-fs-pre.target"
+#define SPECIAL_REMOTE_FS_SETUP_TARGET "remote-fs-setup.target"
 #define SPECIAL_SWAP_TARGET "swap.target"
 #define SPECIAL_BASIC_TARGET "basic.target"
 
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 9754f3a..2f157c8 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -205,9 +205,20 @@ static bool mount_is_rootfs(struct mntent *me) {
         return hasmntopt(me, "x-initrd.rootfs");
 }
 
-static int add_mount(const char *what, const char *where, const char *type, const char *opts,
-                     int passno, bool noauto, bool nofail, bool automount, bool isbind,
-                     const char *pre, const char *post, const char *source) {
+static int add_mount(
+                const char *what,
+                const char *where,
+                const char *type,
+                const char *opts,
+                int passno,
+                bool noauto,
+                bool nofail,
+                bool automount,
+                bool isbind,
+                const char *pre,
+                const char *post,
+                const char *setup,
+                const char *source) {
         char _cleanup_free_
                 *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL,
                 *automount_name = NULL, *automount_unit = NULL;
@@ -259,10 +270,14 @@ static int add_mount(const char *what, const char *where, const char *type, cons
         if (!path_equal(where, "/")) {
                 if (pre)
                         fprintf(f,
-                                "After=%s\n"
-                                "Wants=%s\n",
-                                pre,
+                                "After=%s\n",
                                 pre);
+
+                if (setup)
+                        fprintf(f,
+                                "Wants=%s\n",
+                                setup);
+
                 fprintf(f,
                         "Conflicts=" SPECIAL_UMOUNT_TARGET "\n"
                         "Before=" SPECIAL_UMOUNT_TARGET "\n");
@@ -430,7 +445,7 @@ static int parse_fstab(const char *prefix, bool initrd) {
                         k = add_swap(what, me);
                 else {
                         bool noauto, nofail, automount, isbind;
-                        const char *pre, *post;
+                        const char *pre, *post, *setup;
 
                         noauto = !!hasmntopt(me, "noauto");
                         nofail = !!hasmntopt(me, "nofail");
@@ -442,20 +457,24 @@ static int parse_fstab(const char *prefix, bool initrd) {
                         if (initrd) {
                                 post = SPECIAL_INITRD_FS_TARGET;
                                 pre = NULL;
+                                setup = NULL;
                         } else if (mount_is_rootfs(me)) {
                                 post = SPECIAL_INITRD_ROOT_FS_TARGET;
                                 pre = NULL;
+                                setup = NULL;
                         } else if (mount_is_network(me)) {
                                 post = SPECIAL_REMOTE_FS_TARGET;
                                 pre = SPECIAL_REMOTE_FS_PRE_TARGET;
+                                setup = SPECIAL_REMOTE_FS_SETUP_TARGET;
                         } else {
                                 post = SPECIAL_LOCAL_FS_TARGET;
                                 pre = SPECIAL_LOCAL_FS_PRE_TARGET;
+                                setup = NULL;
                         }
 
                         k = add_mount(what, where, me->mnt_type, me->mnt_opts,
-                                     me->mnt_passno, noauto, nofail, automount,
-                                     isbind, pre, post, fstab_path);
+                                      me->mnt_passno, noauto, nofail, automount,
+                                      isbind, pre, post, setup, fstab_path);
                 }
 
                 if (k < 0)
@@ -539,7 +558,7 @@ static int parse_new_root_from_proc_cmdline(void) {
 
         log_debug("Found entry what=%s where=/sysroot type=%s", what, type);
         r = add_mount(what, "/sysroot", type, opts, 0, false, false, false,
-                      false, NULL, SPECIAL_INITRD_ROOT_FS_TARGET, "/proc/cmdline");
+                      false, NULL, SPECIAL_INITRD_ROOT_FS_TARGET, NULL, "/proc/cmdline");
 
         return (r < 0) ? r : 0;
 }
diff --git a/units/local-fs.target b/units/local-fs.target
index dd92b17..ee02e4e 100644
--- a/units/local-fs.target
+++ b/units/local-fs.target
@@ -8,5 +8,6 @@
 [Unit]
 Description=Local File Systems
 Documentation=man:systemd.special(7)
+After=local-fs-pre.target
 OnFailure=emergency.target
 OnFailureIsolate=yes
diff --git a/units/remote-fs-setup.target b/units/remote-fs-setup.target
new file mode 100644
index 0000000..8043717
--- /dev/null
+++ b/units/remote-fs-setup.target
@@ -0,0 +1,11 @@
+#  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=Remote File System Setup
+Documentation=man:systemd.special(7)
+DefaultDependencies=no
diff --git a/units/remote-fs.target b/units/remote-fs.target
index 9e68878..e867b8d 100644
--- a/units/remote-fs.target
+++ b/units/remote-fs.target
@@ -8,6 +8,7 @@
 [Unit]
 Description=Remote File Systems
 Documentation=man:systemd.special(7)
+After=remote-fs-pre.target remote-fs-setup.target
 
 [Install]
 WantedBy=multi-user.target

commit a69fe051b85865cad5df74f9f58915e36c4b1418
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Mar 25 21:29:58 2013 +0100

    Revert "remote-fs.target: want remote-fs-pre.target"
    
    This reverts commit 6bde0b3220e95a08cefb70846f73b2cf24b7734a.
    
    We should not pull in remote-fs-pre.target unconditionally. It's
    supposed to be pulled in by the implementors of it, rather then its
    users.

diff --git a/units/remote-fs.target b/units/remote-fs.target
index b11074f..9e68878 100644
--- a/units/remote-fs.target
+++ b/units/remote-fs.target
@@ -8,8 +8,6 @@
 [Unit]
 Description=Remote File Systems
 Documentation=man:systemd.special(7)
-Wants=remote-fs-pre.target
-After=remote-fs-pre.target
 
 [Install]
 WantedBy=multi-user.target



More information about the systemd-commits mailing list