mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-23 07:23:20 +00:00
nixos/systemd-repart: add assertion for partition label length
The maximum length for a GPT label supported by systemd is 36 characters. When a repart definition contains a label that is longer than the supported maximum length, it is ignored by systemd-repart and a log message is produced. The new assertion makes this obvious to the user at evaluation time, allowing them to either drop the property entirely or choose a supported label within the length limit instead.
This commit is contained in:
parent
661d1becc7
commit
4d59ace14f
@ -10,6 +10,20 @@ let
|
||||
"repart.d"
|
||||
format
|
||||
(lib.mapAttrs (_n: v: { Partition = v; }) cfg.partitions);
|
||||
|
||||
partitionAssertions = lib.mapAttrsToList (fileName: definition:
|
||||
let
|
||||
maxLabelLength = 36; # GPT_LABEL_MAX defined in systemd's gpt.h
|
||||
labelLength = builtins.stringLength definition.Label;
|
||||
in
|
||||
{
|
||||
assertion = definition ? Label -> maxLabelLength >= labelLength;
|
||||
message = ''
|
||||
The partition label '${definition.Label}' defined for '${fileName}' is ${toString labelLength}
|
||||
characters long, but the maximum label length supported by systemd is ${toString maxLabelLength}.
|
||||
'';
|
||||
}
|
||||
) cfg.partitions;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
@ -81,7 +95,7 @@ in
|
||||
'boot.initrd.systemd.repart.enable' requires 'boot.initrd.systemd.enable' to be enabled.
|
||||
'';
|
||||
}
|
||||
];
|
||||
] ++ partitionAssertions;
|
||||
|
||||
# systemd-repart uses loopback devices for partition creation
|
||||
boot.initrd.availableKernelModules = lib.optional initrdCfg.enable "loop";
|
||||
|
Loading…
Reference in New Issue
Block a user