diff options
author | Daan De Meyer <daan.j.demeyer@gmail.com> | 2023-03-09 20:33:04 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2023-03-10 09:33:39 +0100 |
commit | 4b8ce14f6c68e5fd75a71fdb7bb998f070940ef1 (patch) | |
tree | 019e0245cd0fc45019b2a01179aac46f1487a1c6 | |
parent | Merge pull request #26741 from poettering/acquire-fd-fixes (diff) | |
download | systemd-4b8ce14f6c68e5fd75a71fdb7bb998f070940ef1.tar.xz systemd-4b8ce14f6c68e5fd75a71fdb7bb998f070940ef1.zip |
repart: Add support for reading mkfs options from environment
-rw-r--r-- | docs/ENVIRONMENT.md | 6 | ||||
-rw-r--r-- | src/home/homework-luks.c | 22 | ||||
-rw-r--r-- | src/partition/repart.c | 20 | ||||
-rw-r--r-- | src/shared/mkfs-util.c | 21 | ||||
-rw-r--r-- | src/shared/mkfs-util.h | 2 |
5 files changed, 48 insertions, 23 deletions
diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md index 3e957113e7..3ec5573ff9 100644 --- a/docs/ENVIRONMENT.md +++ b/docs/ENVIRONMENT.md @@ -520,3 +520,9 @@ SYSTEMD_HOME_DEBUG_SUFFIX=foo \ 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. diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c index 8912b3df52..ac3d2b417c 100644 --- a/src/home/homework-luks.c +++ b/src/home/homework-luks.c @@ -2119,25 +2119,6 @@ static int home_truncate( 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, @@ -2371,9 +2352,10 @@ int home_create_luks( 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; diff --git a/src/partition/repart.c b/src/partition/repart.c index 4e0c5dd785..d80ba573df 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -4092,6 +4092,7 @@ static int context_mkfs(Context *context) { _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; @@ -4143,8 +4144,14 @@ static int context_mkfs(Context *context) { 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; @@ -5413,6 +5420,7 @@ static int context_minimize(Context *context) { _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; @@ -5477,8 +5485,14 @@ static int context_minimize(Context *context) { 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; @@ -5532,7 +5546,7 @@ static int context_minimize(Context *context) { 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; diff --git a/src/shared/mkfs-util.c b/src/shared/mkfs-util.c index d64ef0d47a..7e620391e3 100644 --- a/src/shared/mkfs-util.c +++ b/src/shared/mkfs-util.c @@ -520,3 +520,24 @@ int make_filesystem( 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; +} diff --git a/src/shared/mkfs-util.h b/src/shared/mkfs-util.h index b99ec3c0ad..75ea58543a 100644 --- a/src/shared/mkfs-util.h +++ b/src/shared/mkfs-util.h @@ -20,3 +20,5 @@ int make_filesystem( bool discard, uint64_t sector_size, char * const *extra_mkfs_args); + +int mkfs_options_from_env(const char *component, const char *fstype, char ***ret); |