Vagrant.configure(2) do |config|
    config.vm.provider :virtualbox do |vb|
        vb.memory = 4096
        vb.cpus = 8
    end

    config.vm.box = "ubuntu/bionic64"
    config.vm.box_version = "20180719.0.0"

    # Increase disk size if the vagrant-disksize plugin is available
    # To install the plugin: vagrant plugin install vagrant-disksize
    if Vagrant.has_plugin?('vagrant-disksize')
      config.disksize.size = '64GB'
    end

    config.vm.provider :virtualbox do |vb|
        vb.name = "pgbackrest-test"
    end

    # Provision the VM
    config.vm.provision "shell", inline: <<-SHELL
        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Build Begin' && date

        # Suppress "dpkg-reconfigure: unable to re-open stdin: No file or directory" warning
        export DEBIAN_FRONTEND=noninteractive

        # Assign a host name
        sed -i 's/^127\.0\.0\.1\t.*/127\.0\.0\.1\tlocalhost pgbackrest-test/' /etc/hosts
        hostnamectl set-hostname pgbackrest-test

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Update Apt' && date
        apt-get update

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Synchronize Date' && date
        apt-get install -y ntpdate
        ntpdate pool.ntp.org

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Use Google DNS' && date
        echo 'supersede domain-name-servers 8.8.8.8;' >> /etc/dhcp/dhclient.conf
        /etc/init.d/networking restart

        # Set time sync settings so builds don't fail with clock skew errors. If a build does fail with "clock skew detected",
        # rerun the following at the command line.
        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Time Sync Settings' && date
        sudo /etc/init.d/virtualbox-guest-utils stop
        sudo /usr/sbin/VBoxService --timesync-set-on-restore --timesync-interval 5000 --timesync-set-threshold 1

        # Create /tmp/pgbackrest and give ownership to root so we know unit tests are not writing there
        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Create /tmp/pgbackrest owned by root' && date
        sudo mkdir -p /tmp/pgbackrest
        sudo chown root:root /tmp/pgbackrest
        sudo chmod 700 /tmp/pgbackrest

        # Mount tmpfs at /home/vagrant/test for faster testing
        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Mount tmpfs' && date
        sudo -u vagrant mkdir -p -m 770 /home/vagrant/test
        echo 'tmpfs /home/vagrant/test tmpfs size=2560M 0 1' >> /etc/fstab
        mount -a

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install Perl Modules' && date
        apt-get install -y libdbd-pg-perl libxml-checker-perl libyaml-libyaml-perl

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install Build Tools' && date
        apt-get install -y devscripts build-essential lintian git cloc txt2man debhelper libssl-dev zlib1g-dev libperl-dev \
             libxml2-dev liblz4-dev libpq-dev valgrind lcov

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install Docker' && date
        curl -fsSL https://get.docker.com | sh
        sudo usermod -aG docker vagrant

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Install Dev Utilities' && date
        apt-get install -y vim htop

        #---------------------------------------------------------------------------------------------------------------------------
        # echo 'Install TeX Live' && date
        # Not installed by default since latex is only needed for releases and PDF development/testing
        # apt-get install -y --no-install-recommends texlive-latex-base texlive-latex-extra texlive-fonts-recommended
        # apt-get install -y texlive-font-utils

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Build VM Images' && date
        rm -rf /backrest/test/.vagrant/docker/*
        rm -rf /backrest/test/.vagrant/libc/*
        rm -rf /backrest/test/.vagrant/package/*
        sudo su - vagrant -c '/backrest/test/test.pl --vm-build'

        #---------------------------------------------------------------------------------------------------------------------------
        echo 'Build End' && date

        # Useful commands
        #---------------------------------------------------------------------------------------------------------------------------
        # Force remove all containers:
        # docker rm -f $(docker ps -a -q)
        # Force remove all images:
        # docker rmi -f $(docker images -q)
    SHELL

  # Don't share the default vagrant folder
  config.vm.synced_folder ".", "/vagrant", disabled: true

  # Mount backrest path for testing
  config.vm.synced_folder "..", "/backrest"
end
