Loading nixos/lib/systemd-lib.nix +5 −0 Original line number Diff line number Diff line Loading @@ -525,4 +525,9 @@ in rec { )} ''; # The maximum number of characters allowed in a GPT partition label. This # limit is specified by UEFI and enforced by systemd-repart. # Corresponds to GPT_LABEL_MAX from systemd's gpt.h. GPTMaxLabelLength = 36; } nixos/modules/image/repart.nix +38 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,8 @@ let cfg = config.image.repart; inherit (utils.systemdUtils.lib) GPTMaxLabelLength; partitionOptions = { options = { storePaths = lib.mkOption { Loading Loading @@ -224,6 +226,42 @@ in config = { assertions = lib.mapAttrsToList (fileName: partitionConfig: let inherit (partitionConfig) repartConfig; labelLength = builtins.stringLength repartConfig.Label; in { assertion = repartConfig ? Label -> GPTMaxLabelLength >= labelLength; message = '' The partition label '${repartConfig.Label}' defined for '${fileName}' is ${toString labelLength} characters long, but the maximum label length supported by UEFI is ${toString GPTMaxLabelLength}. ''; } ) cfg.partitions; warnings = lib.filter (v: v != null) (lib.mapAttrsToList (fileName: partitionConfig: let inherit (partitionConfig) repartConfig; suggestedMaxLabelLength = GPTMaxLabelLength - 2; labelLength = builtins.stringLength repartConfig.Label; in if (repartConfig ? Label && labelLength >= suggestedMaxLabelLength) then '' The partition label '${repartConfig.Label}' defined for '${fileName}' is ${toString labelLength} characters long. The suggested maximum label length is ${toString suggestedMaxLabelLength}. If you use sytemd-sysupdate style A/B updates, this might not leave enough space to increment the version number included in the label in a future release. For example, if your label is ${toString GPTMaxLabelLength} characters long (the maximum enforced by UEFI) and you're at version 9, you cannot increment this to 10. '' else null ) cfg.partitions); image.repart = let version = config.image.repart.version; Loading nixos/modules/system/boot/systemd/repart.nix +3 −3 Original line number Diff line number Diff line Loading @@ -13,14 +13,14 @@ let partitionAssertions = lib.mapAttrsToList (fileName: definition: let maxLabelLength = 36; # GPT_LABEL_MAX defined in systemd's gpt.h inherit (utils.systemdUtils.lib) GPTMaxLabelLength; labelLength = builtins.stringLength definition.Label; in { assertion = definition ? Label -> maxLabelLength >= labelLength; assertion = definition ? Label -> GPTMaxLabelLength >= 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}. characters long, but the maximum label length supported by systemd is ${toString GPTMaxLabelLength}. ''; } ) cfg.partitions; Loading Loading
nixos/lib/systemd-lib.nix +5 −0 Original line number Diff line number Diff line Loading @@ -525,4 +525,9 @@ in rec { )} ''; # The maximum number of characters allowed in a GPT partition label. This # limit is specified by UEFI and enforced by systemd-repart. # Corresponds to GPT_LABEL_MAX from systemd's gpt.h. GPTMaxLabelLength = 36; }
nixos/modules/image/repart.nix +38 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,8 @@ let cfg = config.image.repart; inherit (utils.systemdUtils.lib) GPTMaxLabelLength; partitionOptions = { options = { storePaths = lib.mkOption { Loading Loading @@ -224,6 +226,42 @@ in config = { assertions = lib.mapAttrsToList (fileName: partitionConfig: let inherit (partitionConfig) repartConfig; labelLength = builtins.stringLength repartConfig.Label; in { assertion = repartConfig ? Label -> GPTMaxLabelLength >= labelLength; message = '' The partition label '${repartConfig.Label}' defined for '${fileName}' is ${toString labelLength} characters long, but the maximum label length supported by UEFI is ${toString GPTMaxLabelLength}. ''; } ) cfg.partitions; warnings = lib.filter (v: v != null) (lib.mapAttrsToList (fileName: partitionConfig: let inherit (partitionConfig) repartConfig; suggestedMaxLabelLength = GPTMaxLabelLength - 2; labelLength = builtins.stringLength repartConfig.Label; in if (repartConfig ? Label && labelLength >= suggestedMaxLabelLength) then '' The partition label '${repartConfig.Label}' defined for '${fileName}' is ${toString labelLength} characters long. The suggested maximum label length is ${toString suggestedMaxLabelLength}. If you use sytemd-sysupdate style A/B updates, this might not leave enough space to increment the version number included in the label in a future release. For example, if your label is ${toString GPTMaxLabelLength} characters long (the maximum enforced by UEFI) and you're at version 9, you cannot increment this to 10. '' else null ) cfg.partitions); image.repart = let version = config.image.repart.version; Loading
nixos/modules/system/boot/systemd/repart.nix +3 −3 Original line number Diff line number Diff line Loading @@ -13,14 +13,14 @@ let partitionAssertions = lib.mapAttrsToList (fileName: definition: let maxLabelLength = 36; # GPT_LABEL_MAX defined in systemd's gpt.h inherit (utils.systemdUtils.lib) GPTMaxLabelLength; labelLength = builtins.stringLength definition.Label; in { assertion = definition ? Label -> maxLabelLength >= labelLength; assertion = definition ? Label -> GPTMaxLabelLength >= 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}. characters long, but the maximum label length supported by systemd is ${toString GPTMaxLabelLength}. ''; } ) cfg.partitions; Loading