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