2016-01-12 13:08:43 +01:00
|
|
|
#!/usr/bin/env bash
|
2017-10-02 01:48:25 +02:00
|
|
|
set -e
|
|
|
|
|
|
|
|
usage() {
|
2017-11-15 21:09:53 +01:00
|
|
|
cat <<EOF
|
|
|
|
Usage:
|
2019-02-01 02:23:37 +01:00
|
|
|
install --hostname=zulip.example.com --email=zulip-admin@example.com [options...]
|
2017-11-15 21:09:53 +01:00
|
|
|
install --help
|
|
|
|
|
2018-01-23 00:12:00 +01:00
|
|
|
Other options:
|
2018-03-03 01:10:51 +01:00
|
|
|
--certbot
|
2018-01-24 02:03:18 +01:00
|
|
|
--self-signed-cert
|
2018-03-03 01:10:51 +01:00
|
|
|
--no-init-db
|
2018-08-02 16:29:47 +02:00
|
|
|
--cacert
|
2019-06-07 19:56:56 +02:00
|
|
|
--no-dist-upgrade
|
2019-12-12 10:50:04 +01:00
|
|
|
--postgres-missing-dictionaries
|
|
|
|
--remote-postgres
|
2018-03-03 01:10:51 +01:00
|
|
|
|
|
|
|
The --hostname and --email options are required,
|
|
|
|
unless --no-init-db is set and --certbot is not.
|
|
|
|
|
2017-11-15 21:09:53 +01:00
|
|
|
EOF
|
2017-10-02 01:48:25 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
# Shell option parsing. Over time, we'll want to move some of the
|
|
|
|
# environment variables below into this self-documenting system.
|
2019-12-12 10:50:04 +01:00
|
|
|
args="$(getopt -o '' --long help,no-init-db,no-dist-upgrade,no-overwrite-settings,self-signed-cert,certbot,postgres-missing-dictionaries,remote-postgres,hostname:,email:,cacert: -n "$0" -- "$@")"
|
2017-10-02 01:48:25 +02:00
|
|
|
eval "set -- $args"
|
|
|
|
while true; do
|
|
|
|
case "$1" in
|
2019-02-01 02:23:37 +01:00
|
|
|
--help) usage; exit 0;;
|
2018-02-09 02:05:13 +01:00
|
|
|
--self-signed-cert) SELF_SIGNED_CERT=1; shift;;
|
2018-08-02 16:29:47 +02:00
|
|
|
--cacert) export CUSTOM_CA_CERTIFICATES="$2"; shift; shift;;
|
2018-02-09 02:05:13 +01:00
|
|
|
--certbot) USE_CERTBOT=1; shift;;
|
|
|
|
--hostname) EXTERNAL_HOST="$2"; shift; shift;;
|
|
|
|
--email) ZULIP_ADMINISTRATOR="$2"; shift; shift;;
|
2019-06-13 23:00:19 +02:00
|
|
|
--no-overwrite-settings) NO_OVERWRITE_SETTINGS=1; shift;;
|
2018-03-03 01:10:51 +01:00
|
|
|
--no-init-db) NO_INIT_DB=1; shift;;
|
2019-06-05 14:18:52 +02:00
|
|
|
--no-dist-upgrade) NO_DIST_UPGRADE=1; shift;;
|
2019-12-12 10:50:04 +01:00
|
|
|
--postgres-missing-dictionaries) POSTGRES_MISSING_DICTIONARIES=1; shift;;
|
|
|
|
--remote-postgres) REMOTE_POSTGRES=1; shift;;
|
2018-02-09 02:05:13 +01:00
|
|
|
--) shift; break;;
|
2017-10-02 01:48:25 +02:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2018-01-24 22:23:47 +01:00
|
|
|
if [ "$#" -gt 0 ]; then
|
2019-02-01 02:23:37 +01:00
|
|
|
usage >&2
|
|
|
|
exit 1
|
2018-01-24 22:23:47 +01:00
|
|
|
fi
|
|
|
|
|
2018-02-09 02:12:36 +01:00
|
|
|
## Options from environment variables.
|
|
|
|
#
|
|
|
|
# Specify options for apt.
|
2018-08-03 02:14:47 +02:00
|
|
|
read -r -a APT_OPTIONS <<< "${APT_OPTIONS:-}"
|
2019-12-15 18:15:17 +01:00
|
|
|
# Install additional packages.
|
2018-08-03 02:14:47 +02:00
|
|
|
read -r -a ADDITIONAL_PACKAGES <<< "${ADDITIONAL_PACKAGES:-}"
|
2018-02-09 02:12:36 +01:00
|
|
|
# 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}"
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2018-01-24 02:13:09 +01:00
|
|
|
if [ -n "$SELF_SIGNED_CERT" ] && [ -n "$USE_CERTBOT" ]; then
|
2018-11-12 19:52:44 +01:00
|
|
|
set +x
|
2018-01-24 02:13:09 +01:00
|
|
|
echo "error: --self-signed-cert and --certbot are incompatible" >&2
|
|
|
|
echo >&2
|
2019-02-01 02:23:37 +01:00
|
|
|
usage >&2
|
|
|
|
exit 1
|
2018-01-24 02:13:09 +01:00
|
|
|
fi
|
|
|
|
|
2018-03-03 01:10:51 +01:00
|
|
|
if [ -z "$EXTERNAL_HOST" ] || [ -z "$ZULIP_ADMINISTRATOR" ]; then
|
|
|
|
if [ -n "$USE_CERTBOT" ] || [ -z "$NO_INIT_DB" ]; then
|
2019-02-01 02:23:37 +01:00
|
|
|
usage >&2
|
|
|
|
exit 1
|
2018-03-03 01:10:51 +01:00
|
|
|
fi
|
2018-02-09 01:33:53 +01:00
|
|
|
fi
|
|
|
|
|
2019-02-01 02:23:37 +01:00
|
|
|
if [ "$EXTERNAL_HOST" = zulip.example.com ] ||
|
|
|
|
[ "$ZULIP_ADMINISTRATOR" = zulip-admin@example.com ]; then
|
|
|
|
# These example values are specifically checked for and would fail
|
|
|
|
# later; see check_config in zerver/lib/management.py.
|
|
|
|
echo 'error: The example hostname and email must be replaced with real values.' >&2
|
|
|
|
echo >&2
|
|
|
|
usage >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2017-10-02 01:48:25 +02:00
|
|
|
# Do set -x after option parsing is complete
|
|
|
|
set -x
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2018-08-03 02:14:47 +02:00
|
|
|
ZULIP_PATH="$(readlink -f "$(dirname "$0")"/../..)"
|
2018-02-09 02:19:40 +01:00
|
|
|
|
2017-11-23 03:03:44 +01:00
|
|
|
# Force a known locale. Some packages on PyPI fail to install in some locales.
|
2018-10-11 23:40:58 +02:00
|
|
|
localedef -i en_US -f UTF-8 en_US.UTF-8
|
2017-11-23 03:03:44 +01:00
|
|
|
export LC_ALL="en_US.UTF-8"
|
2018-07-24 07:59:19 +02:00
|
|
|
export LANG="en_US.UTF-8"
|
|
|
|
export LANGUAGE="en_US.UTF-8"
|
2017-11-23 03:03:44 +01:00
|
|
|
|
2018-03-07 04:26:02 +01:00
|
|
|
# Check for a supported OS release.
|
2019-12-20 22:40:23 +01:00
|
|
|
if [ -f /etc/os-release ]; then
|
2019-12-21 01:54:51 +01:00
|
|
|
os_info="$(. /etc/os-release; printf '%s\n' "$ID" "$ID_LIKE" "$VERSION_ID" "$VERSION_CODENAME")"
|
2020-01-09 15:59:16 +01:00
|
|
|
{ read -r os_id; read -r os_id_like; read -r os_version_id; read -r os_version_codename || true; } <<< "$os_info"
|
2019-12-15 17:41:35 +01:00
|
|
|
fi
|
2018-11-29 01:27:41 +01:00
|
|
|
|
2019-12-20 22:40:23 +01:00
|
|
|
case "$os_id$os_version_id" in
|
|
|
|
ubuntu16.04|ubuntu18.04|debian9|debian10) ;;
|
2018-03-07 04:26:02 +01:00
|
|
|
*)
|
|
|
|
set +x
|
|
|
|
cat <<EOF
|
|
|
|
|
2019-12-20 22:40:23 +01:00
|
|
|
Unsupported OS release: $os_id $os_version_id
|
2018-03-07 04:26:02 +01:00
|
|
|
|
|
|
|
Zulip in production is supported only on:
|
2018-05-05 19:46:38 +02:00
|
|
|
- Debian 9 "stretch"
|
2019-08-13 15:11:58 +02:00
|
|
|
- Debian 10 "buster"
|
2018-03-07 04:26:02 +01:00
|
|
|
- Ubuntu 16.04 LTS "xenial"
|
2018-05-24 19:44:29 +02:00
|
|
|
- Ubuntu 18.04 LTS "bionic"
|
2018-03-07 04:26:02 +01:00
|
|
|
|
|
|
|
For more information, see:
|
|
|
|
https://zulip.readthedocs.io/en/latest/production/requirements.html
|
|
|
|
EOF
|
|
|
|
exit 1
|
|
|
|
esac
|
|
|
|
|
2019-12-20 22:40:23 +01:00
|
|
|
if [ "$os_id" = ubuntu ] && ! apt-cache policy |
|
|
|
|
grep -q "^ release v=$os_version_id,o=Ubuntu,a=$os_version_codename,n=$os_version_codename,l=Ubuntu,c=universe"; then
|
2018-11-29 01:27:41 +01:00
|
|
|
set +x
|
|
|
|
cat <<'EOF'
|
|
|
|
|
|
|
|
You must enable the Ubuntu Universe repository before installing
|
2019-01-26 21:27:10 +01:00
|
|
|
Zulip. You can do this with:
|
|
|
|
|
|
|
|
sudo add-apt-repository universe
|
|
|
|
sudo apt update
|
2018-11-29 01:27:41 +01:00
|
|
|
|
|
|
|
For more information, see:
|
|
|
|
https://zulip.readthedocs.io/en/latest/production/requirements.html
|
|
|
|
EOF
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2020-01-24 21:22:18 +01:00
|
|
|
# Check for at least ~1.86GB of RAM before starting installation;
|
2016-12-01 00:29:14 +01:00
|
|
|
# otherwise users will find out about insufficient RAM via weird
|
|
|
|
# errors like a segfault running `pip install`.
|
2020-01-24 21:22:18 +01:00
|
|
|
# Additionally, some AWS images that are advertised to be 2 GB
|
|
|
|
# are actually 1880000B in size.
|
2018-08-03 02:14:47 +02:00
|
|
|
mem_kb=$(head -n1 /proc/meminfo | awk '{print $2}')
|
2020-01-24 21:22:18 +01:00
|
|
|
if [ "$mem_kb" -lt 1860000 ]; then
|
2018-11-12 19:52:44 +01:00
|
|
|
set +x
|
|
|
|
echo -e '\033[0;31m' >&2
|
|
|
|
echo "Insufficient RAM. Zulip requires at least 2GB of RAM." >&2
|
|
|
|
echo >&2
|
|
|
|
echo -e '\033[0m' >&2
|
2016-12-01 00:29:14 +01:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2019-12-15 18:15:17 +01:00
|
|
|
# Do package update, e.g. do `apt-get update` on Debian
|
2019-12-21 01:54:51 +01:00
|
|
|
case " $os_id $os_id_like " in
|
|
|
|
*' debian '*)
|
2019-12-15 18:15:17 +01:00
|
|
|
# setup-apt-repo does an `apt-get update`
|
|
|
|
"$ZULIP_PATH"/scripts/lib/setup-apt-repo
|
|
|
|
;;
|
2019-12-21 01:54:51 +01:00
|
|
|
*' rhel '*)
|
2019-12-15 18:15:17 +01:00
|
|
|
"$ZULIP_PATH"/scripts/lib/setup-yum-repo
|
|
|
|
;;
|
|
|
|
esac
|
2016-08-05 22:27:03 +02:00
|
|
|
|
2016-11-23 15:49:15 +01:00
|
|
|
# Handle issues around upstart on Ubuntu Xenial
|
|
|
|
"$ZULIP_PATH"/scripts/lib/check-upstart
|
|
|
|
|
2018-01-23 00:12:00 +01:00
|
|
|
# Check early for missing SSL certificates
|
2018-01-24 02:03:18 +01:00
|
|
|
if [ "$PUPPET_CLASSES" = "zulip::voyager" ] && [ -z "$USE_CERTBOT""$SELF_SIGNED_CERT" ] && { ! [ -e "/etc/ssl/private/zulip.key" ] || ! [ -e "/etc/ssl/certs/zulip.combined-chain.crt" ]; }; then
|
2018-02-09 02:05:13 +01:00
|
|
|
set +x
|
|
|
|
cat <<EOF
|
|
|
|
|
2018-04-19 20:00:37 +02:00
|
|
|
No SSL certificate found. One or both required files is missing:
|
|
|
|
/etc/ssl/private/zulip.key
|
|
|
|
/etc/ssl/certs/zulip.combined-chain.crt
|
|
|
|
|
|
|
|
Suggested solutions:
|
|
|
|
* For most sites, the --certbot option is recommended.
|
|
|
|
* If you have your own key and cert, see docs linked below
|
|
|
|
for how to install them.
|
|
|
|
* For non-production testing, try the --self-signed-cert option.
|
|
|
|
|
|
|
|
For help and more details, see our SSL documentation:
|
|
|
|
https://zulip.readthedocs.io/en/latest/production/ssl-certificates.html
|
2018-02-09 02:05:13 +01:00
|
|
|
|
|
|
|
Once fixed, just rerun scripts/setup/install; it'll pick up from here!
|
|
|
|
|
|
|
|
EOF
|
2017-10-24 22:30:27 +02:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2019-06-05 14:18:52 +02:00
|
|
|
# don't run dist-upgrade in one click apps to make the
|
|
|
|
# installation process more seamless.
|
|
|
|
if [ -z "$NO_DIST_UPGRADE" ]; then
|
2019-12-21 01:54:51 +01:00
|
|
|
case " $os_id $os_id_like " in
|
|
|
|
*' debian '*)
|
2019-12-16 14:57:01 +01:00
|
|
|
apt-get -y dist-upgrade "${APT_OPTIONS[@]}"
|
|
|
|
;;
|
|
|
|
# On CentOS, there is no need to do `yum -y upgrade` because `yum -y
|
|
|
|
# update` already does the same thing.
|
|
|
|
esac
|
2019-06-05 14:18:52 +02:00
|
|
|
fi
|
|
|
|
|
2019-12-21 01:54:51 +01:00
|
|
|
case " $os_id $os_id_like " in
|
|
|
|
*' debian '*)
|
2019-12-15 18:29:09 +01:00
|
|
|
if ! apt-get install -y \
|
|
|
|
puppet git curl wget jq \
|
|
|
|
python python3 python-six python3-six crudini \
|
|
|
|
"${ADDITIONAL_PACKAGES[@]}"; then
|
|
|
|
set +x
|
|
|
|
echo -e '\033[0;31m' >&2
|
|
|
|
echo "Installing packages failed; is network working and (on Ubuntu) the universe repository enabled?" >&2
|
|
|
|
echo >&2
|
|
|
|
echo -e '\033[0m' >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
2019-12-21 01:54:51 +01:00
|
|
|
*' rhel '*)
|
2019-12-15 18:29:09 +01:00
|
|
|
if ! yum install -y \
|
|
|
|
puppet git curl wget jq \
|
|
|
|
python python3 python-six python3-six crudini \
|
|
|
|
"${ADDITIONAL_PACKAGES[@]}"; then
|
|
|
|
set +x
|
|
|
|
echo -e '\033[0;31m' >&2
|
|
|
|
echo "Installing packages failed; is network working?" >&2
|
|
|
|
echo >&2
|
|
|
|
echo -e '\033[0m' >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
2017-08-23 23:54:59 +02:00
|
|
|
|
2018-01-23 00:12:00 +01:00
|
|
|
if [ -n "$USE_CERTBOT" ]; then
|
|
|
|
"$ZULIP_PATH"/scripts/setup/setup-certbot \
|
|
|
|
--no-zulip-conf --method=standalone \
|
2018-10-20 10:11:46 +02:00
|
|
|
"$EXTERNAL_HOST" --email "$ZULIP_ADMINISTRATOR"
|
2018-02-09 01:27:13 +01:00
|
|
|
elif [ -n "$SELF_SIGNED_CERT" ]; then
|
|
|
|
"$ZULIP_PATH"/scripts/setup/generate-self-signed-cert \
|
|
|
|
--exists-ok "${EXTERNAL_HOST:-$(hostname)}"
|
2018-01-23 00:12:00 +01:00
|
|
|
fi
|
|
|
|
|
2016-06-22 21:00:50 +02:00
|
|
|
# Create and activate a virtualenv
|
2016-07-12 20:46:49 +02:00
|
|
|
if [ "$VIRTUALENV_NEEDED" = "yes" ]; then
|
2016-11-20 05:45:53 +01:00
|
|
|
"$ZULIP_PATH"/scripts/lib/create-production-venv "$ZULIP_PATH"
|
2017-05-24 02:46:52 +02:00
|
|
|
"$ZULIP_PATH"/scripts/lib/create-thumbor-venv "$ZULIP_PATH"
|
2016-07-12 20:46:49 +02:00
|
|
|
fi
|
2016-06-22 21:00:50 +02:00
|
|
|
|
2017-01-07 00:57:42 +01:00
|
|
|
"$ZULIP_PATH"/scripts/lib/install-node
|
|
|
|
|
2018-02-09 02:14:28 +01:00
|
|
|
# Generate /etc/zulip/zulip.conf .
|
2013-11-14 06:32:49 +01:00
|
|
|
mkdir -p /etc/zulip
|
travis: Remove rabbitmq nodename dependency on hostname.
Because rabbitmq doesn't support changing the nodename of a running
rabbitmq node, Zulip installations suffered a plague of issues where
e.g. a Zulip server would reboot, the hostname would change, and
suddenly the local rabbitmq instance being used by Zulip would stop
working.
We address this problem by using, by default, a fixed rabbitmq
nodename, but providing server administrators the option to set the
rabbitmq nodename used by Zulip however they choose.
To upgrade an existing server to use this new configuration, one will
need to add something like the following to /etc/zulip/zulip.conf:
[rabbitmq]
nodename = zulip@localhost
However, I don't believe we have the puppet code in place to make this
work correctly at initial installation without rabbitmq-server being
already installed (but off), as we can easily setup in Travis CI but I
haven't been willing to do for the installer. So for now, this just
fixes our Travis CI problems.
Fixes: #1579.
2016-08-10 03:40:07 +02:00
|
|
|
(
|
2018-02-09 02:05:13 +01:00
|
|
|
cat <<EOF
|
|
|
|
[machine]
|
|
|
|
puppet_classes = $PUPPET_CLASSES
|
|
|
|
deploy_type = $DEPLOYMENT_TYPE
|
|
|
|
EOF
|
2016-11-20 06:36:04 +01:00
|
|
|
|
|
|
|
# Note: there are four dpkg-query outputs to consider:
|
|
|
|
#
|
|
|
|
# root@host# dpkg-query --showformat '${Status}\n' -W rabbitmq-server 2>/dev/null
|
|
|
|
# root@host# apt install rabbitmq-server
|
|
|
|
# root@host# dpkg-query --showformat '${Status}\n' -W rabbitmq-server 2>/dev/null
|
|
|
|
# install ok installed
|
|
|
|
# root@host# apt remove rabbitmq-server
|
|
|
|
# root@host# dpkg-query --showformat '${Status}\n' -W rabbitmq-server 2>/dev/null
|
|
|
|
# deinstall ok config-files
|
|
|
|
# root@host# apt purge rabbitmq-server
|
|
|
|
# root@host# dpkg-query --showformat '${Status}\n' -W rabbitmq-server 2>/dev/null
|
|
|
|
# unknown ok not-installed
|
|
|
|
#
|
|
|
|
# (There are more possibilities in the case of dpkg errors.) Here
|
|
|
|
# we are checking for either empty or not-installed.
|
|
|
|
if [ -n "$TRAVIS" ] || ! dpkg-query --showformat '${Status}\n' -W rabbitmq-server 2>/dev/null | grep -vq ' not-installed$'; then
|
2018-02-09 02:05:13 +01:00
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
[rabbitmq]
|
|
|
|
nodename = zulip@localhost
|
|
|
|
EOF
|
travis: Remove rabbitmq nodename dependency on hostname.
Because rabbitmq doesn't support changing the nodename of a running
rabbitmq node, Zulip installations suffered a plague of issues where
e.g. a Zulip server would reboot, the hostname would change, and
suddenly the local rabbitmq instance being used by Zulip would stop
working.
We address this problem by using, by default, a fixed rabbitmq
nodename, but providing server administrators the option to set the
rabbitmq nodename used by Zulip however they choose.
To upgrade an existing server to use this new configuration, one will
need to add something like the following to /etc/zulip/zulip.conf:
[rabbitmq]
nodename = zulip@localhost
However, I don't believe we have the puppet code in place to make this
work correctly at initial installation without rabbitmq-server being
already installed (but off), as we can easily setup in Travis CI but I
haven't been willing to do for the installer. So for now, this just
fixes our Travis CI problems.
Fixes: #1579.
2016-08-10 03:40:07 +02:00
|
|
|
fi
|
2017-11-15 00:48:22 +01:00
|
|
|
|
|
|
|
if [ -n "$USE_CERTBOT" ]; then
|
2018-02-09 02:05:13 +01:00
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
[certbot]
|
|
|
|
auto_renew = yes
|
|
|
|
EOF
|
2017-11-15 00:48:22 +01:00
|
|
|
fi
|
travis: Remove rabbitmq nodename dependency on hostname.
Because rabbitmq doesn't support changing the nodename of a running
rabbitmq node, Zulip installations suffered a plague of issues where
e.g. a Zulip server would reboot, the hostname would change, and
suddenly the local rabbitmq instance being used by Zulip would stop
working.
We address this problem by using, by default, a fixed rabbitmq
nodename, but providing server administrators the option to set the
rabbitmq nodename used by Zulip however they choose.
To upgrade an existing server to use this new configuration, one will
need to add something like the following to /etc/zulip/zulip.conf:
[rabbitmq]
nodename = zulip@localhost
However, I don't believe we have the puppet code in place to make this
work correctly at initial installation without rabbitmq-server being
already installed (but off), as we can easily setup in Travis CI but I
haven't been willing to do for the installer. So for now, this just
fixes our Travis CI problems.
Fixes: #1579.
2016-08-10 03:40:07 +02:00
|
|
|
) > /etc/zulip/zulip.conf
|
2018-02-09 02:14:28 +01:00
|
|
|
|
2020-01-04 03:14:36 +01:00
|
|
|
case ",$PUPPET_CLASSES," in
|
|
|
|
*,zulip::voyager,* | *,zulip::dockervoyager,* | *,zulip::app_frontend,*)
|
2020-01-03 01:30:40 +01:00
|
|
|
if [ -z "$NO_OVERWRITE_SETTINGS" ] || ! [ -e "/etc/zulip/settings.py" ]; then
|
|
|
|
cp -a "$ZULIP_PATH"/zproject/prod_settings_template.py /etc/zulip/settings.py
|
|
|
|
if [ -n "$EXTERNAL_HOST" ]; then
|
|
|
|
sed -i "s/^EXTERNAL_HOST =.*/EXTERNAL_HOST = '$EXTERNAL_HOST'/" /etc/zulip/settings.py
|
|
|
|
fi
|
|
|
|
if [ -n "$ZULIP_ADMINISTRATOR" ]; then
|
|
|
|
sed -i "s/^ZULIP_ADMINISTRATOR =.*/ZULIP_ADMINISTRATOR = '$ZULIP_ADMINISTRATOR'/" /etc/zulip/settings.py
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
ln -nsf /etc/zulip/settings.py "$ZULIP_PATH"/zproject/prod_settings.py
|
2020-01-04 03:14:36 +01:00
|
|
|
"$ZULIP_PATH"/scripts/setup/generate_secrets.py --production
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2016-09-15 19:29:56 +02:00
|
|
|
"$ZULIP_PATH"/scripts/zulip-puppet-apply -f
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2020-01-09 13:30:40 +01:00
|
|
|
case " $os_id $os_id_like " in
|
|
|
|
*' debian '*)
|
|
|
|
SUPERVISOR_CONF_DIR="/etc/supervisor/conf.d"
|
|
|
|
;;
|
|
|
|
*' rhel '*)
|
|
|
|
SUPERVISOR_CONF_DIR="/etc/supervisord.d/conf.d"
|
|
|
|
;;
|
|
|
|
esac
|
2016-07-12 05:35:14 +02:00
|
|
|
# Detect which features were selected for the below
|
2016-07-20 04:05:02 +02:00
|
|
|
set +e
|
2016-07-12 05:35:14 +02:00
|
|
|
[ -e "/etc/init.d/nginx" ]; has_nginx=$?
|
2020-01-09 13:30:40 +01:00
|
|
|
[ -e "$SUPERVISOR_CONF_DIR/zulip.conf" ]; has_appserver=$?
|
2016-07-12 05:35:14 +02:00
|
|
|
[ -e "/etc/cron.d/rabbitmq-numconsumers" ]; has_rabbit=$?
|
|
|
|
[ -e "/etc/init.d/postgresql" ]; has_postgres=$?
|
2016-07-20 04:05:02 +02:00
|
|
|
set -e
|
2016-07-12 05:35:14 +02:00
|
|
|
|
2016-07-20 11:55:45 +02:00
|
|
|
# Docker service setup is done in the docker config, not here
|
|
|
|
if [ "$DEPLOYMENT_TYPE" = "dockervoyager" ]; then
|
|
|
|
has_nginx=1
|
2018-05-15 17:16:39 +02:00
|
|
|
has_appserver=0
|
2016-07-20 11:55:45 +02:00
|
|
|
has_rabbit=1
|
|
|
|
has_postgres=1
|
|
|
|
fi
|
|
|
|
|
2019-12-12 10:50:04 +01:00
|
|
|
if [ -n "$POSTGRES_MISSING_DICTIONARIES" ]; then
|
2019-12-13 08:16:55 +01:00
|
|
|
crudini --set /etc/zulip/zulip.conf postgresql missing_dictionaries true
|
2019-12-12 10:50:04 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -n "$REMOTE_POSTGRES" ]; then
|
|
|
|
has_postgres=1
|
|
|
|
fi
|
|
|
|
|
2013-11-14 06:32:49 +01:00
|
|
|
# These server restarting bits should be moveable into puppet-land, ideally
|
2019-12-21 01:54:51 +01:00
|
|
|
case " $os_id $os_id_like " in
|
|
|
|
*' debian '*)
|
2019-12-15 18:22:59 +01:00
|
|
|
apt-get -y upgrade
|
|
|
|
;;
|
2019-12-21 01:54:51 +01:00
|
|
|
*' rhel '*)
|
2019-12-15 18:22:59 +01:00
|
|
|
# No action is required because `yum update` already does upgrade.
|
|
|
|
;;
|
|
|
|
esac
|
2016-07-12 05:35:14 +02:00
|
|
|
|
|
|
|
if [ "$has_nginx" = 0 ]; then
|
2015-10-21 08:23:24 +02:00
|
|
|
# Check nginx was configured properly now that we've installed it.
|
|
|
|
# Most common failure mode is certs not having been installed.
|
2017-10-24 22:30:27 +02:00
|
|
|
nginx -t || (
|
|
|
|
set +x
|
2018-02-09 02:05:13 +01:00
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
Verifying the Zulip nginx configuration failed!
|
|
|
|
|
|
|
|
This is almost always a problem with your SSL certificates. See:
|
|
|
|
https://zulip.readthedocs.io/en/latest/production/ssl-certificates.html
|
|
|
|
|
|
|
|
Once fixed, just rerun scripts/setup/install; it'll pick up from here!
|
|
|
|
|
|
|
|
EOF
|
2017-10-24 22:30:27 +02:00
|
|
|
exit 1
|
|
|
|
)
|
2013-11-14 06:32:49 +01:00
|
|
|
service nginx restart
|
|
|
|
fi
|
|
|
|
|
2016-07-12 05:35:14 +02:00
|
|
|
if [ "$has_rabbit" = 0 ]; then
|
|
|
|
if ! rabbitmqctl status >/dev/null; then
|
|
|
|
set +x
|
2018-02-09 02:05:13 +01:00
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
RabbitMQ seems to not have started properly after the installation process.
|
|
|
|
Often this is caused by misconfigured /etc/hosts in virtualized environments.
|
|
|
|
For more information, see:
|
|
|
|
https://github.com/zulip/zulip/issues/53#issuecomment-143805121
|
|
|
|
|
|
|
|
EOF
|
2016-07-12 05:35:14 +02:00
|
|
|
exit 1
|
|
|
|
fi
|
2016-09-15 19:29:56 +02:00
|
|
|
"$ZULIP_PATH"/scripts/setup/configure-rabbitmq
|
2015-09-30 03:41:31 +02:00
|
|
|
fi
|
|
|
|
|
2016-07-12 05:35:14 +02:00
|
|
|
if [ "$has_postgres" = 0 ]; then
|
2016-09-15 19:29:56 +02:00
|
|
|
"$ZULIP_PATH"/scripts/setup/postgres-init-db
|
2016-07-12 05:35:14 +02:00
|
|
|
fi
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2016-07-12 05:35:14 +02:00
|
|
|
if [ "$has_appserver" = 0 ]; then
|
2016-09-15 19:29:56 +02:00
|
|
|
deploy_path=$("$ZULIP_PATH"/scripts/lib/zulip_tools.py make_deploy_path)
|
|
|
|
mv "$ZULIP_PATH" "$deploy_path"
|
|
|
|
ln -nsf /home/zulip/deployments/next "$ZULIP_PATH"
|
2016-07-12 05:35:14 +02:00
|
|
|
ln -nsf "$deploy_path" /home/zulip/deployments/next
|
|
|
|
ln -nsf "$deploy_path" /home/zulip/deployments/current
|
2016-07-20 05:42:43 +02:00
|
|
|
ln -nsf /etc/zulip/settings.py "$deploy_path"/zproject/prod_settings.py
|
2016-07-12 05:35:14 +02:00
|
|
|
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
|
2017-09-23 00:40:35 +02:00
|
|
|
|
2017-09-23 04:52:33 +02:00
|
|
|
if ! [ -e "/home/zulip/prod-static/generated" ]; then
|
2017-09-23 00:40:35 +02:00
|
|
|
# If we're installing from a git checkout, we need to run
|
|
|
|
# `tools/update-prod-static` in order to build the static
|
|
|
|
# assets.
|
2018-11-30 21:08:25 +01:00
|
|
|
su zulip -c '/home/zulip/deployments/current/tools/update-prod-static --authors-not-required'
|
2017-09-23 00:40:35 +02:00
|
|
|
fi
|
2016-07-12 05:35:14 +02:00
|
|
|
fi
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2016-04-27 00:20:06 +02:00
|
|
|
if [ -e "/var/run/supervisor.sock" ]; then
|
|
|
|
chown zulip:zulip /var/run/supervisor.sock
|
|
|
|
fi
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2019-12-12 10:50:04 +01:00
|
|
|
if [ -n "$NO_INIT_DB" ] || [ -n "$REMOTE_POSTGRES" ]; then
|
2018-01-24 22:29:24 +01:00
|
|
|
set +x
|
|
|
|
cat <<EOF
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2018-03-03 01:13:49 +01:00
|
|
|
Success!
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2019-12-12 10:50:04 +01:00
|
|
|
Stopping because --no-init-db or --remote-postgres was passed.
|
|
|
|
To complete the installation, configure postgres and then run:
|
2013-11-14 06:32:49 +01:00
|
|
|
|
2018-11-30 21:08:25 +01:00
|
|
|
su zulip -c '/home/zulip/deployments/current/scripts/setup/initialize-database'
|
2019-12-12 10:50:04 +01:00
|
|
|
su zulip -c '/home/zulip/deployments/current/manage.py generate_realm_creation_link'
|
2013-11-14 06:32:49 +01:00
|
|
|
EOF
|
2018-01-24 22:29:24 +01:00
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2018-03-03 01:17:52 +01:00
|
|
|
su zulip -c '/home/zulip/deployments/current/scripts/setup/initialize-database --quiet'
|
2018-01-24 22:29:24 +01:00
|
|
|
|
2018-03-03 01:17:52 +01:00
|
|
|
su zulip -c '/home/zulip/deployments/current/manage.py generate_realm_creation_link'
|