mirror of
https://github.com/systemd/systemd.git
synced 2025-02-02 13:47:27 +03:00
repart: Add support for reading mkfs options from environment
This commit is contained in:
parent
e0e818bb14
commit
4b8ce14f6c
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user