1# -*- mode: ruby -*-
2# vi: set ft=ruby :
3
4### Inspired by https://github.com/OSGeo/gdal/blob/master/Vagrantfile
5
6require 'socket'
7
8# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
9VAGRANTFILE_API_VERSION = "2"
10
11Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
12
13  vm_ram = ENV['VAGRANT_VM_RAM'] || 1024
14  vm_cpu = ENV['VAGRANT_VM_CPU'] || 1
15
16  config.vm.box = "bionic64"
17
18  config.vm.hostname = "grass-gis-vagrant"
19  config.vm.box_url = "https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64-vagrant.box"
20  config.vm.define "grass-gis-vagrant" do |host|
21
22    config.vm.network :forwarded_port, guest: 80, host: 8080
23
24    host.vm.provider :virtualbox do |vb|
25      vb.customize ["modifyvm", :id, "--memory", vm_ram]
26      vb.customize ["modifyvm", :id, "--cpus", vm_cpu]
27      vb.customize ["modifyvm", :id, "--ioapic", "on"]
28      vb.name = "grass-gis-vagrant"
29    end
30
31    config.ssh.forward_agent = true
32    config.ssh.forward_x11 = true
33
34    ### Define your GRASS data directory to be synce'd on virtual machine
35    # grassdata_dir = "/opt/grassdata"
36    # host.vm.synced_folder grassdata_dir, "/home/vagrant/grassdata"
37
38    ppaRepos = [
39      "ppa:ubuntugis/ubuntugis-unstable"
40    ]
41
42    packageList = [
43      "autoconf2.13",
44      "autotools-dev",
45      "make",
46      "g++",
47      "gettext",
48      "flex",
49      "bison",
50      "libcairo2-dev",
51      "libfftw3-dev",
52      "libfreetype6-dev",
53      "libgdal-dev",
54      "libgeos-dev",
55      "libglu1-mesa-dev",
56      "libjpeg-dev",
57      "libpng-dev",
58      "libtiff-dev",
59      "libmysqlclient-dev",
60      "libncurses5-dev",
61      "libpq-dev",
62      "libproj-dev",
63      "proj-bin",
64      "libreadline-dev",
65      "libsqlite3-dev",
66      "libwxgtk3.0-gtk3-dev",
67      "libxmu-dev",
68      "python3",
69      "python3-wxgtk4.0",
70      "python3-dateutil",
71      "python3-dev",
72      "python3-numpy",
73      "python3-ply",
74      "python3-pil",
75      "python3-six",
76      "libnetcdf-dev",
77      "netcdf-bin",
78      "libblas-dev",
79      "liblapack-dev",
80      "unixodbc-dev",
81      "zlib1g-dev",
82      "liblas-c-dev"
83    ]
84
85    unless File.exists?(".no_apt_cache")
86      cache_dir = "apt-cache/#{config.vm.box}"
87      FileUtils.mkdir_p(cache_dir) unless Dir.exists?(cache_dir)
88      host.vm.synced_folder cache_dir, "/var/cache/apt/archives"
89    end
90
91    if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/grass-gis-vagrant/*/id").empty?
92      pkg_cmd = "sed -i 's#deb http://archive.ubuntu.com/ubuntu#deb mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list; "
93      pkg_cmd << "apt-get update -qq; apt-get install -q -y python-software-properties; "
94
95      if ppaRepos.length > 0
96	ppaRepos.each { |repo| pkg_cmd << "add-apt-repository -y " << repo << " ; " }
97	pkg_cmd << "apt-get update -qq; "
98      end
99
100      # install packages we need we need
101      pkg_cmd << "apt-get install -q -y " + packageList.join(" ") << " ; "
102      host.vm.provision :shell, :inline => pkg_cmd
103
104      scripts = [
105      "clean.sh",
106      ];
107      scripts.each { |script| host.vm.provision :shell, :privileged => false, :path => "tools/vagrant/" << script }
108    end
109    scripts = [
110      "compile.sh",
111    ];
112    scripts.each { |script| host.vm.provision :shell, :privileged => false, :path => "tools/vagrant/" << script }
113  end
114end
115