103 lines
2.6 KiB
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
|
|
'';
|
|
}
|