systemd-stub. Normally, requested measurement of resources is conditionalized
on kernels that have booted with `systemd-stub`. With this environment
variable the test for that my be bypassed, for testing purposes.
+
+`systemd-repart`:
+
+* `$SYSTEMD_REPART_MKFS_OPTIONS_<FSTYPE>` – configure additional arguments to use for
+ `mkfs` when formatting partition file systems. There's one variable for each
+ of the supported file systems.
return !trunc; /* Return == 0 if we managed to truncate, > 0 if we managed to allocate */
}
-static int mkfs_options_for_fstype(const char *fstype, char ***ret) {
- _cleanup_(strv_freep) char **l = NULL;
- const char *e;
- char *n;
-
- assert(fstype);
-
- n = strjoina("SYSTEMD_HOME_MKFS_OPTIONS_", fstype);
- e = getenv(ascii_strupper(n));
- if (e) {
- l = strv_split(e, NULL);
- if (!l)
- return -ENOMEM;
- }
-
- *ret = TAKE_PTR(l);
- return 0;
-}
-
int home_create_luks(
UserRecord *h,
HomeSetup *setup,
log_info("Setting up LUKS device %s completed.", setup->dm_node);
- r = mkfs_options_for_fstype(fstype, &extra_mkfs_options);
+ r = mkfs_options_from_env("HOME", fstype, &extra_mkfs_options);
if (r < 0)
return log_error_errno(r, "Failed to determine mkfs command line options for '%s': %m", fstype);
+
r = make_filesystem(setup->dm_node, fstype, user_record_user_name_and_realm(h), NULL, fs_uuid, user_record_luks_discard(h), 0, extra_mkfs_options);
if (r < 0)
return r;
_cleanup_hashmap_free_ Hashmap *denylist = NULL;
_cleanup_(rm_rf_physical_and_freep) char *root = NULL;
_cleanup_(partition_target_freep) PartitionTarget *t = NULL;
+ _cleanup_strv_free_ char **extra_mkfs_options = NULL;
if (p->dropped)
continue;
return r;
}
+ r = mkfs_options_from_env("REPART", p->format, &extra_mkfs_options);
+ if (r < 0)
+ return log_error_errno(r,
+ "Failed to determine mkfs command line options for '%s': %m",
+ p->format);
+
r = make_filesystem(partition_target_path(t), p->format, strempty(p->new_label), root,
- p->fs_uuid, arg_discard, context->sector_size, NULL);
+ p->fs_uuid, arg_discard, context->sector_size, extra_mkfs_options);
if (r < 0)
return r;
_cleanup_(rm_rf_physical_and_freep) char *root = NULL;
_cleanup_(unlink_and_freep) char *temp = NULL;
_cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
+ _cleanup_strv_free_ char **extra_mkfs_options = NULL;
_cleanup_close_ int fd = -EBADF;
sd_id128_t fs_uuid;
uint64_t fsz;
return r;
}
+ r = mkfs_options_from_env("REPART", p->format, &extra_mkfs_options);
+ if (r < 0)
+ return log_error_errno(r,
+ "Failed to determine mkfs command line options for '%s': %m",
+ p->format);
+
r = make_filesystem(d ? d->node : temp, p->format, strempty(p->new_label), root, fs_uuid,
- arg_discard, context->sector_size, NULL);
+ arg_discard, context->sector_size, extra_mkfs_options);
if (r < 0)
return r;
return log_error_errno(r, "Failed to make loopback device of %s: %m", temp);
r = make_filesystem(d ? d->node : temp, p->format, strempty(p->new_label), root, p->fs_uuid,
- arg_discard, context->sector_size, NULL);
+ arg_discard, context->sector_size, extra_mkfs_options);
if (r < 0)
return r;
return 0;
}
+
+int mkfs_options_from_env(const char *component, const char *fstype, char ***ret) {
+ _cleanup_(strv_freep) char **l = NULL;
+ const char *e;
+ char *n;
+
+ assert(component);
+ assert(fstype);
+ assert(ret);
+
+ n = strjoina("SYSTEMD_", component, "_MKFS_OPTIONS_", fstype);
+ e = getenv(ascii_strupper(n));
+ if (e) {
+ l = strv_split(e, NULL);
+ if (!l)
+ return -ENOMEM;
+ }
+
+ *ret = TAKE_PTR(l);
+ return 0;
+}