at 16.09-beta 2.3 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.virtualbox; 8 9in { 10 11 imports = [ ./grow-partition.nix ]; 12 13 options = { 14 virtualbox = { 15 baseImageSize = mkOption { 16 type = types.int; 17 default = 10 * 1024; 18 description = '' 19 The size of the VirtualBox base image in MiB. 20 ''; 21 }; 22 }; 23 }; 24 25 config = { 26 27 system.build.virtualBoxOVA = import ../../lib/make-disk-image.nix { 28 name = "nixos-ova-${config.system.nixosLabel}-${pkgs.stdenv.system}"; 29 30 inherit pkgs lib config; 31 partitioned = true; 32 diskSize = cfg.baseImageSize; 33 34 postVM = 35 '' 36 export HOME=$PWD 37 export PATH=${pkgs.linuxPackages.virtualbox}/bin:$PATH 38 39 echo "creating VirtualBox pass-through disk wrapper (no copying invovled)..." 40 VBoxManage internalcommands createrawvmdk -filename disk.vmdk -rawdisk $diskImage 41 42 echo "creating VirtualBox VM..." 43 vmName="NixOS ${config.system.nixosLabel} (${pkgs.stdenv.system})" 44 VBoxManage createvm --name "$vmName" --register \ 45 --ostype ${if pkgs.stdenv.system == "x86_64-linux" then "Linux26_64" else "Linux26"} 46 VBoxManage modifyvm "$vmName" \ 47 --memory 1536 --acpi on --vram 32 \ 48 ${optionalString (pkgs.stdenv.system == "i686-linux") "--pae on"} \ 49 --nictype1 virtio --nic1 nat \ 50 --audiocontroller ac97 --audio alsa \ 51 --rtcuseutc on \ 52 --usb on --mouse usbtablet 53 VBoxManage storagectl "$vmName" --name SATA --add sata --portcount 4 --bootable on --hostiocache on 54 VBoxManage storageattach "$vmName" --storagectl SATA --port 0 --device 0 --type hdd \ 55 --medium disk.vmdk 56 57 echo "exporting VirtualBox VM..." 58 mkdir -p $out 59 fn="$out/nixos-${config.system.nixosLabel}-${pkgs.stdenv.system}.ova" 60 VBoxManage export "$vmName" --output "$fn" 61 62 rm -v $diskImage 63 64 mkdir -p $out/nix-support 65 echo "file ova $fn" >> $out/nix-support/hydra-build-products 66 ''; 67 }; 68 69 fileSystems."/" = { 70 device = "/dev/disk/by-label/nixos"; 71 autoResize = true; 72 }; 73 74 boot.loader.grub.device = "/dev/sda"; 75 76 virtualisation.virtualbox.guest.enable = true; 77 78 }; 79}