Initial commit.
This commit is contained in:
		
						commit
						978987de62
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | .vagrant | ||||||
							
								
								
									
										83
									
								
								.sandstorm/Vagrantfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								.sandstorm/Vagrantfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,83 @@ | |||||||
|  | # -*- mode: ruby -*- | ||||||
|  | # vi: set ft=ruby : | ||||||
|  | 
 | ||||||
|  | # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! | ||||||
|  | VAGRANTFILE_API_VERSION = "2" | ||||||
|  | 
 | ||||||
|  | Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| | ||||||
|  |   # We base ourselves off Debian Jessie | ||||||
|  |   config.vm.box = "debian/jessie64" | ||||||
|  | 
 | ||||||
|  |   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" | ||||||
|  |   # Then, do stack-specific and app-specific setup. | ||||||
|  |   config.vm.provision "shell", inline: "sudo bash /opt/app/.sandstorm/setup.sh" | ||||||
|  | 
 | ||||||
|  |   # 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 | ||||||
|  |   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? | ||||||
|  |     cpus = 1 | ||||||
|  |   end | ||||||
|  |   if total_kB_ram.nil? or total_kB_ram < 2048000 | ||||||
|  |     assign_ram_mb = 1024 | ||||||
|  |   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 | ||||||
|  | 
 | ||||||
|  |     override.vm.synced_folder "..", "/opt/app" | ||||||
|  |     override.vm.synced_folder ENV["HOME"] + "/.sandstorm", "/host-dot-sandstorm" | ||||||
|  |     override.vm.synced_folder "..", "/vagrant" | ||||||
|  |   end | ||||||
|  |   config.vm.provider :libvirt do |libvirt, override| | ||||||
|  |     libvirt.cpus = cpus | ||||||
|  |     libvirt.memory = assign_ram_mb | ||||||
|  |     libvirt.random_hostname = true | ||||||
|  | 
 | ||||||
|  |     override.vm.synced_folder "..", "/opt/app", type: "9p", accessmode: "passthrough" | ||||||
|  |     override.vm.synced_folder ENV["HOME"] + "/.sandstorm", "/host-dot-sandstorm", type: "9p", accessmode: "passthrough" | ||||||
|  |     override.vm.synced_folder "..", "/vagrant", type: "9p", accessmode: "passthrough" | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										23
									
								
								.sandstorm/build.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								.sandstorm/build.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | set -euo pipefail | ||||||
|  | # This script is run in the VM each time you run `vagrant-spk dev`.  This is | ||||||
|  | # the ideal place to invoke anything which is normally part of your app's build | ||||||
|  | # process - transforming the code in your repository into the collection of files | ||||||
|  | # which can actually run the service in production | ||||||
|  | # | ||||||
|  | # Some examples: | ||||||
|  | # | ||||||
|  | #   * For a C/C++ application, calling | ||||||
|  | #       ./configure && make && make install | ||||||
|  | #   * For a Python application, creating a virtualenv and installing | ||||||
|  | #     app-specific package dependencies: | ||||||
|  | #       virtualenv /opt/app/env | ||||||
|  | #       /opt/app/env/bin/pip install -r /opt/app/requirements.txt | ||||||
|  | #   * Building static assets from .less or .sass, or bundle and minify JS | ||||||
|  | #   * Collecting various build artifacts or assets into a deployment-ready | ||||||
|  | #     directory structure | ||||||
|  | 
 | ||||||
|  | # By default, this script does nothing.  You'll have to modify it as | ||||||
|  | # appropriate for your application. | ||||||
|  | cabal update | ||||||
|  | cabal install hledger-web-0.26 | ||||||
							
								
								
									
										30
									
								
								.sandstorm/global-setup.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								.sandstorm/global-setup.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | set -euo pipefail | ||||||
|  | echo localhost > /etc/hostname | ||||||
|  | hostname localhost | ||||||
|  | curl https://install.sandstorm.io/ > /host-dot-sandstorm/caches/install.sh | ||||||
|  | SANDSTORM_CURRENT_VERSION=$(curl -fs "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 | ||||||
|  |     curl --output "/host-dot-sandstorm/caches/$SANDSTORM_PACKAGE" "https://dl.sandstorm.io/$SANDSTORM_PACKAGE" | ||||||
|  | fi | ||||||
|  | bash /host-dot-sandstorm/caches/install.sh -d -e "/host-dot-sandstorm/caches/$SANDSTORM_PACKAGE" | ||||||
|  | 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 | ||||||
|  | # TODO: update sandstorm installer script to ask about dev accounts, and | ||||||
|  | # specify a value for this option in the default config? | ||||||
|  | if ! grep --quiet --no-messages ALLOW_DEV_ACCOUNTS=true /opt/sandstorm/sandstorm.conf ; then | ||||||
|  |     echo "ALLOW_DEV_ACCOUNTS=true" | sudo tee -a /opt/sandstorm/sandstorm.conf | ||||||
|  |     sudo service sandstorm restart | ||||||
|  | fi | ||||||
|  | # 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 | ||||||
							
								
								
									
										33
									
								
								.sandstorm/launcher.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								.sandstorm/launcher.sh
									
									
									
									
									
										Normal file
									
								
							| @ -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. | ||||||
|  | mkdir -p /var/lib/hledger | ||||||
|  | touch /var/lib/hledger/ledger.dat | ||||||
|  | /home/vagrant/.cabal/bin/hledger-web --server -f /var/lib/hledger/ledger.dat --port 8000 | ||||||
							
								
								
									
										81
									
								
								.sandstorm/sandstorm-pkgdef.capnp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								.sandstorm/sandstorm-pkgdef.capnp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,81 @@ | |||||||
|  | @0xb83da55f33c7fde7; | ||||||
|  | 
 | ||||||
|  | using Spk = import "/sandstorm/package.capnp"; | ||||||
|  | # This imports: | ||||||
|  | #   $SANDSTORM_HOME/latest/usr/include/sandstorm/package.capnp | ||||||
|  | # Check out that file to see the full, documented package definition format. | ||||||
|  | 
 | ||||||
|  | const pkgdef :Spk.PackageDefinition = ( | ||||||
|  |   # The package definition. Note that the spk tool looks specifically for the | ||||||
|  |   # "pkgdef" constant. | ||||||
|  | 
 | ||||||
|  |   id = "wy71w9g29zevsc8dfcf8c322wgxm97z5fu29y8v9p02p95s6eqj0", | ||||||
|  |   # Your app ID is actually its public key. The private key was placed in | ||||||
|  |   # your keyring. All updates must be signed with the same key. | ||||||
|  | 
 | ||||||
|  |   manifest = ( | ||||||
|  |     # This manifest is included in your app package to tell Sandstorm | ||||||
|  |     # about your app. | ||||||
|  | 
 | ||||||
|  |     appTitle = (defaultText = "HLedger"), | ||||||
|  | 
 | ||||||
|  |     appVersion = 0,  # Increment this for every release. | ||||||
|  | 
 | ||||||
|  |     appMarketingVersion = (defaultText = "0.26"), | ||||||
|  |     # Human-readable representation of appVersion. Should match the way you | ||||||
|  |     # identify versions of your app in documentation and marketing. | ||||||
|  | 
 | ||||||
|  |     actions = [ | ||||||
|  |       # Define your "new document" handlers here. | ||||||
|  |       ( title = (defaultText = "New Ledger"), | ||||||
|  |         command = .myCommand | ||||||
|  |         # The command to run when starting for the first time. (".myCommand" | ||||||
|  |         # is just a constant defined at the bottom of the file.) | ||||||
|  |       ) | ||||||
|  |     ], | ||||||
|  | 
 | ||||||
|  |     continueCommand = .myCommand | ||||||
|  |     # This is the command called to start your app back up after it has been | ||||||
|  |     # shut down for inactivity. Here we're using the same command as for | ||||||
|  |     # starting a new instance, but you could use different commands for each | ||||||
|  |     # case. | ||||||
|  |   ), | ||||||
|  | 
 | ||||||
|  |   sourceMap = ( | ||||||
|  |     # Here we defined where to look for files to copy into your package. The | ||||||
|  |     # `spk dev` command actually figures out what files your app needs | ||||||
|  |     # automatically by running it on a FUSE filesystem. So, the mappings | ||||||
|  |     # here are only to tell it where to find files that the app wants. | ||||||
|  |     searchPath = [ | ||||||
|  |       ( sourcePath = "." ),  # Search this directory first. | ||||||
|  |       ( sourcePath = "/",    # Then search the system root directory. | ||||||
|  |         hidePaths = [ "home", "proc", "sys", | ||||||
|  |                       "etc/passwd", "etc/hosts", "etc/host.conf", | ||||||
|  |                       "etc/nsswitch.conf", "etc/resolv.conf" ] | ||||||
|  |         # You probably don't want the app pulling files from these places, | ||||||
|  |         # so we hide them. Note that /dev, /var, and /tmp are implicitly | ||||||
|  |         # hidden because Sandstorm itself provides them. | ||||||
|  |       ) | ||||||
|  |     ] | ||||||
|  |   ), | ||||||
|  | 
 | ||||||
|  |   fileList = "sandstorm-files.list", | ||||||
|  |   # `spk dev` will write a list of all the files your app uses to this file. | ||||||
|  |   # You should review it later, before shipping your app. | ||||||
|  | 
 | ||||||
|  |   alwaysInclude = [] | ||||||
|  |   # Fill this list with more names of files or directories that should be | ||||||
|  |   # included in your package, even if not listed in sandstorm-files.list. | ||||||
|  |   # Use this to force-include stuff that you know you need but which may | ||||||
|  |   # not have been detected as a dependency during `spk dev`. If you list | ||||||
|  |   # a directory here, its entire contents will be included recursively. | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | const myCommand :Spk.Manifest.Command = ( | ||||||
|  |   # Here we define the command used to start up your server. | ||||||
|  |   argv = ["/sandstorm-http-bridge", "8000", "--", "/opt/app/.sandstorm/launcher.sh"], | ||||||
|  |   environ = [ | ||||||
|  |     # Note that this defines the *entire* environment seen by your app. | ||||||
|  |     (key = "PATH", value = "/usr/local/bin:/usr/bin:/bin:/home/vagrant/.cabal/bin") | ||||||
|  |   ] | ||||||
|  | ); | ||||||
							
								
								
									
										28
									
								
								.sandstorm/setup.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								.sandstorm/setup.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | set -euo pipefail | ||||||
|  | # This script is run in the VM once when you first run `vagrant-spk up`.  It is | ||||||
|  | # useful for installing system-global dependencies.  It is run exactly once | ||||||
|  | # over the lifetime of the VM. | ||||||
|  | # | ||||||
|  | # This is the ideal place to do things like: | ||||||
|  | # | ||||||
|  | #    export DEBIAN_FRONTEND=noninteractive | ||||||
|  | #    apt-get install -y nginx nodejs nodejs-legacy python2.7 mysql-server | ||||||
|  | # | ||||||
|  | # If the packages you're installing here need some configuration adjustments, | ||||||
|  | # this is also a good place to do that: | ||||||
|  | # | ||||||
|  | #    sed --in-place='' \ | ||||||
|  | #            --expression 's/^user www-data/#user www-data/' \ | ||||||
|  | #            --expression 's#^pid /run/nginx.pid#pid /var/run/nginx.pid#' \ | ||||||
|  | #            --expression 's/^\s*error_log.*/error_log stderr;/' \ | ||||||
|  | #            --expression 's/^\s*access_log.*/access_log off;/' \ | ||||||
|  | #            /etc/nginx/nginx.conf | ||||||
|  | 
 | ||||||
|  | # By default, this script does nothing.  You'll have to modify it as | ||||||
|  | # appropriate for your application. | ||||||
|  | apt-get update | ||||||
|  | apt-get install -y haskell-platform libncurses-dev | ||||||
|  | mkdir /var/lib/hledger | ||||||
|  | touch /var/lib/hledger/ledger.dat | ||||||
|  | chown -R vagrant.vagrant /var/lib/hledger | ||||||
							
								
								
									
										1
									
								
								.sandstorm/stack
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.sandstorm/stack
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | diy | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user