2
0
Fork 0
genodepkgs/nixos-modules/vbox.nix

103 lines
2.6 KiB
Nix

{ self }:
let
lib' = self.lib.x86_64-linux-x86_64-genode;
pkgs' = self.packages.x86_64-linux-x86_64-genode;
in { config, lib, pkgs, ... }:
let
buildBootDescription =
self.legacyPackages.x86_64-linux.callPackage ./buildBootDescription.nix {
lib = lib';
};
genodeParams = lib'.runDhallCommand "params.dhall" { } ''
vdiUuid=$(${pkgs.virtualbox}/bin/VBoxManage showmediuminfo ${config.system.build.virtualBoxVDI}/nixos.vdi | awk '/^UUID:/ {print $2}')
dhall > $out << EOD
{ vdiFilename = "nixos.vdi"
, vdiUuid = "$vdiUuid"
, memorySize = ${toString config.virtualbox.memorySize}
, vmName = "${config.virtualbox.vmName}"
}
EOD
'';
bootDescription = buildBootDescription {
name = "boot-description";
initConfig = "${./dhall}/vbox-host.dhall ${genodeParams}";
imageInputs = map pkgs'.genodeSources.depot [
"acpi_drv"
"ahci_drv"
"init"
"input_filter"
"libc"
"libiconv"
"nitpicker"
"part_block"
"platform_drv"
"ps2_drv"
"report_rom"
"rtc_drv"
"rump"
"stdcxx"
"vbox5"
"vesa_drv"
"vfs"
] ++ [ pkgs'.base-nova pkgs'.block_router ];
extraBinaries = [
"ld.lib.so"
"libc.so"
"libc_pipe.so"
"libiconv.so"
"libm.so"
"libqemu-usb.so"
"librump.so"
"librump_fs.so"
"libstdcxx.so"
"libvfs.so"
"libvfs_rump.so"
];
};
firmware = lib'.novaImage "stage0" { } bootDescription;
# add system.build.virtualBoxVDI/nixos.vdi to disk image
genodeDiskImage = with pkgs;
runCommand "genode.disk" {
nativeBuildInputs = [ e2fsprogs gptfdisk lzip vmTools.qemu ];
} ''
qemu-img create -f raw fs.raw 16M
qemu-img create -f raw zero.raw 1M
mke2fs fs.raw
cat zero.raw fs.raw zero.raw > gpt.raw
sgdisk gpt.raw --new=partnum 1:34:-34 \
--typecode=1:${import ./dhall/partition-type} \
--change-name=1:genode
mkdir -p $out
lzip -c gpt.raw > "$out/genode-nixos-${config.system.nixos.label}.disk"
'';
in {
system.build.genodeDiskImage =
pkgs.runCommand "nixos-vm" { preferLocalBuild = true; } ''
mkdir -p $out/bin
ln -s ${
pkgs.writeScript "run-nixos-vm" ''
#! ${pkgs.runtimeShell}
${pkgs.vmTools.qemu}/bin/qemu-system-x86_64 \
-machine q35 \
-cpu phenom \
-m 512 \
-serial mon:stdio \
-kernel "${pkgs'.bender}" \
-initrd "${pkgs'.NOVA}/hypervisor-x86_64 arg=iommu novpid serial logmem,${firmware}" \
$@
''
} $out/bin/run-genode-vm
'';
}