} MountPointFlags;
static const char *arg_dest = NULL;
+static const char *arg_dest_late = NULL;
static bool arg_enabled = true;
static GptAutoRoot arg_auto_root = _GPT_AUTO_ROOT_INVALID;
static GptAutoRoot arg_auto_usr = _GPT_AUTO_ROOT_INVALID;
if (r < 0)
return log_error_errno(r, "Failed to generate unit name: %m");
- r = generator_open_unit_file(arg_dest, /* source = */ NULL, n, &f);
+ r = generator_open_unit_file(arg_dest_late, /* source = */ NULL, n, &f);
if (r < 0)
return r;
if (r < 0)
return log_error_errno(r, "Failed to write file %s: %m", n);
- r = generator_write_device_timeout(arg_dest, what, mount_opts, /* filtered = */ NULL);
+ r = generator_write_device_timeout(arg_dest_late, what, mount_opts, /* filtered = */ NULL);
if (r < 0)
return r;
- r = generator_add_symlink(arg_dest, d, "wants", n);
+ r = generator_add_symlink(arg_dest_late, d, "wants", n);
if (r < 0)
return r;
const char *dmname = strjoina("dev-mapper-", e, ".device");
if (require) {
- r = generator_add_symlink(arg_dest, "cryptsetup.target", "requires", n);
+ r = generator_add_symlink(arg_dest_late, "cryptsetup.target", "requires", n);
if (r < 0)
return r;
- r = generator_add_symlink(arg_dest, dmname, "requires", n);
+ r = generator_add_symlink(arg_dest_late, dmname, "requires", n);
if (r < 0)
return r;
}
- r = write_drop_in_format(arg_dest, dmname, 50, "job-timeout",
+ r = write_drop_in_format(arg_dest_late, dmname, 50, "job-timeout",
"# Automatically generated by systemd-gpt-auto-generator\n\n"
"[Unit]\n"
"JobTimeoutSec=infinity"); /* the binary handles timeouts anyway */
return log_error_errno(r, "Failed to generate unit name: %m");
_cleanup_fclose_ FILE *f = NULL;
- r = generator_open_unit_file(arg_dest, /* source= */ NULL, n, &f);
+ r = generator_open_unit_file(arg_dest_late, /* source= */ NULL, n, &f);
if (r < 0)
return r;
if (r < 0)
return log_error_errno(r, "Failed to write file %s: %m", n);
- r = generator_write_device_timeout(arg_dest, data_what, mount_opts, /* filtered= */ NULL);
+ r = generator_write_device_timeout(arg_dest_late, data_what, mount_opts, /* filtered= */ NULL);
if (r < 0)
return r;
- r = generator_write_device_timeout(arg_dest, hash_what, mount_opts, /* filtered= */ NULL);
+ r = generator_write_device_timeout(arg_dest_late, hash_what, mount_opts, /* filtered= */ NULL);
if (r < 0)
return r;
- r = generator_add_symlink(arg_dest, dd, "wants", n);
+ r = generator_add_symlink(arg_dest_late, dd, "wants", n);
if (r < 0)
return r;
- r = generator_add_symlink(arg_dest, dh, "wants", n);
+ r = generator_add_symlink(arg_dest_late, dh, "wants", n);
if (r < 0)
return r;
return log_oom();
r = write_drop_in_format(
- arg_dest,
+ arg_dest_late,
dmname, 50, "job-timeout",
"# Automatically generated by systemd-gpt-auto-generator\n\n"
"[Unit]\n"
fstype, where);
}
- r = generator_write_device_timeout(arg_dest, what, options, &opts_filtered);
+ r = generator_write_device_timeout(arg_dest_late, what, options, &opts_filtered);
if (r < 0)
return r;
if (r < 0)
return log_error_errno(r, "Failed to generate unit name: %m");
- r = generator_open_unit_file(arg_dest, /* source = */ NULL, unit, &f);
+ r = generator_open_unit_file(arg_dest_late, /* source = */ NULL, unit, &f);
if (r < 0)
return r;
if (post)
fprintf(f, "Before=%s\n", post);
+ /* NB: here we do not write to arg_dest_late, but to arg_dest! We typically leave the normal
+ * generator drop-in dir for explicit configuration via systemd-fstab-generator or similar, and put
+ * out automatic configuration in the arg_dest_late directory. But this one is an exception, since we
+ * need to override the static version of the fsck root service file. */
r = generator_write_fsck_deps(f, arg_dest, what, where, fstype, opts_filtered);
if (r < 0)
return r;
return log_error_errno(r, "Failed to write unit %s: %m", unit);
if (FLAGS_SET(flags, MOUNT_VALIDATEFS)) {
- r = generator_hook_up_validatefs(arg_dest, where, post);
+ r = generator_hook_up_validatefs(arg_dest_late, where, post);
if (r < 0)
return r;
}
if (FLAGS_SET(flags, MOUNT_GROWFS)) {
- r = generator_hook_up_growfs(arg_dest, where, post);
+ r = generator_hook_up_growfs(arg_dest_late, where, post);
if (r < 0)
return r;
}
if (FLAGS_SET(flags, MOUNT_MEASURE)) {
- r = generator_hook_up_pcrfs(arg_dest, where, post);
+ r = generator_hook_up_pcrfs(arg_dest_late, where, post);
if (r < 0)
return r;
}
if (post) {
- r = generator_add_symlink(arg_dest, post, "requires", unit);
+ r = generator_add_symlink(arg_dest_late, post, "requires", unit);
if (r < 0)
return r;
}
if (r < 0)
return log_error_errno(r, "Failed to generate unit name: %m");
- r = generator_open_unit_file(arg_dest, /* source = */ NULL, name, &f);
+ r = generator_open_unit_file(arg_dest_late, /* source = */ NULL, name, &f);
if (r < 0)
return r;
if (r < 0)
return log_error_errno(r, "Failed to write unit %s: %m", name);
- return generator_add_symlink(arg_dest, SPECIAL_SWAP_TARGET, "wants", name);
+ return generator_add_symlink(arg_dest_late, SPECIAL_SWAP_TARGET, "wants", name);
}
static int add_automount(
if (r < 0)
return log_error_errno(r, "Failed to generate unit name: %m");
- r = generator_open_unit_file(arg_dest, /* source = */ NULL, unit, &f);
+ r = generator_open_unit_file(arg_dest_late, /* source = */ NULL, unit, &f);
if (r < 0)
return r;
if (r < 0)
return log_error_errno(r, "Failed to write unit %s: %m", unit);
- return generator_add_symlink(arg_dest, SPECIAL_LOCAL_FS_TARGET, "wants", unit);
+ return generator_add_symlink(arg_dest_late, SPECIAL_LOCAL_FS_TARGET, "wants", unit);
}
static int add_partition_xbootldr(DissectedPartition *p) {
return 0;
}
- r = generator_enable_remount_fs_service(arg_dest);
+ r = generator_enable_remount_fs_service(arg_dest_late);
if (r < 0)
return r;
- path = strjoina(arg_dest, "/systemd-remount-fs.service.d/50-remount-rw.conf");
+ path = strjoina(arg_dest_late, "/systemd-remount-fs.service.d/50-remount-rw.conf");
r = write_string_file(path,
"# Automatically generated by systemd-gpt-auto-generator\n\n"
return 0;
}
- return generator_hook_up_growfs(arg_dest, "/", SPECIAL_LOCAL_FS_TARGET);
+ return generator_hook_up_growfs(arg_dest_late, "/", SPECIAL_LOCAL_FS_TARGET);
}
static int add_partition_root_flags(DissectedPartition *p) {
}
if (in_initrd()) {
- r = generator_write_initrd_root_device_deps(arg_dest, bdev);
+ r = generator_write_initrd_root_device_deps(arg_dest_late, bdev);
if (r < 0)
return 0;
static int run(const char *dest, const char *dest_early, const char *dest_late) {
int r;
- assert_se(arg_dest = dest_late);
+ assert_se(arg_dest = dest);
+ assert_se(arg_dest_late = dest_late);
if (detect_container() > 0) {
log_debug("In a container, exiting.");