typioca: 2.7.0 -> 2.8.0
[NixPkgs.git] / nixos / modules / virtualisation / vagrant-virtualbox-image.nix
blob2a921894ab612e4b7216b513d551c0208e962460
1 # Vagrant + VirtualBox
3 { config, pkgs, ... }:
6   imports = [
7     ./vagrant-guest.nix
8     ./virtualbox-image.nix
9   ];
11   virtualbox.params = {
12     audio = "none";
13     audioin = "off";
14     audioout = "off";
15     usb = "off";
16     usbehci = "off";
17   };
18   sound.enable = false;
19   documentation.man.enable = false;
20   documentation.nixos.enable = false;
22   users.extraUsers.vagrant.extraGroups = [ "vboxsf" ];
24   # generate the box v1 format which is much easier to generate
25   # https://www.vagrantup.com/docs/boxes/format.html
26   system.build.vagrantVirtualbox = pkgs.runCommand
27     "virtualbox-vagrant.box"
28     {}
29     ''
30       mkdir workdir
31       cd workdir
33       # 1. create that metadata.json file
34       echo '{"provider":"virtualbox"}' > metadata.json
36       # 2. create a default Vagrantfile config
37       cat <<VAGRANTFILE > Vagrantfile
38       Vagrant.configure("2") do |config|
39         config.vm.base_mac = "0800275F0936"
40       end
41       VAGRANTFILE
43       # 3. add the exported VM files
44       tar xvf ${config.system.build.virtualBoxOVA}/*.ova
46       # 4. move the ovf to the fixed location
47       mv *.ovf box.ovf
49       # 5. generate OVF manifest file
50       rm *.mf
51       touch box.mf
52       for fname in *; do
53         checksum=$(sha256sum $fname | cut -d' ' -f 1)
54         echo "SHA256($fname)= $checksum" >> box.mf
55       done
57       # 6. compress everything back together
58       tar --owner=0 --group=0 --sort=name --numeric-owner -czf $out .
59     '';