diff options
author | aszlig <aszlig@redmoonstudios.org> | 2014-02-16 03:19:40 +0100 |
---|---|---|
committer | aszlig <aszlig@redmoonstudios.org> | 2014-02-26 04:51:58 +0100 |
commit | fedf13e6cfb94bad00df71aba66f0b6fea233e0f (patch) | |
tree | 33268592fc66e02304b44f93c213e6e6356d6663 /pkgs/build-support | |
parent | 0ce1fd07fe7e59115af60dd33a9e668cbb1ebd4c (diff) | |
download | nixlib-fedf13e6cfb94bad00df71aba66f0b6fea233e0f.tar nixlib-fedf13e6cfb94bad00df71aba66f0b6fea233e0f.tar.gz nixlib-fedf13e6cfb94bad00df71aba66f0b6fea233e0f.tar.bz2 nixlib-fedf13e6cfb94bad00df71aba66f0b6fea233e0f.tar.lz nixlib-fedf13e6cfb94bad00df71aba66f0b6fea233e0f.tar.xz nixlib-fedf13e6cfb94bad00df71aba66f0b6fea233e0f.tar.zst nixlib-fedf13e6cfb94bad00df71aba66f0b6fea233e0f.zip |
vm/windows: Implement and use "xchg" share.
This now finally introduces our xchg share and also uses it for exchanging state while suspending a VM. However, accessing the _real_ Nix store still isn't possible because we're shadowing the directory in the initrd. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/vm/windows/controller/default.nix | 30 | ||||
-rw-r--r-- | pkgs/build-support/vm/windows/default.nix | 3 |
2 files changed, 28 insertions, 5 deletions
diff --git a/pkgs/build-support/vm/windows/controller/default.nix b/pkgs/build-support/vm/windows/controller/default.nix index 6abf87f82c87..da3be51c1026 100644 --- a/pkgs/build-support/vm/windows/controller/default.nix +++ b/pkgs/build-support/vm/windows/controller/default.nix @@ -36,7 +36,7 @@ let ifconfig lo up ifconfig eth0 up 192.168.0.2 - mkdir -p /nix/store /etc /var/run /var/log + mkdir -p /xchg /nix/store /etc /var/run /var/log cat > /etc/passwd <<PASSWD root:x:0:0::/root:/bin/false @@ -45,6 +45,10 @@ let mount -t 9p \ -o trans=virtio,version=9p2000.L,msize=262144,cache=loose \ + xchg /xchg + + mount -t 9p \ + -o trans=virtio,version=9p2000.L,msize=262144,cache=loose \ store /nix/store exec "$command" @@ -59,6 +63,8 @@ let shellEscape = x: "'${lib.replaceChars ["'"] [("'\\'" + "'")] x}'"; + loopForever = "while :; do ${coreutils}/bin/sleep 1; done"; + initScript = writeScript "init.sh" ('' #!${stdenv.shell} ${coreutils}/bin/mkdir -p /etc/samba /etc/samba/private /var/lib/samba @@ -77,6 +83,11 @@ let path = /nix/store read only = no guest ok = yes + + [xchg] + path = /xchg + read only = no + guest ok = yes CONFIG ${samba}/sbin/nmbd -D @@ -92,7 +103,7 @@ let done echo " success." # Loop forever, because this VM is going to be killed. - while :; do ${coreutils}/bin/sleep 1; done + ${loopForever} '' else '' echo -n "Waiting for Windows VM to become available..." while ! ${netcat}/bin/netcat -z 192.168.0.1 22; do @@ -108,6 +119,10 @@ let -l Administrator \ 192.168.0.1 -- ${shellEscape command} + ${lib.optionalString (suspendTo != null) '' + ${coreutils}/bin/touch /xchg/suspend_now + ${loopForever} + ''} ${busybox}/sbin/poweroff -f '')); @@ -123,6 +138,7 @@ let "-nographic" "-no-reboot" "-virtfs local,path=/nix/store,security_model=none,mount_tag=store" + "-virtfs local,path=$XCHG_DIR,security_model=none,mount_tag=xchg" "-kernel ${modulesClosure.kernel}/bzImage" "-initrd ${initrd}/initrd" "-append \"${kernelAppend}\"" @@ -147,6 +163,7 @@ let }); preVM = '' + XCHG_DIR="$(${coreutils}/bin/mktemp -d nix-vm.XXXXXXXXXX --tmpdir)" QEMU_VDE_SOCKET="$(pwd)/vde.ctl" MONITOR_SOCKET="$(pwd)/monitor" ${vde2}/bin/vde_switch -s "$QEMU_VDE_SOCKET" & @@ -154,20 +171,23 @@ let UNIX-CONNECT:$QEMU_VDE_SOCKET/ctl,retry=20 ''; + bgBoth = lib.optionalString (suspendTo != null) " &"; + vmExec = if installMode then '' ${vmTools.qemuProg} ${controllerQemuArgs} & - ${vmTools.qemuProg} ${cygwinQemuArgs} + ${vmTools.qemuProg} ${cygwinQemuArgs}${bgBoth} '' else '' ${vmTools.qemuProg} ${cygwinQemuArgs} & - ${vmTools.qemuProg} ${controllerQemuArgs} + ${vmTools.qemuProg} ${controllerQemuArgs}${bgBoth} '' + lib.optionalString (suspendTo != null) '' + while ! test -e "$XCHG_DIR/suspend_now"; do sleep 1; done ${socat}/bin/socat - UNIX-CONNECT:$MONITOR_SOCKET <<CMD stop migrate_set_speed 4095m migrate "exec:${gzip}/bin/gzip -c > '${suspendTo}'" quit CMD - wait %% + wait %- ''; in writeScript "run-cygwin-vm.sh" '' diff --git a/pkgs/build-support/vm/windows/default.nix b/pkgs/build-support/vm/windows/default.nix index b7c18f6d16c5..89acb9a2d689 100644 --- a/pkgs/build-support/vm/windows/default.nix +++ b/pkgs/build-support/vm/windows/default.nix @@ -21,8 +21,11 @@ let "set -e" "net config server /autodisconnect:-1" "net use S: '\\\\192.168.0.2\\nixstore' /persistent:yes" + "net use X: '\\\\192.168.0.2\\xchg' /persistent:yes" "mkdir -p /nix/store" "mount -o bind /cygdrive/s /nix/store" + "mkdir -p /tmp/xchg" + "mount -o bind /cygdrive/x /tmp/xchg" ]; suspendTo = "state.gz"; }; |