#!/bin/bash
#
# Script to setup a GCE instance to run the webtry server.
# For full instructions see the README file.

cd "$(dirname "$0")"

function banner {
	echo ""
	echo "******************************************"
	echo "*"
	echo "* $1"
	echo "*"
	echo "******************************************"
	echo ""
}

banner "Installing debian packages needed for the server"

sudo apt-get update
sudo apt-get install -y schroot debootstrap monit nginx nodejs nodejs-legacy npm mercurial gcc g++ make

# although aufs is being replaced by overlayfs, it's not clear
# to me if overlayfs is completely supported by schroot yet.
sudo apt-get install -y aufs-tools

banner "Setting up the webtry user account"
sudo adduser webtry

sudo mkdir /home/webtry/cache
sudo mkdir /home/webtry/cache/src
sudo mkdir /home/webtry/inout
sudo mkdir -p /tmp/wwwlogs
sudo mkdir -p /var/log/logserver
sudo chmod 777 /home/webtry/inout
sudo chmod 777 /home/webtry/cache
sudo chmod 777 /home/webtry/cache/src
sudo chmod 777 /tmp/weblogs
sudo chmod 777 /var/log/logserver

sudo cp sys/webtry_schroot /etc/schroot/chroot.d/webtry

CHROOT_JAIL=/srv/chroot/webtry_gyp
# Build the chroot environment.
if [ ! -d ${CHROOT_JAIL} ]; then
	banner "Building the chroot jail"
	sudo mkdir -p ${CHROOT_JAIL}

	sudo debootstrap utopic ${CHROOT_JAIL}
	sudo cp setup_jail.sh ${CHROOT_JAIL}/bin
	sudo chmod 755 ${CHROOT_JAIL}/bin/setup_jail.sh
	sudo chroot ${CHROOT_JAIL} /bin/setup_jail.sh
	sudo sh -c "echo 'none /dev/shm tmpfs rw,nosuid,nodev,noexec 0 0' >> ${CHROOT_JAIL}/etc/fstab"
fi

gsutil cp gs://skia-push/debs/pull/pull:jcgregorio@jcgregorio.cnc.corp.google.com:2014-12-15T14:12:52Z:6152bc3bcdaa54989c957809e77bed282c35676b.deb pull.deb
sudo dpkg -i pull.deb
rm pull.deb


# The continue_install_jail script will update and build up the skia library
# inside the jail.

banner "Installing and updating software on the chroot jail"

sudo cp \
    ../seccomp_bpf.h \
    ../fiddle_secwrap.cpp \
    ../fiddle_secwrap.gyp \
    ../main.cpp \
    ${CHROOT_JAIL}/skia_build/fiddle_main/

sudo cp continue_install_jail.sh ${CHROOT_JAIL}/bin/continue_install_jail.sh
sudo chmod 755 ${CHROOT_JAIL}/bin/continue_install_jail.sh
sudo chroot ${CHROOT_JAIL} /bin/continue_install_jail.sh
sudo chown -R webtry:webtry ${CHROOT_JAIL}/skia_build/skia

sudo cp ../scripts/* ../safec ../safec++ ${CHROOT_JAIL}/skia_build/scripts/

# The continue_install script will fetch the latest versions of
# skia and depot_tools.  We split up the installation process into
# two pieces like this so that the continue_install script can
# be run independently of this one to fetch and build the latest skia.

banner "Building the webtry server outside the jail"

sudo cp continue_install.sh /home/webtry
sudo cp sys/webtry_toml /home/webtry/webtry.toml
sudo chown webtry:webtry /home/webtry/continue_install.sh
sudo chown webtry:webtry /home/webtry/webtry.toml
sudo su - webtry -c /home/webtry/continue_install.sh

banner "Setting up system initialization scripts"

ROOT_PARAMS="-D --verbose --backup=none --group=root --owner=root --preserve-timestamps -T"
EXE_FILE="--mode=755"
CONFIG_FILE="--mode=666"

sudo install $ROOT_PARAMS $EXE_FILE sys/webtry_init /etc/init.d/webtry
sudo install $ROOT_PARAMS $CONFIG_FILE sys/webtry_monit /etc/monit/conf.d/webtry

# Add the nginx configuration files.
sudo rm -f /etc/nginx/sites-enabled/default
sudo cp sys/webtry_nginx /etc/nginx/sites-available/webtry
sudo rm -f /etc/nginx/sites-enabled/webtry
sudo ln -s /etc/nginx/sites-available/webtry /etc/nginx/sites-enabled/webtry

# Download the SSL secrets from the metadata store.
CURL_CMD='curl -H "Metadata-Flavor: Google"'
META_PROJ_URL='http://metadata/computeMetadata/v1/project/attributes'

sudo mkdir -p /etc/nginx/ssl/
sudo sh <<CURL_SCRIPT
    $CURL_CMD $META_PROJ_URL/skfiddle-com-key -o /etc/nginx/ssl/skfiddle_com.key
    $CURL_CMD $META_PROJ_URL/skfiddle-com-pem -o /etc/nginx/ssl/skfiddle_com.pem
CURL_SCRIPT
sudo chmod 700 /etc/nginx/ssl
sudo sh -c "chmod 600 /etc/nginx/ssl/*"

# Confirm that monit is happy.
sudo monit -t
sudo monit reload

banner "Restarting webtry server"

sudo /etc/init.d/webtry restart
sudo /etc/init.d/nginx restart

banner "All done!"
