]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Pull in systemd-remount-fs.service only when required
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 20 Dec 2018 14:52:52 +0000 (15:52 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 3 Jan 2019 14:30:28 +0000 (15:30 +0100)
Instead of enabling it unconditionally and then using ConditionPathExists=/etc/fstab,
and possibly masking this condition if it should be enabled for auto gpt stuff,
just pull it in explicitly when required.

man/systemd-remount-fs.service.xml
src/fstab-generator/fstab-generator.c
src/gpt-auto-generator/gpt-auto-generator.c
src/shared/generator.c
src/shared/generator.h
units/meson.build
units/systemd-remount-fs.service.in

index 988a617406296227fa2b3b2c132a2773345e9389..0c1562142fdf3c519784bbf6126f653aaf6f1c6e 100644 (file)
     <para>For a longer discussion of kernel API file systems see
     <ulink url="https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems">API
     File Systems</ulink>.</para>
+
+    <para>Note: <filename>systemd-remount-fs.service</filename> is usually pulled in by
+    <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+    hence it is also affected by the kernel command line option <varname>fstab=</varname>, which may be used
+    to disable the generator. It may also pulled in by
+    <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+    which is affected by <varname>systemd.gpt_auto</varname> and other options.</para>
   </refsect1>
 
   <refsect1>
@@ -57,7 +64,9 @@
     <para>
       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
       <citerefentry project='man-pages'><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
-      <citerefentry project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+      <citerefentry project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-gpt-auto-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
 
index cebfed25cb290fe6028121d4f6d456f5b151d7c5..b5084c955c943f5ec63dfdfa44b728337060615d 100644 (file)
@@ -890,6 +890,8 @@ static int run(const char *dest, const char *dest_early, const char *dest_late)
                 /* If running in the initrd also parse the /etc/fstab from the host */
                 if (in_initrd())
                         r3 = parse_fstab(true);
+                else
+                        r3 = generator_enable_remount_fs_service(arg_dest);
         }
 
         return r < 0 ? r : r2 < 0 ? r2 : r3;
index d9e29c47f374c5b907de056a3c4ed584cbca163a..09c0bcba2da207313dd8ebfd028e00727724dfc8 100644 (file)
@@ -467,13 +467,13 @@ static int add_root_rw(DissectedPartition *p) {
                 return 0;
         }
 
+        (void) generator_enable_remount_fs_service(arg_dest);
+
         path = strjoina(arg_dest, "/systemd-remount-fs.service.d/50-remount-rw.conf");
         (void) mkdir_parents(path, 0755);
 
         r = write_string_file(path,
                               "# Automatically generated by systemd-gpt-generator\n\n"
-                              "[Unit]\n"
-                              "ConditionPathExists=\n\n" /* We need to turn off the ConditionPathExist= in the main unit file */
                               "[Service]\n"
                               "Environment=SYSTEMD_REMOUNT_ROOT_RW=1\n",
                               WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_NOFOLLOW);
@@ -678,6 +678,9 @@ static int add_root_mount(void) {
                         return r;
         }
 
+        /* Note that we do not need to enable systemd-remount-fs.service here. If
+         * /etc/fstab exists, systemd-fstab-generator will pull it in for us. */
+
         return add_mount(
                         "root",
                         "/dev/gpt-auto-root",
index ce8305c236649d588fc4666fed52e1a65e4c66c8..55bd024f9e9cdb565d40aeeee3e8aa88650d8a6e 100644 (file)
@@ -499,6 +499,12 @@ int generator_hook_up_growfs(
         return generator_add_symlink(dir, where_unit, "wants", unit);
 }
 
+int generator_enable_remount_fs_service(const char *dir) {
+        /* Pull in systemd-remount-fs.service */
+        return generator_add_symlink(dir, SPECIAL_LOCAL_FS_TARGET, "wants",
+                                     SYSTEM_DATA_UNIT_PATH "/" SPECIAL_REMOUNT_FS_SERVICE);
+}
+
 void log_setup_generator(void) {
         log_set_prohibit_ipc(true);
         log_setup_service();
index e2209657cd6233a8f8c575bc8b0296fa71e98994..fa002a91143adbfd4c78841d6df5c6745f48126b 100644 (file)
@@ -50,6 +50,8 @@ int generator_hook_up_growfs(
         const char *where,
         const char *target);
 
+int generator_enable_remount_fs_service(const char *dir);
+
 void log_setup_generator(void);
 
 /* Similar to DEFINE_MAIN_FUNCTION, but initializes logging and assigns positional arguments. */
index d69508467fb34666751f3c5f8e010361536f44ac..3820585051d52fb171033006825340d9e88c7ee5 100644 (file)
@@ -186,8 +186,7 @@ in_units = [
         ['systemd-quotacheck.service',           'ENABLE_QUOTACHECK'],
         ['systemd-random-seed.service',          'ENABLE_RANDOMSEED',
          'sysinit.target.wants/'],
-        ['systemd-remount-fs.service',           '',
-         'local-fs.target.wants/'],
+        ['systemd-remount-fs.service',           ''],
         ['systemd-resolved.service',             'ENABLE_RESOLVE',
          join_paths(pkgsysconfdir, 'system/dbus-org.freedesktop.resolve1.service') + ' ' +
          join_paths(pkgsysconfdir, 'system/multi-user.target.wants/')],
index 2e5b75ec03b61645ce85fd9d2cb15fe9f754684f..4f4304d68e208017885e118eddfe0a546c0d5885 100644 (file)
@@ -16,7 +16,6 @@ Conflicts=shutdown.target
 After=systemd-fsck-root.service
 Before=local-fs-pre.target local-fs.target shutdown.target
 Wants=local-fs-pre.target
-ConditionPathExists=/etc/fstab
 
 [Service]
 Type=oneshot