]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
repart: use /sysusr/ as --root= default in initrd, if mounted 19371/head
authorLennart Poettering <lennart@poettering.net>
Wed, 7 Apr 2021 09:18:43 +0000 (11:18 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 20 Apr 2021 16:53:15 +0000 (18:53 +0200)
src/partition/repart.c

index 976d1d538ba86ccb9a5fe694a25da02227c76ca3..356fd9152c59a083783e7f03bfe0ef96b2fba067 100644 (file)
@@ -4318,8 +4318,18 @@ static int parse_argv(int argc, char *argv[]) {
         if (arg_image && arg_root)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Please specify either --root= or --image=, the combination of both is not supported.");
         else if (!arg_image && !arg_root && in_initrd()) {
-                /* Default to operation on /sysroot when invoked in the initrd! */
-                arg_root = strdup("/sysroot");
+
+                /* By default operate on /sysusr/ or /sysroot/ when invoked in the initrd. We prefer the
+                 * former, if it is mounted, so that we have deterministic behaviour on systems where /usr/
+                 * is vendor-supplied but the root fs formatted on first boot. */
+                r = path_is_mount_point("/sysusr/usr", NULL, 0);
+                if (r <= 0) {
+                        if (r < 0 && r != -ENOENT)
+                                log_debug_errno(r, "Unable to determine whether /sysusr/usr is a mount point, assuming it is not: %m");
+
+                        arg_root = strdup("/sysroot");
+                } else
+                        arg_root = strdup("/sysusr");
                 if (!arg_root)
                         return log_oom();
         }