Sketch in vagrant provision script
Known problem with npm install step: this will likely fail when run from a Windows host, when npm tries to create symlinks in the synced folder. Workaround may be to run `vagrant up` from within a shell with admin rights on the host machine (Windows security policy may disallow creation of symlinks otherwise).
This commit is contained in:
parent
5392ad0606
commit
d692db6c19
3
.gitignore
vendored
3
.gitignore
vendored
@ -24,3 +24,6 @@ app/tilecache/**/*.mbtiles
|
||||
|
||||
# Notes
|
||||
TODO
|
||||
|
||||
# VM
|
||||
.vagrant
|
||||
|
41
Vagrantfile
vendored
Normal file
41
Vagrantfile
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
# All Vagrant configuration is done below. The "2" in Vagrant.configure
|
||||
# configures the configuration version (we support older styles for
|
||||
# backwards compatibility). Please don't change it unless you know what
|
||||
# you're doing.
|
||||
Vagrant.configure("2") do |config|
|
||||
# The most common configuration options are documented and commented below.
|
||||
# For a complete reference, please see the online documentation at
|
||||
# https://docs.vagrantup.com.
|
||||
|
||||
# Every Vagrant development environment requires a box. You can search for
|
||||
# boxes at https://vagrantcloud.com/search.
|
||||
config.vm.box = "bento/ubuntu-18.04"
|
||||
|
||||
# Create a forwarded port mapping which allows access to a specific port
|
||||
# within the machine from a port on the host machine and only allow access
|
||||
# via 127.0.0.1 to disable public access
|
||||
config.vm.network "forwarded_port", guest: 3000, host: 3000, host_ip: "127.0.0.1"
|
||||
|
||||
# Provider-specific configuration so you can fine-tune various
|
||||
# backing providers for Vagrant. These expose provider-specific options.
|
||||
# Example for VirtualBox:
|
||||
#
|
||||
# config.vm.provider "virtualbox" do |vb|
|
||||
# # Display the VirtualBox GUI when booting the machine
|
||||
# vb.gui = true
|
||||
#
|
||||
# # Customize the amount of memory on the VM:
|
||||
# vb.memory = "1024"
|
||||
# end
|
||||
#
|
||||
# View the documentation for the provider you are using for more
|
||||
# information on available options.
|
||||
|
||||
# Enable provisioning with a shell script. Additional provisioners such as
|
||||
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
|
||||
# documentation for more information about their specific syntax and use.
|
||||
config.vm.provision "shell", path: "provision/vm_provision.sh"
|
||||
end
|
123
provision/.bashrc
Normal file
123
provision/.bashrc
Normal file
@ -0,0 +1,123 @@
|
||||
# ~/.bashrc: executed by bash(1) for non-login shells.
|
||||
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
|
||||
# for examples
|
||||
|
||||
# If not running interactively, don't do anything
|
||||
case $- in
|
||||
*i*) ;;
|
||||
*) return;;
|
||||
esac
|
||||
|
||||
# don't put duplicate lines or lines starting with space in the history.
|
||||
# See bash(1) for more options
|
||||
HISTCONTROL=ignoreboth
|
||||
|
||||
# append to the history file, don't overwrite it
|
||||
shopt -s histappend
|
||||
|
||||
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
|
||||
HISTSIZE=1000
|
||||
HISTFILESIZE=2000
|
||||
|
||||
# check the window size after each command and, if necessary,
|
||||
# update the values of LINES and COLUMNS.
|
||||
shopt -s checkwinsize
|
||||
|
||||
# If set, the pattern "**" used in a pathname expansion context will
|
||||
# match all files and zero or more directories and subdirectories.
|
||||
#shopt -s globstar
|
||||
|
||||
# make less more friendly for non-text input files, see lesspipe(1)
|
||||
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
|
||||
|
||||
# set variable identifying the chroot you work in (used in the prompt below)
|
||||
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
|
||||
debian_chroot=$(cat /etc/debian_chroot)
|
||||
fi
|
||||
|
||||
# set a fancy prompt (non-color, unless we know we "want" color)
|
||||
case "$TERM" in
|
||||
xterm-color|*-256color) color_prompt=yes;;
|
||||
esac
|
||||
|
||||
# uncomment for a colored prompt, if the terminal has the capability; turned
|
||||
# off by default to not distract the user: the focus in a terminal window
|
||||
# should be on the output of commands, not on the prompt
|
||||
#force_color_prompt=yes
|
||||
|
||||
if [ -n "$force_color_prompt" ]; then
|
||||
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
|
||||
# We have color support; assume it's compliant with Ecma-48
|
||||
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
|
||||
# a case would tend to support setf rather than setaf.)
|
||||
color_prompt=yes
|
||||
else
|
||||
color_prompt=
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$color_prompt" = yes ]; then
|
||||
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
|
||||
else
|
||||
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
|
||||
fi
|
||||
unset color_prompt force_color_prompt
|
||||
|
||||
# If this is an xterm set the title to user@host:dir
|
||||
case "$TERM" in
|
||||
xterm*|rxvt*)
|
||||
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# enable color support of ls and also add handy aliases
|
||||
if [ -x /usr/bin/dircolors ]; then
|
||||
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
|
||||
alias ls='ls --color=auto'
|
||||
#alias dir='dir --color=auto'
|
||||
#alias vdir='vdir --color=auto'
|
||||
|
||||
alias grep='grep --color=auto'
|
||||
alias fgrep='fgrep --color=auto'
|
||||
alias egrep='egrep --color=auto'
|
||||
fi
|
||||
|
||||
# colored GCC warnings and errors
|
||||
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
|
||||
|
||||
# some more ls aliases
|
||||
alias ll='ls -alF'
|
||||
alias la='ls -A'
|
||||
alias l='ls -CF'
|
||||
|
||||
# Add an "alert" alias for long running commands. Use like so:
|
||||
# sleep 10; alert
|
||||
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
|
||||
|
||||
# Alias definitions.
|
||||
# You may want to put all your additions into a separate file like
|
||||
# ~/.bash_aliases, instead of adding them here directly.
|
||||
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
|
||||
|
||||
if [ -f ~/.bash_aliases ]; then
|
||||
. ~/.bash_aliases
|
||||
fi
|
||||
|
||||
# enable programmable completion features (you don't need to enable
|
||||
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
|
||||
# sources /etc/bash.bashrc).
|
||||
if ! shopt -oq posix; then
|
||||
if [ -f /usr/share/bash-completion/bash_completion ]; then
|
||||
. /usr/share/bash-completion/bash_completion
|
||||
elif [ -f /etc/bash_completion ]; then
|
||||
. /etc/bash_completion
|
||||
fi
|
||||
fi
|
||||
|
||||
# use virtual env
|
||||
source ~/colouringlondon/bin/activate
|
||||
|
||||
# start in vagrant dir on login
|
||||
cd /vagrant
|
@ -1,17 +0,0 @@
|
||||
set -x
|
||||
|
||||
# node
|
||||
NODE_VERSION=v8.11.3
|
||||
DISTRO=linux-x64
|
||||
wget -nc https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-$DISTRO.tar.xz
|
||||
sudo mkdir /usr/local/lib/node
|
||||
sudo tar xf node-v8.11.3-linux-x64.tar.xz -C /usr/local/lib/node
|
||||
sudo mv /usr/local/lib/node/node-$NODE_VERSION-$DISTRO /usr/local/lib/node/node-$NODE_VERSION
|
||||
rm node-$NODE_VERSION-$DISTRO.tar.xz
|
||||
|
||||
cat >> ~/.profile <<EOF
|
||||
# Nodejs
|
||||
export NODEJS_HOME=/usr/local/lib/node/node-$NODE_VERSION/bin
|
||||
export PATH=\$NODEJS_HOME:\$PATH
|
||||
EOF
|
||||
|
127
provision/vm_provision.sh
Normal file
127
provision/vm_provision.sh
Normal file
@ -0,0 +1,127 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#
|
||||
# Provision virtual machine
|
||||
#
|
||||
# This script is expected to run a part of the vagrant virtual machine provisioning process. It
|
||||
# is run by the root user and should do all required installation and setup:
|
||||
# 1. Install OS packages
|
||||
# 2. Provision Postgres database
|
||||
# 3. Light-touch set up of virtual machine environment for user convenience (other programs
|
||||
# or dependencies, .bashrc or other dotfiles)
|
||||
#
|
||||
|
||||
# Echo commands as they are executed
|
||||
set -x
|
||||
|
||||
# Create vagrant user if not exists
|
||||
id -u vagrant >/dev/null 2>&1 || useradd --create-home vagrant
|
||||
|
||||
|
||||
#
|
||||
# Install OS packages
|
||||
#
|
||||
|
||||
apt-get update
|
||||
# Install:
|
||||
# - basics: build-essential git vim-nox
|
||||
# - python with pip and venv: python3 python3-pip python3-dev
|
||||
# - postgres and postgis: postgresql postgresql-contrib libpq-dev postgis postgresql-10-postgis-2.4
|
||||
# - spatial shared libs: gdal-bin libspatialindex-dev libgeos-dev libproj-dev
|
||||
apt-get install -y \
|
||||
build-essential git vim-nox wget curl \
|
||||
python3 python3-pip python3-dev python3-venv \
|
||||
postgresql postgresql-contrib libpq-dev postgis postgresql-10-postgis-2.4 \
|
||||
gdal-bin libspatialindex-dev libgeos-dev libproj-dev
|
||||
|
||||
|
||||
#
|
||||
# Install node.js (node and npm)
|
||||
#
|
||||
|
||||
# node version and platform
|
||||
NODE_VERSION=v8.11.3
|
||||
DISTRO=linux-x64
|
||||
|
||||
# download
|
||||
wget -nc https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-$DISTRO.tar.xz
|
||||
|
||||
# extract
|
||||
sudo mkdir /usr/local/lib/node
|
||||
sudo tar xf node-$NODE_VERSION-$DISTRO.tar.xz -C /usr/local/lib/node
|
||||
sudo mv /usr/local/lib/node/node-$NODE_VERSION-$DISTRO /usr/local/lib/node/node-$NODE_VERSION
|
||||
rm node-$NODE_VERSION-$DISTRO.tar.xz
|
||||
|
||||
# add to user PATH
|
||||
cat >> /home/vagrant/.profile <<EOF
|
||||
# Nodejs
|
||||
export NODEJS_HOME=/usr/local/lib/node/node-$NODE_VERSION/bin
|
||||
export PATH=\$NODEJS_HOME:\$PATH
|
||||
EOF
|
||||
|
||||
# add to current (root user) path
|
||||
export NODEJS_HOME=/usr/local/lib/node/node-$NODE_VERSION/bin
|
||||
export PATH=$NODEJS_HOME:$PATH
|
||||
|
||||
|
||||
#
|
||||
# Setup PostgreSQL database
|
||||
#
|
||||
|
||||
# Ensure postgres is running
|
||||
service postgresql start
|
||||
# Ensure en_US locale exists
|
||||
locale-gen en_US.UTF-8
|
||||
# Database config to listen on network connection
|
||||
sed -i "s/#\?listen_address.*/listen_addresses '*'/" /etc/postgresql/9.5/main/postgresql.conf
|
||||
# Allow password connections from any IP (so includes host)
|
||||
echo "host all all all md5" >> /etc/postgresql/10/main/pg_hba.conf
|
||||
# Restart postgres to pick up config changes
|
||||
service postgresql restart
|
||||
|
||||
# Create vagrant role if not exists
|
||||
su postgres -c "psql -c \"SELECT 1 FROM pg_user WHERE usename = 'vagrant';\" " \
|
||||
| grep -q 1 || su postgres -c "psql -c \"CREATE ROLE vagrant SUPERUSER LOGIN PASSWORD 'vagrant';\" "
|
||||
# Create vagrant database if not exists
|
||||
su postgres -c "psql -c \"SELECT 1 FROM pg_database WHERE datname = 'vagrant';\" " \
|
||||
| grep -q 1 || su postgres -c "createdb -E UTF8 -T template0 --locale=en_US.utf8 -O vagrant vagrant"
|
||||
|
||||
# Run all 'up' migrations to create tables, data types, indexes
|
||||
su postgres -c "ls /vagrant/migrations/*.up.sql 2>/dev/null | while read -r migration; do psql < $migration; done;"
|
||||
|
||||
|
||||
#
|
||||
# Install python packages
|
||||
#
|
||||
|
||||
# set up env
|
||||
pyvenv colouringlondon
|
||||
source colouringlondon/bin/activate
|
||||
|
||||
# Install smif
|
||||
pip install --upgrade pip
|
||||
pip install --upgrade setuptools wheel
|
||||
pip install -r /vagrant/etl/requirements.txt
|
||||
|
||||
# Make virtualenv user-editable
|
||||
chown -R vagrant:vagrant /home/vagrant/colouringlondon
|
||||
|
||||
|
||||
#
|
||||
# Install node modules
|
||||
#
|
||||
|
||||
# Install latest release of npm
|
||||
npm install -g npm@next
|
||||
|
||||
# Local fixed install of node modules
|
||||
cd /vagrant/app && npm ci
|
||||
|
||||
|
||||
#
|
||||
# User config
|
||||
#
|
||||
|
||||
# Copy bash config to vagrant home (making sure to clean windows newlines using tr)
|
||||
tr -d '\r' < /vagrant/provision/.bashrc > /home/vagrant/.bashrc
|
||||
chown vagrant:vagrant /home/vagrant/.bashrc
|
Loading…
Reference in New Issue
Block a user