diff options
Diffstat (limited to 'pkgs/build-support/vm/windows/install/default.nix')
-rw-r--r-- | pkgs/build-support/vm/windows/install/default.nix | 43 |
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; + }; } |