aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules/virtualisation/virtualbox-image.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-03-15 13:34:41 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-03-15 14:15:12 +0100
commit5cc7bcda3023b01bd926eccd0c5f095a050c5ab0 (patch)
treee8c235650551ca5bd2df714b090aa5ad297c1951 /nixos/modules/virtualisation/virtualbox-image.nix
parent84f33c6edccae85d419639010fba9f6c7c8c7dfd (diff)
Combine OVA generation steps
Previously this was done in three derivations (one to build the raw disk image, one to convert to OVA, one to add a hydra-build-products file). Now it's done in one step to reduce the amount of copying to/from S3. In particular, not uploading the raw disk image prevents us from hitting hydra-queue-runner's size limit of 2 GiB.
Diffstat (limited to 'nixos/modules/virtualisation/virtualbox-image.nix')
-rw-r--r--nixos/modules/virtualisation/virtualbox-image.nix57
1 files changed, 29 insertions, 28 deletions
diff --git a/nixos/modules/virtualisation/virtualbox-image.nix b/nixos/modules/virtualisation/virtualbox-image.nix
index da9e75a003ad..fab59b2525a5 100644
--- a/nixos/modules/virtualisation/virtualbox-image.nix
+++ b/nixos/modules/virtualisation/virtualbox-image.nix
@@ -22,7 +22,9 @@ in {
config = {
- system.build.virtualBoxImage = import ../../lib/make-disk-image.nix {
+ system.build.virtualBoxOVA = import ../../lib/make-disk-image.nix {
+ name = "nixos-ova-${config.system.nixosLabel}-${pkgs.stdenv.system}";
+
inherit pkgs lib config;
partitioned = true;
diskSize = cfg.baseImageSize;
@@ -37,37 +39,36 @@ in {
postVM =
''
echo "creating VirtualBox disk image..."
- ${pkgs.vmTools.qemu}/bin/qemu-img convert -f raw -O vdi $diskImage $out/disk.vdi
+ ${pkgs.vmTools.qemu}/bin/qemu-img convert -f raw -O vdi $diskImage disk.vdi
rm $diskImage
+
+ echo "creating VirtualBox VM..."
+ export HOME=$PWD
+ export PATH=${pkgs.linuxPackages.virtualbox}/bin:$PATH
+ vmName="NixOS ${config.system.nixosLabel} (${pkgs.stdenv.system})"
+ VBoxManage createvm --name "$vmName" --register \
+ --ostype ${if pkgs.stdenv.system == "x86_64-linux" then "Linux26_64" else "Linux26"}
+ VBoxManage modifyvm "$vmName" \
+ --memory 1536 --acpi on --vram 32 \
+ ${optionalString (pkgs.stdenv.system == "i686-linux") "--pae on"} \
+ --nictype1 virtio --nic1 nat \
+ --audiocontroller ac97 --audio alsa \
+ --rtcuseutc on \
+ --usb on --mouse usbtablet
+ VBoxManage storagectl "$vmName" --name SATA --add sata --portcount 4 --bootable on --hostiocache on
+ VBoxManage storageattach "$vmName" --storagectl SATA --port 0 --device 0 --type hdd \
+ --medium disk.vdi
+
+ echo "exporting VirtualBox VM..."
+ mkdir -p $out
+ fn="$out/nixos-${config.system.nixosLabel}-${pkgs.stdenv.system}.ova"
+ VBoxManage export "$vmName" --output "$fn"
+
+ mkdir -p $out/nix-support
+ echo "file ova $fn" >> $out/nix-support/hydra-build-products
'';
};
- system.build.virtualBoxOVA = pkgs.runCommand "virtualbox-ova"
- { buildInputs = [ pkgs.linuxPackages.virtualbox ];
- vmName = "NixOS ${config.system.nixosLabel} (${pkgs.stdenv.system})";
- fileName = "nixos-image-${config.system.nixosLabel}-${pkgs.stdenv.system}.ova";
- }
- ''
- echo "creating VirtualBox VM..."
- export HOME=$PWD
- VBoxManage createvm --name "$vmName" --register \
- --ostype ${if pkgs.stdenv.system == "x86_64-linux" then "Linux26_64" else "Linux26"}
- VBoxManage modifyvm "$vmName" \
- --memory 1536 --acpi on --vram 32 \
- ${optionalString (pkgs.stdenv.system == "i686-linux") "--pae on"} \
- --nictype1 virtio --nic1 nat \
- --audiocontroller ac97 --audio alsa \
- --rtcuseutc on \
- --usb on --mouse usbtablet
- VBoxManage storagectl "$vmName" --name SATA --add sata --portcount 4 --bootable on --hostiocache on
- VBoxManage storageattach "$vmName" --storagectl SATA --port 0 --device 0 --type hdd \
- --medium ${config.system.build.virtualBoxImage}/disk.vdi
-
- echo "exporting VirtualBox VM..."
- mkdir -p $out
- VBoxManage export "$vmName" --output "$out/$fileName"
- '';
-
fileSystems."/".device = "/dev/disk/by-label/nixos";
boot.loader.grub.device = "/dev/sda";