Files
zulip/scripts/lib/install
Tim Abbott 883e991adf install: Improve support for non-default puppet rules.
Previously, the install script would fail if you passed various
non-default puppet rules, since the code to configure and restart
services that runs later on in the install script largely ran
unconditionally, regardless of whether the relevant service was
actually installed on the target system.

This should make the main install script reusable for installing
e.g. a dedicated Postgres server for use with Zulip.
2016-07-12 14:12:09 -07:00

131 lines
4.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -xe
# Assumes we've already been untarred
# Specify options for apt.
APT_OPTIONS="${APT_OPTIONS:-}"
# Install additional packages using apt.
ADDITIONAL_PACKAGES=${ADDITIONAL_PACKAGES:-}
# Deployment type is almost always voyager.
DEPLOYMENT_TYPE="${DEPLOYMENT_TYPE:-voyager}"
# Comma-separated list of puppet manifests to install. default is
# zulip::voyager for an all-in-one system or zulip::dockervoyager for
# Docker. Use e.g. zulip::app_frontend for a Zulip frontend server.
PUPPET_CLASSES="${PUPPET_CLASSES:-zulip::voyager}"
VIRTUALENV_NEEDED="${VIRTUALENV_NEEDED:-yes}"
apt-get install -y lsb-release
# First, install any updates from the apt repo that may be needed
wget -qO - https://zulip.com/dist/keys/zulip-ppa.asc | apt-key add -
release=$(lsb_release -sc)
if [ "$release" = "trusty" ]; then
cat >/etc/apt/sources.list.d/zulip.list <<EOF
deb http://ppa.launchpad.net/tabbott/zulip/ubuntu trusty main
deb-src http://ppa.launchpad.net/tabbott/zulip/ubuntu trusty main
EOF
elif [ "$release" = "xenial" ]; then
cat >/etc/apt/sources.list.d/zulip.list <<EOF
deb http://ppa.launchpad.net/tabbott/zulip/ubuntu xenial main
deb-src http://ppa.launchpad.net/tabbott/zulip/ubuntu xenial main
EOF
else
echo "Unsupported release $release."
exit 1
fi
apt-get update
apt-get -y dist-upgrade $APT_OPTIONS
apt-get install -y puppet git python python-six $ADDITIONAL_PACKAGES
# Create and activate a virtualenv
if [ "$VIRTUALENV_NEEDED" = "yes" ]; then
/root/zulip/scripts/lib/create-production-venv /root/zulip/zulip-venv
fi
# puppet apply
mkdir -p /etc/zulip
echo -e "[machine]\npuppet_classes = $PUPPET_CLASSES\ndeploy_type = $DEPLOYMENT_TYPE" > /etc/zulip/zulip.conf
/root/zulip/scripts/zulip-puppet-apply -f
# Detect which features were selected for the below
[ -e "/etc/init.d/camo" ]; has_camo=$?
[ -e "/etc/init.d/nginx" ]; has_nginx=$?
[ -e "/etc/supervisor/conf.d/zulip.conf" ]; has_appserver=$?
[ -e "/etc/cron.d/rabbitmq-numconsumers" ]; has_rabbit=$?
[ -e "/etc/init.d/postgresql" ]; has_postgres=$?
# These server restarting bits should be moveable into puppet-land, ideally
apt-get -y upgrade
if [ "$has_nginx" = 0 ]; then
# Check nginx was configured properly now that we've installed it.
# Most common failure mode is certs not having been installed.
nginx -t
service nginx restart
fi
if [ "$has_appserver" = 0 ]; then
/root/zulip/scripts/setup/generate_secrets.py
cp -a /root/zulip/zproject/local_settings_template.py /etc/zulip/settings.py
ln -nsf /etc/zulip/settings.py /root/zulip/zproject/local_settings.py
fi
# Restart camo since generate_secrets.py likely replaced its secret key
if [ "$has_camo" = 0 ] && [ -z "$TRAVIS" ]; then
# We don't run this in Travis CI due to a weird hang bug
service camo restart
fi
if [ "$has_rabbit" = 0 ]; then
if ! rabbitmqctl status >/dev/null; then
set +x
echo; echo "RabbitMQ seems to not have started properly after the installation process."
echo "Often, this can be caused by misconfigured /etc/hosts in virtualized environments"
echo "See https://github.com/zulip/zulip/issues/53#issuecomment-143805121"
echo "for more information"
echo
set -x
exit 1
fi
/root/zulip/scripts/setup/configure-rabbitmq
fi
if [ "$has_postgres" = 0 ]; then
/root/zulip/scripts/setup/postgres-init-db
fi
if [ "$has_appserver" = 0 ]; then
deploy_path=$(/root/zulip/zulip_tools.py make_deploy_path)
mv /root/zulip "$deploy_path"
ln -nsf /home/zulip/deployments/next /root/zulip
ln -nsf "$deploy_path" /home/zulip/deployments/next
ln -nsf "$deploy_path" /home/zulip/deployments/current
ln -nsf /etc/zulip/settings.py "$deploy_path"/zproject/local_settings.py
mkdir -p "$deploy_path"/prod-static/serve
cp -rT "$deploy_path"/prod-static/serve /home/zulip/prod-static
chown -R zulip:zulip /home/zulip /var/log/zulip /etc/zulip/settings.py
fi
if [ -e "/var/run/supervisor.sock" ]; then
# If supervisor isn't running, no need to chown its socket
chown zulip:zulip /var/run/supervisor.sock
fi
cd /home/zulip/deployments/current
set +x
cat <<EOF
Installation complete!
Now edit /etc/zulip/settings.py and fill in the mandatory values.
Once you've done that, please run:
su zulip -c /home/zulip/deployments/current/scripts/setup/initialize-database
To configure the initial database.
EOF