5abfe6a901
The VirtualBox guest environment had difficulty working with stretch, and upgrading and cleaning out the cruft seemed to reduce .spk size. Hopefully it will be OK.
109 lines
4.9 KiB
Ruby
109 lines
4.9 KiB
Ruby
# -*- mode: ruby -*-
|
|
# vi: set ft=ruby :
|
|
|
|
# Guess at a reasonable name for the VM based on the folder vagrant-spk is
|
|
# run from. The timestamp is there to avoid conflicts if you have multiple
|
|
# folders with the same name.
|
|
VM_NAME = File.basename(File.dirname(File.dirname(__FILE__))) + "_sandstorm_#{Time.now.utc.to_i}"
|
|
|
|
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
|
|
VAGRANTFILE_API_VERSION = "2"
|
|
|
|
unless Vagrant::DEFAULT_SERVER_URL.frozen?
|
|
Vagrant::DEFAULT_SERVER_URL.replace('https://vagrantcloud.com')
|
|
end
|
|
|
|
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|
# Base on the Sandstorm snapshots of the official Debian 8 (jessie) box.
|
|
config.vm.box = "debian/contrib-buster64"
|
|
config.vm.box_version = ">= 0"
|
|
|
|
if Vagrant.has_plugin?("vagrant-vbguest") then
|
|
# vagrant-vbguest is a Vagrant plugin that upgrades
|
|
# the version of VirtualBox Guest Additions within each
|
|
# guest. If you have the vagrant-vbguest plugin, then it
|
|
# needs to know how to compile kernel modules, etc., and so
|
|
# we give it this hint about operating system type.
|
|
config.vm.guest = "debian"
|
|
end
|
|
|
|
# We forward port 6080, the Sandstorm web port, so that developers can
|
|
# visit their sandstorm app from their browser as local.sandstorm.io:6080
|
|
# (aka 127.0.0.1:6080).
|
|
config.vm.network :forwarded_port, guest: 6080, host: 6080
|
|
|
|
# Use a shell script to "provision" the box. This installs Sandstorm using
|
|
# the bundled installer.
|
|
config.vm.provision "shell", inline: "sudo bash /opt/app/.sandstorm/global-setup.sh", keep_color: true
|
|
# Then, do stack-specific and app-specific setup.
|
|
config.vm.provision "shell", inline: "sudo bash /opt/app/.sandstorm/setup.sh", keep_color: true
|
|
|
|
# Shared folders are configured per-provider since vboxsf can't handle >4096 open files,
|
|
# NFS requires privilege escalation every time you bring a VM up,
|
|
# and 9p is only available on libvirt.
|
|
|
|
# Calculate the number of CPUs and the amount of RAM the system has,
|
|
# in a platform-dependent way; further logic below.
|
|
cpus = nil
|
|
total_kB_ram = nil
|
|
|
|
host = RbConfig::CONFIG['host_os']
|
|
if host =~ /darwin/
|
|
cpus = `sysctl -n hw.ncpu`.to_i
|
|
total_kB_ram = `sysctl -n hw.memsize`.to_i / 1024
|
|
elsif host =~ /linux/
|
|
cpus = `nproc`.to_i
|
|
total_kB_ram = `grep MemTotal /proc/meminfo | awk '{print $2}'`.to_i
|
|
elsif host =~ /mingw/
|
|
# powershell may not be available on Windows XP and Vista, so wrap this in a rescue block
|
|
begin
|
|
cpus = `powershell -Command "(Get-WmiObject Win32_Processor -Property NumberOfLogicalProcessors | Select-Object -Property NumberOfLogicalProcessors | Measure-Object NumberOfLogicalProcessors -Sum).Sum"`.to_i
|
|
total_kB_ram = `powershell -Command "Get-CimInstance -class cim_physicalmemory | % $_.Capacity}"`.to_i / 1024
|
|
rescue
|
|
end
|
|
end
|
|
# Use the same number of CPUs within Vagrant as the system, with 1
|
|
# as a default.
|
|
#
|
|
# Use at least 512MB of RAM, and if the system has more than 2GB of
|
|
# RAM, use 1/4 of the system RAM. This seems a reasonable compromise
|
|
# between having the Vagrant guest operating system not run out of
|
|
# RAM entirely (which it basically would if we went much lower than
|
|
# 512MB) and also allowing it to use up a healthily large amount of
|
|
# RAM so it can run faster on systems that can afford it.
|
|
if cpus.nil? or cpus.zero?
|
|
cpus = 1
|
|
end
|
|
if total_kB_ram.nil? or total_kB_ram < 2048000
|
|
assign_ram_mb = 512
|
|
else
|
|
assign_ram_mb = (total_kB_ram / 1024 / 4)
|
|
end
|
|
# Actually apply these CPU/memory values to the providers.
|
|
config.vm.provider :virtualbox do |vb, override|
|
|
vb.cpus = cpus
|
|
vb.memory = assign_ram_mb
|
|
vb.name = VM_NAME
|
|
vb.customize ["modifyvm", :id, "--nictype1", "Am79C973"]
|
|
|
|
# /opt/app and /host-dot-sandstorm are used by vagrant-spk
|
|
override.vm.synced_folder "..", "/opt/app"
|
|
override.vm.synced_folder ENV["HOME"] + "/.sandstorm", "/host-dot-sandstorm"
|
|
# /vagrant is not used by vagrant-spk; we need this line so it gets disabled; if we removed the
|
|
# line, vagrant would automatically insert a synced folder in /vagrant, which is not what we want.
|
|
override.vm.synced_folder "..", "/vagrant", disabled: true
|
|
end
|
|
config.vm.provider :libvirt do |libvirt, override|
|
|
libvirt.cpus = cpus
|
|
libvirt.memory = assign_ram_mb
|
|
libvirt.default_prefix = VM_NAME
|
|
|
|
# /opt/app and /host-dot-sandstorm are used by vagrant-spk
|
|
override.vm.synced_folder "..", "/opt/app", type: "9p", accessmode: "passthrough"
|
|
override.vm.synced_folder ENV["HOME"] + "/.sandstorm", "/host-dot-sandstorm", type: "9p", accessmode: "passthrough"
|
|
# /vagrant is not used by vagrant-spk; we need this line so it gets disabled; if we removed the
|
|
# line, vagrant would automatically insert a synced folder in /vagrant, which is not what we want.
|
|
override.vm.synced_folder "..", "/vagrant", type: "9p", accessmode: "passthrough", disabled: true
|
|
end
|
|
end
|