about summary refs log tree commit diff
path: root/pkgs/build-support/vm/windows/install/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/build-support/vm/windows/install/default.nix')
-rw-r--r--pkgs/build-support/vm/windows/install/default.nix43
1 files changed, 33 insertions, 10 deletions
diff --git a/pkgs/build-support/vm/windows/install/default.nix b/pkgs/build-support/vm/windows/install/default.nix
index 0021bae87bc8..d766cbcf8e3a 100644
--- a/pkgs/build-support/vm/windows/install/default.nix
+++ b/pkgs/build-support/vm/windows/install/default.nix
@@ -3,7 +3,7 @@
 }:
 
 let
-  inherit (import <nixpkgs> {}) lib stdenv runCommand openssh;
+  inherit (import <nixpkgs> {}) lib stdenv runCommand openssh qemu;
 
   bootstrapAfterLogin = runCommand "bootstrap.sh" {} ''
     cat > "$out" <<EOF
@@ -12,11 +12,11 @@ let
     $(cat "${cygwinSshKey}/key.pub")
     PUBKEY
     ssh-host-config -y -c 'binmode ntsec' -w dummy
-    cygrunsrv -S sshd
 
     net use S: '\\192.168.0.2\nixstore'
     mkdir -p /nix/store
-    mount -o bind /cygdrives/s /nix/store
+    echo "/cygdrives/s /nix/store none bind 0 0" >> /etc/fstab
+    shutdown -s now
     EOF
   '';
 
@@ -28,10 +28,16 @@ let
     '';
   };
 
-  packages = [ "openssh" ];
+  sshKey = "${cygwinSshKey}/key";
+
+  packages = [ "openssh" "shutdown" ];
+
+  instfloppy = import ./unattended-image.nix {
+    cygwinPackages = packages;
+    inherit productKey;
+  };
 
-in {
-  iso = import ../cygwin-iso {
+  cygiso = import ../cygwin-iso {
     inherit packages;
     extraContents = lib.singleton {
       source = bootstrapAfterLogin;
@@ -39,10 +45,27 @@ in {
     };
   };
 
-  floppy = import ./unattended-image.nix {
-    cygwinPackages = packages;
-    inherit productKey;
+  installController = import ../controller {
+    inherit sshKey;
+    installMode = true;
+    qemuArgs = [
+      "-boot order=c,once=d"
+      "-drive file=${instfloppy},readonly,index=0,if=floppy"
+      "-drive file=winvm.img,index=0,media=disk"
+      "-drive file=${isoFile},index=1,media=cdrom"
+      "-drive file=${cygiso}/iso/cd.iso,index=2,media=cdrom"
+    ];
   };
 
-  sshKey = "${cygwinSshKey}/key";
+in stdenv.mkDerivation {
+  name = "cygwin-base-vm";
+  buildCommand = ''
+    ${qemu}/bin/qemu-img create -f qcow2 winvm.img 2G
+    ${installController}
+    ensureDir "$out"
+    cp winvm.img "$out/disk.img"
+  '';
+  passthru = {
+    inherit sshKey;
+  };
 }