install: Fall back to system presets if there are no initrd presets

We might be operating with a newer systemctl on an image with older
systemd and thus without an initrd-preset directory. Before
4a8c395167, we would use the system
presets, let's make sure we keep doing that if we're operating on an
image without initrd presets.

Follow up for 4a8c395167.
This commit is contained in:
Daan De Meyer
2025-09-04 08:55:40 +02:00
parent c8e1e5814f
commit 41ae31a9ac
+14 -1
View File
@@ -3298,7 +3298,20 @@ static int presets_find_config(RuntimeScope scope, const char *root_dir, char **
if (r < 0 && r != -ENOENT)
return r;
dirs = r >= 0 ? initrd_dirs : system_dirs;
/* Make sure that we fall back to the system preset directories if we're operating on a root
* directory without initrd preset directories. This makes sure that we don't regress when
* using a newer systemctl to operate on a root directory with an older version of systemd
* installed that doesn't yet known about initrd preset directories. */
if (r >= 0)
STRV_FOREACH(d, initrd_dirs) {
r = chase_and_access(*d, root_dir, CHASE_PREFIX_ROOT, F_OK, /* ret_path= */ NULL);
if (r >= 0)
return conf_files_list_strv(ret, ".preset", root_dir, 0, initrd_dirs);
if (r != -ENOENT)
return r;
}
dirs = system_dirs;
} else if (IN_SET(scope, RUNTIME_SCOPE_GLOBAL, RUNTIME_SCOPE_USER))
dirs = user_dirs;
else