61 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								# Vagrant + VirtualBox
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{ config, pkgs, ... }:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  imports = [
							 | 
						||
| 
								 | 
							
								    ./vagrant-guest.nix
							 | 
						||
| 
								 | 
							
								    ./virtualbox-image.nix
							 | 
						||
| 
								 | 
							
								  ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  virtualbox.params = {
							 | 
						||
| 
								 | 
							
								    audio = "none";
							 | 
						||
| 
								 | 
							
								    audioin = "off";
							 | 
						||
| 
								 | 
							
								    audioout = "off";
							 | 
						||
| 
								 | 
							
								    usb = "off";
							 | 
						||
| 
								 | 
							
								    usbehci = "off";
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								  sound.enable = false;
							 | 
						||
| 
								 | 
							
								  documentation.man.enable = false;
							 | 
						||
| 
								 | 
							
								  documentation.nixos.enable = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  users.extraUsers.vagrant.extraGroups = [ "vboxsf" ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  # generate the box v1 format which is much easier to generate
							 | 
						||
| 
								 | 
							
								  # https://www.vagrantup.com/docs/boxes/format.html
							 | 
						||
| 
								 | 
							
								  system.build.vagrantVirtualbox = pkgs.runCommand
							 | 
						||
| 
								 | 
							
								    "virtualbox-vagrant.box"
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								    ''
							 | 
						||
| 
								 | 
							
								      mkdir workdir
							 | 
						||
| 
								 | 
							
								      cd workdir
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # 1. create that metadata.json file
							 | 
						||
| 
								 | 
							
								      echo '{"provider":"virtualbox"}' > metadata.json
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # 2. create a default Vagrantfile config
							 | 
						||
| 
								 | 
							
								      cat <<VAGRANTFILE > Vagrantfile
							 | 
						||
| 
								 | 
							
								      Vagrant.configure("2") do |config|
							 | 
						||
| 
								 | 
							
								        config.vm.base_mac = "0800275F0936"
							 | 
						||
| 
								 | 
							
								      end
							 | 
						||
| 
								 | 
							
								      VAGRANTFILE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # 3. add the exported VM files
							 | 
						||
| 
								 | 
							
								      tar xvf ${config.system.build.virtualBoxOVA}/*.ova
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # 4. move the ovf to the fixed location
							 | 
						||
| 
								 | 
							
								      mv *.ovf box.ovf
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # 5. generate OVF manifest file
							 | 
						||
| 
								 | 
							
								      rm *.mf
							 | 
						||
| 
								 | 
							
								      touch box.mf
							 | 
						||
| 
								 | 
							
								      for fname in *; do
							 | 
						||
| 
								 | 
							
								        checksum=$(sha256sum $fname | cut -d' ' -f 1)
							 | 
						||
| 
								 | 
							
								        echo "SHA256($fname)= $checksum" >> box.mf
							 | 
						||
| 
								 | 
							
								      done
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      # 6. compress everything back together
							 | 
						||
| 
								 | 
							
								      tar --owner=0 --group=0 --sort=name --numeric-owner -czf $out .
							 | 
						||
| 
								 | 
							
								    '';
							 | 
						||
| 
								 | 
							
								}
							 |