nixos/qemu-vm: Don't assume boot drive is always vdb
This commit is contained in:
parent
a5e211dd7f
commit
e74755c422
@ -46,6 +46,13 @@ let
|
||||
description = "Extra options passed to device flag.";
|
||||
};
|
||||
|
||||
name = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description =
|
||||
"A name for the drive. Must be unique in the drives list. Not passed to qemu.";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
@ -84,6 +91,14 @@ let
|
||||
else
|
||||
"/dev/vd${letter}";
|
||||
|
||||
lookupDriveDeviceName = driveName: driveList:
|
||||
(findSingle (drive: drive.name == driveName)
|
||||
(throw "Drive ${driveName} not found")
|
||||
(throw "Multiple drives named ${driveName}") driveList).device;
|
||||
|
||||
addDeviceNames =
|
||||
imap1 (idx: drive: drive // { device = driveDeviceName idx; });
|
||||
|
||||
# Shell script to start the VM.
|
||||
startVM =
|
||||
''
|
||||
@ -406,6 +421,7 @@ in
|
||||
mkOption {
|
||||
type = types.listOf (types.submodule driveOpts);
|
||||
description = "Drives passed to qemu.";
|
||||
apply = addDeviceNames;
|
||||
};
|
||||
|
||||
diskInterface =
|
||||
@ -552,12 +568,14 @@ in
|
||||
|
||||
virtualisation.qemu.drives = mkMerge [
|
||||
[{
|
||||
name = "root";
|
||||
file = "$NIX_DISK_IMAGE";
|
||||
driveExtraOpts.cache = "writeback";
|
||||
driveExtraOpts.werror = "report";
|
||||
}]
|
||||
(mkIf cfg.useBootLoader [
|
||||
{
|
||||
name = "boot";
|
||||
file = "$TMPDIR/disk.img";
|
||||
driveExtraOpts.media = "disk";
|
||||
deviceExtraOpts.bootindex = "1";
|
||||
@ -610,7 +628,7 @@ in
|
||||
};
|
||||
} // optionalAttrs cfg.useBootLoader
|
||||
{ "/boot" =
|
||||
{ device = "${driveDeviceName 1}2";
|
||||
{ device = "${lookupDriveDeviceName "boot" cfg.qemu.drives}2";
|
||||
fsType = "vfat";
|
||||
options = [ "ro" ];
|
||||
noCheck = true; # fsck fails on a r/o filesystem
|
||||
|
Loading…
Reference in New Issue
Block a user