diff options
author | aszlig <aszlig@redmoonstudios.org> | 2014-02-17 00:34:19 +0100 |
---|---|---|
committer | aszlig <aszlig@redmoonstudios.org> | 2014-02-26 04:52:00 +0100 |
commit | e40f41e50562873fcdb78bec891a8f19141d4b42 (patch) | |
tree | 2800211450aa15f1e95f01ebbb59f37f3a5c0639 | |
parent | b01c9624cf0c77837e1928a49778f74446ddfaa0 (diff) | |
download | nixlib-e40f41e50562873fcdb78bec891a8f19141d4b42.tar nixlib-e40f41e50562873fcdb78bec891a8f19141d4b42.tar.gz nixlib-e40f41e50562873fcdb78bec891a8f19141d4b42.tar.bz2 nixlib-e40f41e50562873fcdb78bec891a8f19141d4b42.tar.lz nixlib-e40f41e50562873fcdb78bec891a8f19141d4b42.tar.xz nixlib-e40f41e50562873fcdb78bec891a8f19141d4b42.tar.zst nixlib-e40f41e50562873fcdb78bec891a8f19141d4b42.zip |
vm/windows: Collect exit code from xchg.
This is the last item that was missing to get a fully working runInWindowsVM function. Apart from checking exit codes, we also now have preVM/postVM hooks which we can use to write arbitrary constructs around this architecture, without the need to worry about specific details. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
-rw-r--r-- | pkgs/build-support/vm/windows/controller/default.nix | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/pkgs/build-support/vm/windows/controller/default.nix b/pkgs/build-support/vm/windows/controller/default.nix index 4a3e88a22c69..621729eaabb2 100644 --- a/pkgs/build-support/vm/windows/controller/default.nix +++ b/pkgs/build-support/vm/windows/controller/default.nix @@ -128,12 +128,10 @@ let -i /ssh.key \ -l Administrator \ 192.168.0.1 -- ${shellEscape command} - - ${lib.optionalString (suspendTo != null) '' + '') + lib.optionalString (suspendTo != null) '' ${coreutils}/bin/touch /xchg/suspend_now ${loopForever} - ''} - '')); + ''); kernelAppend = lib.concatStringsSep " " [ "panic=1" @@ -175,6 +173,9 @@ let (set; declare -p) > saved-env XCHG_DIR="$(${coreutils}/bin/mktemp -d nix-vm.XXXXXXXXXX --tmpdir)" ${coreutils}/bin/mv saved-env "$XCHG_DIR/" + + eval "$preVM" + QEMU_VDE_SOCKET="$(pwd)/vde.ctl" MONITOR_SOCKET="$(pwd)/monitor" ${vde2}/bin/vde_switch -s "$QEMU_VDE_SOCKET" & @@ -190,7 +191,9 @@ let '' else '' ${vmTools.qemuProg} ${cygwinQemuArgs} & ${vmTools.qemuProg} ${controllerQemuArgs}${bgBoth} - '' + lib.optionalString (suspendTo != null) '' + ''; + + postVM = if suspendTo != null then '' while ! test -e "$XCHG_DIR/suspend_now"; do sleep 1; done ${socat}/bin/socat - UNIX-CONNECT:$MONITOR_SOCKET <<CMD stop @@ -199,10 +202,25 @@ let quit CMD wait %- + + eval "$postVM" + exit 0 + '' else if installMode then '' + eval "$postVM" + exit 0 + '' else '' + if ! test -e "$XCHG_DIR/in-vm-exit"; then + echo "Virtual machine didn't produce an exit code." + exit 1 + fi + + eval "$postVM" + exit $(< "$XCHG_DIR/in-vm-exit") ''; in writeScript "run-cygwin-vm.sh" '' #!${stdenv.shell} -e ${preVM} ${vmExec} + ${postVM} '' |