-
-
Notifications
You must be signed in to change notification settings - Fork 202
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #713 from nix-community/interactiveVM
add interactive VMs
- Loading branch information
Showing
11 changed files
with
206 additions
and
63 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Running Interactive VMs with disko | ||
|
||
disko now exports its own flavor of interactive VMs (similiar to config.system.build.vm). | ||
Simply import the disko module and build the vm runner with: | ||
``` | ||
nix build -L '.#nixosConfigurations.mymachine.config.system.build.vmWithDisko' | ||
``` | ||
|
||
afterwards you can run the interactive VM with: | ||
|
||
``` | ||
result/bin/disko-vm | ||
``` | ||
|
||
extraConfig that is set in disko.tests.extraConfig is also applied to the interactive VMs. | ||
imageSize of the VMs will be determined by the imageSize in the disk type in your disko config. | ||
memorySize is set by disko.memSize |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
{ nixosConfig | ||
, diskoLib | ||
, pkgs ? nixosConfig.pkgs | ||
, name ? "${nixosConfig.config.networking.hostName}-disko-images" | ||
, extraConfig ? { } | ||
}: | ||
let | ||
lib = pkgs.lib; | ||
vm_disko = (diskoLib.testLib.prepareDiskoConfig nixosConfig.config diskoLib.testLib.devices).disko; | ||
cfg_ = (lib.evalModules { | ||
modules = lib.singleton { | ||
# _file = toString input; | ||
imports = lib.singleton { disko.devices = vm_disko.devices; }; | ||
options = { | ||
disko.devices = lib.mkOption { | ||
type = diskoLib.toplevel; | ||
}; | ||
disko.testMode = lib.mkOption { | ||
type = lib.types.bool; | ||
default = true; | ||
}; | ||
}; | ||
}; | ||
}).config; | ||
disks = lib.attrValues cfg_.disko.devices.disk; | ||
diskoImages = diskoLib.makeDiskImages { | ||
nixosConfig = nixosConfig; | ||
copyNixStore = false; | ||
extraConfig = { | ||
disko.devices = cfg_.disko.devices; | ||
}; | ||
testMode = true; | ||
}; | ||
rootDisk = { | ||
name = "root"; | ||
file = ''"$tmp"/${(builtins.head disks).name}.qcow2''; | ||
driveExtraOpts.cache = "writeback"; | ||
driveExtraOpts.werror = "report"; | ||
deviceExtraOpts.bootindex = "1"; | ||
deviceExtraOpts.serial = "root"; | ||
}; | ||
otherDisks = map | ||
(disk: { | ||
name = disk.name; | ||
file = ''"$tmp"/${disk.name}.qcow2''; | ||
driveExtraOpts.werror = "report"; | ||
}) | ||
(builtins.tail disks); | ||
vm = (nixosConfig.extendModules { | ||
modules = [ | ||
({ modulesPath, ... }: { | ||
imports = [ | ||
(modulesPath + "/virtualisation/qemu-vm.nix") | ||
]; | ||
}) | ||
{ | ||
virtualisation.useEFIBoot = nixosConfig.config.disko.tests.efi; | ||
virtualisation.memorySize = nixosConfig.config.disko.memSize; | ||
virtualisation.useDefaultFilesystems = false; | ||
virtualisation.diskImage = null; | ||
virtualisation.qemu.drives = [ rootDisk ] ++ otherDisks; | ||
boot.zfs.devNodes = "/dev/disk/by-uuid"; # needed because /dev/disk/by-id is empty in qemu-vms | ||
boot.zfs.forceImportAll = true; | ||
} | ||
{ | ||
# generated from disko config | ||
virtualisation.fileSystems = cfg_.disko.devices._config.fileSystems; | ||
boot = cfg_.disko.devices._config.boot or { }; | ||
swapDevices = cfg_.disko.devices._config.swapDevices or [ ]; | ||
} | ||
nixosConfig.config.disko.tests.extraConfig | ||
]; | ||
}).config.system.build.vm; | ||
in | ||
{ | ||
pure = pkgs.writeDashBin "disko-vm" '' | ||
set -efux | ||
export tmp=$(mktemp -d) | ||
trap 'rm -rf "$tmp"' EXIT | ||
${lib.concatMapStringsSep "\n" (disk: '' | ||
${pkgs.qemu}/bin/qemu-img create -f qcow2 \ | ||
-b ${diskoImages}/${disk.name}.raw \ | ||
-F raw "$tmp"/${disk.name}.qcow2 | ||
'') disks} | ||
set +f | ||
${vm}/bin/run-*-vm | ||
''; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters