nix-scripts/artiq-fast/wfvm/qemu.nix

42 lines
1.0 KiB
Nix

{ pkgs, qemuMem }:
with pkgs;
let
qemu-img = "${qemu_kvm}/bin/qemu-img";
runQemu = isolateNetwork: forwardedPorts: extraArgs:
let
restrict =
if isolateNetwork
then "on"
else "off";
# use socat instead of `tcp:…` to allow multiple connections
guestfwds =
builtins.concatStringsSep ""
(
map (
{ listenAddr, targetAddr, port }:
",guestfwd=tcp:${listenAddr}:${toString port}-cmd:${socat}/bin/socat\\ -\\ tcp:${targetAddr}:${toString port}"
) forwardedPorts
);
args = [
"-enable-kvm"
"-m"
qemuMem
"-bios"
"${OVMF.fd}/FV/OVMF.fd"
"-netdev"
"user,id=n1,net=192.168.1.0/24,restrict=${restrict},hostfwd=tcp::2022-:22${guestfwds}"
"-device"
"e1000,netdev=n1"
];
argStr = builtins.concatStringsSep " " (args ++ extraArgs);
in
"${qemu_kvm}/bin/qemu-system-x86_64 ${argStr}";
in
{
inherit qemu-img runQemu;
inputs = [ qemu_kvm ];
}