types: fix negative relative disk size

This commit is contained in:
lassulus 2022-11-25 08:38:05 +01:00
parent 1668efc14a
commit 417ad31ca5
3 changed files with 43 additions and 5 deletions

27
example/negative-size.nix Normal file
View file

@ -0,0 +1,27 @@
{ disks ? [ "/dev/vdb" "/dev/vdc" ], ... }: {
disk = {
disk0 = {
device = builtins.elemAt disks 0;
type = "disk";
content = {
type = "table";
format = "gpt";
partitions = [
{
name = "nix";
type = "partition";
part-type = "primary";
start = "0%";
end = "-10MiB";
bootable = true;
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
};
}
];
};
};
};
}

11
tests/negative-size.nix Normal file
View file

@ -0,0 +1,11 @@
# this is a regression test for https://github.com/nix-community/disko/issues/52
{ pkgs ? (import <nixpkgs> { })
, makeDiskoTest ? (pkgs.callPackage ./lib.nix { }).makeDiskoTest
}:
makeDiskoTest {
disko-config = ../example/negative-size.nix;
testBoot = false;
extraTestScript = ''
machine.succeed("mountpoint /mnt");
'';
}

View file

@ -394,7 +394,7 @@ rec {
readOnly = true;
type = types.functionTo types.str;
default = dev: ''
parted -s ${dev} mklabel ${config.format}
parted -s ${dev} -- mklabel ${config.format}
${concatMapStrings (partition: partition._create dev config.format) config.partitions}
'';
};
@ -480,18 +480,18 @@ rec {
type = types.functionTo (types.functionTo types.str);
default = dev: type: ''
${optionalString (type == "gpt") ''
parted -s ${dev} mkpart ${config.name} ${diskoLib.maybeStr config.fs-type} ${config.start} ${config.end}
parted -s ${dev} -- mkpart ${config.name} ${diskoLib.maybeStr config.fs-type} ${config.start} ${config.end}
''}
${optionalString (type == "msdos") ''
parted -s ${dev} mkpart ${config.part-type} ${diskoLib.maybeStr config.fs-type} ${diskoLib.maybeStr config.fs-type} ${config.start} ${config.end}
parted -s ${dev} -- mkpart ${config.part-type} ${diskoLib.maybeStr config.fs-type} ${diskoLib.maybeStr config.fs-type} ${config.start} ${config.end}
''}
# ensure /dev/disk/by-path/..-partN exists before continuing
udevadm trigger --subsystem-match=block; udevadm settle
${optionalString (config.bootable) ''
parted -s ${dev} set ${toString config.index} boot on
parted -s ${dev} -- set ${toString config.index} boot on
''}
${concatMapStringsSep "" (flag: ''
parted -s ${dev} set ${toString config.index} ${flag} on
parted -s ${dev} -- set ${toString config.index} ${flag} on
'') config.flags}
# ensure further operations can detect new partitions
udevadm trigger --subsystem-match=block; udevadm settle