Loading nixos/modules/system/boot/systemd/repart.nix +51 −29 Original line number Diff line number Diff line { config, pkgs, lib, ... }: let cfg = config.boot.initrd.systemd.repart; cfg = config.systemd.repart; initrdCfg = config.boot.initrd.systemd.repart; writeDefinition = name: partitionConfig: pkgs.writeText "${name}.conf" Loading @@ -24,11 +25,25 @@ let ''; in { options.boot.initrd.systemd.repart = { options = { boot.initrd.systemd.repart.enable = lib.mkEnableOption (lib.mdDoc "systemd-repart") // { description = lib.mdDoc '' Grow and add partitions to a partition table at boot time in the initrd. systemd-repart only works with GPT partition tables. To run systemd-repart after the initrd, see `options.systemd.repart.enable`. ''; }; systemd.repart = { enable = lib.mkEnableOption (lib.mdDoc "systemd-repart") // { description = lib.mdDoc '' Grow and add partitions to a partition table a boot time in the initrd. Grow and add partitions to a partition table. systemd-repart only works with GPT partition tables. To run systemd-repart while in the initrd, see `options.boot.initrd.systemd.repart.enable`. ''; }; Loading @@ -54,15 +69,15 @@ in ''; }; }; }; config = lib.mkIf cfg.enable { # Link the definitions into /etc so that they are included in the # /nix/store of the sysroot. This also allows the user to run the # systemd-repart binary after activation manually while automatically # picking up the definition files. config = lib.mkIf (cfg.enable || initrdCfg.enable) { # Always link the definitions into /etc so that they are also included in # the /nix/store of the sysroot during early userspace (i.e. while in the # initrd). environment.etc."repart.d".source = definitionsDirectory; boot.initrd.systemd = { boot.initrd.systemd = lib.mkIf initrdCfg.enable { additionalUpstreamUnits = [ "systemd-repart.service" ]; Loading @@ -73,7 +88,7 @@ in # Override defaults in upstream unit. services.systemd-repart = { # Unset the coniditions as they cannot be met before activation because # Unset the conditions as they cannot be met before activation because # the definition files are not stored in the expected locations. unitConfig.ConditionDirectoryNotEmpty = [ " " # required to unset the previous value. Loading @@ -97,5 +112,12 @@ in after = [ "sysroot.mount" ]; }; }; systemd = lib.mkIf cfg.enable { additionalUpstreamSystemUnits = [ "systemd-repart.service" ]; }; }; } nixos/tests/systemd-repart.nix +30 −4 Original line number Diff line number Diff line Loading @@ -52,9 +52,6 @@ let }; }; boot.initrd.systemd.enable = true; boot.initrd.systemd.repart.enable = true; # systemd-repart operates on disks with a partition table. The qemu module, # however, creates separate filesystem images without a partition table, so # we have to create a disk image manually. Loading Loading @@ -88,7 +85,10 @@ in nodes.machine = { config, pkgs, ... }: { imports = [ common ]; boot.initrd.systemd.repart.partitions = { boot.initrd.systemd.enable = true; boot.initrd.systemd.repart.enable = true; systemd.repart.partitions = { "10-root" = { Type = "linux-generic"; }; Loading @@ -105,4 +105,30 @@ in assert "Growing existing partition 1." in systemd_repart_logs ''; }; after-initrd = makeTest { name = "systemd-repart-after-initrd"; meta.maintainers = with maintainers; [ nikstur ]; nodes.machine = { config, pkgs, ... }: { imports = [ common ]; systemd.repart.enable = true; systemd.repart.partitions = { "10-root" = { Type = "linux-generic"; }; }; }; testScript = { nodes, ... }: '' ${useDiskImage nodes.machine} machine.start() machine.wait_for_unit("multi-user.target") systemd_repart_logs = machine.succeed("journalctl --unit systemd-repart.service") assert "Growing existing partition 1." in systemd_repart_logs ''; }; } Loading
nixos/modules/system/boot/systemd/repart.nix +51 −29 Original line number Diff line number Diff line { config, pkgs, lib, ... }: let cfg = config.boot.initrd.systemd.repart; cfg = config.systemd.repart; initrdCfg = config.boot.initrd.systemd.repart; writeDefinition = name: partitionConfig: pkgs.writeText "${name}.conf" Loading @@ -24,11 +25,25 @@ let ''; in { options.boot.initrd.systemd.repart = { options = { boot.initrd.systemd.repart.enable = lib.mkEnableOption (lib.mdDoc "systemd-repart") // { description = lib.mdDoc '' Grow and add partitions to a partition table at boot time in the initrd. systemd-repart only works with GPT partition tables. To run systemd-repart after the initrd, see `options.systemd.repart.enable`. ''; }; systemd.repart = { enable = lib.mkEnableOption (lib.mdDoc "systemd-repart") // { description = lib.mdDoc '' Grow and add partitions to a partition table a boot time in the initrd. Grow and add partitions to a partition table. systemd-repart only works with GPT partition tables. To run systemd-repart while in the initrd, see `options.boot.initrd.systemd.repart.enable`. ''; }; Loading @@ -54,15 +69,15 @@ in ''; }; }; }; config = lib.mkIf cfg.enable { # Link the definitions into /etc so that they are included in the # /nix/store of the sysroot. This also allows the user to run the # systemd-repart binary after activation manually while automatically # picking up the definition files. config = lib.mkIf (cfg.enable || initrdCfg.enable) { # Always link the definitions into /etc so that they are also included in # the /nix/store of the sysroot during early userspace (i.e. while in the # initrd). environment.etc."repart.d".source = definitionsDirectory; boot.initrd.systemd = { boot.initrd.systemd = lib.mkIf initrdCfg.enable { additionalUpstreamUnits = [ "systemd-repart.service" ]; Loading @@ -73,7 +88,7 @@ in # Override defaults in upstream unit. services.systemd-repart = { # Unset the coniditions as they cannot be met before activation because # Unset the conditions as they cannot be met before activation because # the definition files are not stored in the expected locations. unitConfig.ConditionDirectoryNotEmpty = [ " " # required to unset the previous value. Loading @@ -97,5 +112,12 @@ in after = [ "sysroot.mount" ]; }; }; systemd = lib.mkIf cfg.enable { additionalUpstreamSystemUnits = [ "systemd-repart.service" ]; }; }; }
nixos/tests/systemd-repart.nix +30 −4 Original line number Diff line number Diff line Loading @@ -52,9 +52,6 @@ let }; }; boot.initrd.systemd.enable = true; boot.initrd.systemd.repart.enable = true; # systemd-repart operates on disks with a partition table. The qemu module, # however, creates separate filesystem images without a partition table, so # we have to create a disk image manually. Loading Loading @@ -88,7 +85,10 @@ in nodes.machine = { config, pkgs, ... }: { imports = [ common ]; boot.initrd.systemd.repart.partitions = { boot.initrd.systemd.enable = true; boot.initrd.systemd.repart.enable = true; systemd.repart.partitions = { "10-root" = { Type = "linux-generic"; }; Loading @@ -105,4 +105,30 @@ in assert "Growing existing partition 1." in systemd_repart_logs ''; }; after-initrd = makeTest { name = "systemd-repart-after-initrd"; meta.maintainers = with maintainers; [ nikstur ]; nodes.machine = { config, pkgs, ... }: { imports = [ common ]; systemd.repart.enable = true; systemd.repart.partitions = { "10-root" = { Type = "linux-generic"; }; }; }; testScript = { nodes, ... }: '' ${useDiskImage nodes.machine} machine.start() machine.wait_for_unit("multi-user.target") systemd_repart_logs = machine.succeed("journalctl --unit systemd-repart.service") assert "Growing existing partition 1." in systemd_repart_logs ''; }; }