2015-08-04 16:29:49 -07:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
set -euv -o pipefail
|
|
|
|
|
|
2016-12-23 16:38:46 -08:00
|
|
|
readonly PROVIDER="${1:-generic}"
|
2015-08-04 16:29:49 -07:00
|
|
|
|
2015-08-12 19:52:43 -07:00
|
|
|
readonly SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
2015-12-23 13:27:33 +01:00
|
|
|
|
2016-01-22 10:33:34 -08:00
|
|
|
function die {
|
|
|
|
|
echo $1
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-29 19:18:31 -07:00
|
|
|
[[ "$(systemd --version 2>&1)" == *"systemd 229"* ]] || die "Expecting systemd to be 229"
|
2016-01-22 10:33:34 -08:00
|
|
|
|
2015-08-04 16:29:49 -07:00
|
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
|
|
|
|
|
|
|
|
echo "=== Upgrade ==="
|
2016-11-08 15:35:51 +05:30
|
|
|
apt-get -o Dpkg::Options::="--force-confdef" update -y
|
|
|
|
|
apt-get -o Dpkg::Options::="--force-confdef" dist-upgrade -y
|
2016-12-02 17:13:42 +01:00
|
|
|
apt-get install -y curl iptables
|
2015-08-04 16:29:49 -07:00
|
|
|
|
2015-11-01 08:46:28 -08:00
|
|
|
echo "==== Install btrfs tools ==="
|
2015-08-26 09:23:30 -07:00
|
|
|
apt-get -y install btrfs-tools
|
|
|
|
|
|
2016-12-23 10:07:06 -08:00
|
|
|
# https://docs.docker.com/engine/installation/linux/ubuntulinux/
|
2015-08-04 16:29:49 -07:00
|
|
|
echo "==== Install docker ===="
|
2016-12-23 10:07:06 -08:00
|
|
|
apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
|
|
|
|
|
echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" > /etc/apt/sources.list.d/docker.list
|
|
|
|
|
apt-get -y update
|
|
|
|
|
apt-get -y install aufs-tools linux-image-extra-$(uname -r) linux-image-extra-virtual
|
|
|
|
|
apt-get -y install docker-engine=1.12.5-0~ubuntu-xenial # apt-cache madison docker-engine
|
2015-08-04 16:29:49 -07:00
|
|
|
|
2015-08-24 22:33:35 -07:00
|
|
|
echo "=== Enable memory accounting =="
|
2016-12-22 12:20:57 -08:00
|
|
|
sed -e 's/^GRUB_CMDLINE_LINUX="\(.*\)"$/GRUB_CMDLINE_LINUX="\1 cgroup_enable=memory swapaccount=1 panic_on_oops=1 panic=5"/' -i /etc/default/grub
|
|
|
|
|
update-grub
|
2015-08-24 22:33:35 -07:00
|
|
|
|
2016-05-24 13:05:49 -07:00
|
|
|
echo "==== Install nodejs ===="
|
2016-12-23 09:56:27 -08:00
|
|
|
mkdir -p /usr/local/node-6.9.2
|
|
|
|
|
curl -sL https://nodejs.org/dist/v6.9.2/node-v6.9.2-linux-x64.tar.gz | tar zxvf - --strip-components=1 -C /usr/local/node-6.9.2
|
|
|
|
|
ln -s /usr/local/node-6.9.2/bin/node /usr/bin/node
|
|
|
|
|
ln -s /usr/local/node-6.9.2/bin/npm /usr/bin/npm
|
2016-05-24 13:05:49 -07:00
|
|
|
apt-get install -y python # Install python which is required for npm rebuild
|
|
|
|
|
[[ "$(python --version 2>&1)" == "Python 2.7."* ]] || die "Expecting python version to be 2.7.x"
|
2015-08-04 16:29:49 -07:00
|
|
|
|
2016-05-24 13:05:49 -07:00
|
|
|
echo "==== Downloading docker images ===="
|
2016-08-10 12:45:23 +02:00
|
|
|
if [ -f ${SOURCE_DIR}/infra_version.js ]; then
|
2016-08-20 10:24:29 -07:00
|
|
|
images=$(node -e "var i = require('${SOURCE_DIR}/infra_version.js'); console.log(i.baseImages.join(' '), Object.keys(i.images).map(function (x) { return i.images[x].tag; }).join(' '));")
|
2016-08-10 12:45:23 +02:00
|
|
|
|
|
|
|
|
echo "Pulling images: ${images}"
|
|
|
|
|
for image in ${images}; do
|
|
|
|
|
docker pull "${image}"
|
|
|
|
|
done
|
|
|
|
|
else
|
|
|
|
|
echo "No infra_versions.js found, skipping image download"
|
|
|
|
|
fi
|
2015-08-04 16:29:49 -07:00
|
|
|
|
|
|
|
|
echo "==== Install nginx ===="
|
|
|
|
|
apt-get -y install nginx-full
|
2016-04-29 19:38:06 -07:00
|
|
|
[[ "$(nginx -v 2>&1)" == *"nginx/1.10."* ]] || die "Expecting nginx version to be 1.10.x"
|
2015-08-04 16:29:49 -07:00
|
|
|
|
|
|
|
|
echo "==== Install build-essential ===="
|
|
|
|
|
apt-get -y install build-essential rcconf
|
|
|
|
|
|
|
|
|
|
echo "==== Install mysql ===="
|
|
|
|
|
debconf-set-selections <<< 'mysql-server mysql-server/root_password password password'
|
|
|
|
|
debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password password'
|
2016-04-29 19:12:20 -07:00
|
|
|
apt-get -y install mysql-server-5.7
|
|
|
|
|
[[ "$(mysqld --version 2>&1)" == *"5.7."* ]] || die "Expecting mysql version to be 5.7.x"
|
2015-08-04 16:29:49 -07:00
|
|
|
|
2016-04-08 23:58:07 -07:00
|
|
|
echo "==== Install pwgen and swaks awscli ===="
|
|
|
|
|
apt-get -y install pwgen swaks awscli
|
2015-08-04 16:29:49 -07:00
|
|
|
|
|
|
|
|
echo "==== Install collectd ==="
|
2016-01-05 15:12:58 -08:00
|
|
|
if ! apt-get install -y collectd collectd-utils; then
|
|
|
|
|
# FQDNLookup is true in default debian config. The box code has a custom collectd.conf that fixes this
|
|
|
|
|
echo "Failed to install collectd. Presumably because of http://mailman.verplant.org/pipermail/collectd/2015-March/006491.html"
|
|
|
|
|
sed -e 's/^FQDNLookup true/FQDNLookup false/' -i /etc/collectd/collectd.conf
|
|
|
|
|
fi
|
2015-08-04 16:29:49 -07:00
|
|
|
update-rc.d -f collectd remove
|
|
|
|
|
|
2015-10-14 15:08:38 -07:00
|
|
|
# this simply makes it explicit that we run logrotate via cron. it's already part of base ubuntu
|
|
|
|
|
echo "==== Install logrotate ==="
|
|
|
|
|
apt-get install -y cron logrotate
|
|
|
|
|
systemctl enable cron
|
|
|
|
|
|
2015-11-23 11:32:05 -08:00
|
|
|
apt-get -y install acl
|
2015-11-02 13:20:43 -08:00
|
|
|
|
2016-12-06 18:41:06 +01:00
|
|
|
# DO uses Google nameservers by default. This causes RBL queries to fail (host 2.0.0.127.zen.spamhaus.org)
|
|
|
|
|
# We do not use dnsmasq because it is not a recursive resolver and defaults to the value in the interfaces file (which is Google DNS!)
|
|
|
|
|
echo "==== Install unbound DNS ==="
|
|
|
|
|
apt-get -y install unbound
|
|
|
|
|
|
2016-06-10 14:10:59 +02:00
|
|
|
echo "==== Install ssh ==="
|
|
|
|
|
apt-get -y install openssh-server
|