-
Notifications
You must be signed in to change notification settings - Fork 383
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Change #1107: Sandstorm support files added
- Loading branch information
1 parent
725c313
commit ff8561f
Showing
9 changed files
with
608 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
|
||
|
||
# vagrant-spk creates shell scripts, which must end in \n, even on a \r\n system. | ||
*.sh text eol=lf | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
|
||
|
||
# This file stores a list of sub-paths of .sandstorm/ that should be ignored by git. | ||
.vagrant | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
# -*- 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" | ||
|
||
# ugly hack to prevent hashicorp's bitrot. See https://github.com/hashicorp/vagrant/issues/9442 | ||
# this setting is required for pre-2.0 vagrant, but causes an error as of 2.0.3, | ||
# remove entirely when confident nobody uses vagrant 1.x for anything. | ||
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 9 (stretch) box with vboxsf support. | ||
config.vm.box = "debian/contrib-stretch64" | ||
config.vm.box_version = "9.3.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 "public_network", :bridge => 'enp2s0', 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 "[math]::Round((Get-WmiObject -Class Win32_ComputerSystem).TotalPhysicalMemory)"`.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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
#!/bin/bash | ||
set -euo pipefail | ||
# This script is run every time an instance of our app - aka grain - starts up. | ||
# This is the entry point for your application both when a grain is first launched | ||
# and when a grain resumes after being previously shut down. | ||
# | ||
# This script is responsible for launching everything your app needs to run. The | ||
# thing it should do *last* is: | ||
# | ||
# * Start a process in the foreground listening on port 8000 for HTTP requests. | ||
# | ||
# This is how you indicate to the platform that your application is up and | ||
# ready to receive requests. Often, this will be something like nginx serving | ||
# static files and reverse proxying for some other dynamic backend service. | ||
# | ||
# Other things you probably want to do in this script include: | ||
# | ||
# * Building folder structures in /var. /var is the only non-tmpfs folder | ||
# mounted read-write in the sandbox, and when a grain is first launched, it | ||
# will start out empty. It will persist between runs of the same grain, but | ||
# be unique per app instance. That is, two instances of the same app have | ||
# separate instances of /var. | ||
# * Preparing a database and running migrations. As your package changes | ||
# over time and you release updates, you will need to deal with migrating | ||
# data from previous schema versions to new ones, since users should not have | ||
# to think about such things. | ||
# * Launching other daemons your app needs (e.g. mysqld, redis-server, etc.) | ||
|
||
# By default, this script does nothing. You'll have to modify it as | ||
# appropriate for your application. | ||
|
||
cd /opt/app | ||
|
||
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
#!/bin/bash | ||
set -euo pipefail | ||
|
||
# Set options for curl. Since we only want to show errors from these curl commands, we also use | ||
# 'cat' to buffer the output; for more information: | ||
# https://github.com/sandstorm-io/vagrant-spk/issues/158 | ||
|
||
CURL_OPTS="--silent --show-error" | ||
echo localhost > /etc/hostname | ||
hostname localhost | ||
|
||
# Install curl that is needed below. | ||
apt-get update | ||
apt-get install -y curl | ||
|
||
# The following line copies stderr through stderr to cat without accidentally leaving it in the | ||
# output file. Be careful when changing. See: https://github.com/sandstorm-io/vagrant-spk/pull/159 | ||
curl $CURL_OPTS https://install.sandstorm.io/ 2>&1 > /host-dot-sandstorm/caches/install.sh | cat | ||
|
||
SANDSTORM_CURRENT_VERSION=$(curl $CURL_OPTS -f "https://install.sandstorm.io/dev?from=0&type=install") | ||
SANDSTORM_PACKAGE="sandstorm-$SANDSTORM_CURRENT_VERSION.tar.xz" | ||
if [[ ! -f /host-dot-sandstorm/caches/$SANDSTORM_PACKAGE ]] ; then | ||
echo -n "Downloading Sandstorm version ${SANDSTORM_CURRENT_VERSION}..." | ||
curl $CURL_OPTS --output "/host-dot-sandstorm/caches/$SANDSTORM_PACKAGE.partial" "https://dl.sandstorm.io/$SANDSTORM_PACKAGE" 2>&1 | cat | ||
mv "/host-dot-sandstorm/caches/$SANDSTORM_PACKAGE.partial" "/host-dot-sandstorm/caches/$SANDSTORM_PACKAGE" | ||
echo "...done." | ||
fi | ||
if [ ! -e /opt/sandstorm/latest/sandstorm ] ; then | ||
echo -n "Installing Sandstorm version ${SANDSTORM_CURRENT_VERSION}..." | ||
bash /host-dot-sandstorm/caches/install.sh -d -e "/host-dot-sandstorm/caches/$SANDSTORM_PACKAGE" >/dev/null | ||
echo "...done." | ||
fi | ||
modprobe ip_tables | ||
# Make the vagrant user part of the sandstorm group so that commands like | ||
# `spk dev` work. | ||
usermod -a -G 'sandstorm' 'vagrant' | ||
# Bind to all addresses, so the vagrant port-forward works. | ||
sudo sed --in-place='' \ | ||
--expression='s/^BIND_IP=.*/BIND_IP=0.0.0.0/' \ | ||
/opt/sandstorm/sandstorm.conf | ||
sudo service sandstorm restart | ||
# Enable apt-cacher-ng proxy to make things faster if one appears to be running on the gateway IP | ||
GATEWAY_IP=$(ip route | grep ^default | cut -d ' ' -f 3) | ||
if nc -z "$GATEWAY_IP" 3142 ; then | ||
echo "Acquire::http::Proxy \"http://$GATEWAY_IP:3142\";" > /etc/apt/apt.conf.d/80httpproxy | ||
fi | ||
# Configure apt to retry fetching things that fail to download. | ||
echo "APT::Acquire::Retries \"10\";" > /etc/apt/apt.conf.d/80sandstorm-retry |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
#!/bin/bash | ||
set -euo pipefail | ||
# This script is run every time an instance of our app - aka grain - starts up. | ||
# This is the entry point for your application both when a grain is first launched | ||
# and when a grain resumes after being previously shut down. | ||
# | ||
# This script is responsible for launching everything your app needs to run. The | ||
# thing it should do *last* is: | ||
# | ||
# * Start a process in the foreground listening on port 8000 for HTTP requests. | ||
# | ||
# This is how you indicate to the platform that your application is up and | ||
# ready to receive requests. Often, this will be something like nginx serving | ||
# static files and reverse proxying for some other dynamic backend service. | ||
# | ||
# Other things you probably want to do in this script include: | ||
# | ||
# * Building folder structures in /var. /var is the only non-tmpfs folder | ||
# mounted read-write in the sandbox, and when a grain is first launched, it | ||
# will start out empty. It will persist between runs of the same grain, but | ||
# be unique per app instance. That is, two instances of the same app have | ||
# separate instances of /var. | ||
# * Preparing a database and running migrations. As your package changes | ||
# over time and you release updates, you will need to deal with migrating | ||
# data from previous schema versions to new ones, since users should not have | ||
# to think about such things. | ||
# * Launching other daemons your app needs (e.g. mysqld, redis-server, etc.) | ||
|
||
# By default, this script does nothing. You'll have to modify it as | ||
# appropriate for your application. | ||
cd /opt/app | ||
|
||
exit 0 |
Oops, something went wrong.