#!/usr/bin/env bash # Use this script to provision dependencies for your Zulip installation. # This script is idempotent, so it can be restarted at any time, and it # will usually run fairly quickly when your dependencies are up to date. set -e if [ "$EUID" -eq 0 ]; then echo "Error: The provision script must not be run as root" >&2 exit 1 fi if [ -e "$(dirname "${BASH_SOURCE[0]}")/../.vagrant" ] && [ ! -e /home/vagrant ]; then echo 'Error: provision should be run inside the Vagrant environment.' >&2 # shellcheck disable=SC2016 echo 'Try `vagrant up --provision`.' >&2 exit 1 fi os="$(. /etc/os-release && echo "$ID $VERSION_ID")" case "$os" in 'ubuntu 14.04' | 'ubuntu 16.04' | 'ubuntu 18.04' | 'debian 10') echo "Error: $os is no longer a supported platform for Zulip." >&2 if [ -e /home/vagrant ]; then # shellcheck disable=SC2016 echo 'To upgrade, run `vagrant destroy`, and then recreate the Vagrant guest.' >&2 echo 'See: https://zulip.readthedocs.io/en/latest/development/setup-recommended.html' >&2 fi exit 1 ;; esac python_version="$(python3 --version)" case "$python_version" in Python\ 3.[0-9].*) echo 'Error: Zulip requires an OS with Python 3.10 or later.' >&2 exit 1 ;; esac FAIL='\033[91m' WARNING='\033[93m' ENDC='\033[0m' # Make the script independent of the location from where it is executed PARENT_PATH=$( cd "$(dirname "${BASH_SOURCE[0]}")" pwd -P ) cd "$PARENT_PATH" mkdir -p ../var/log LOG_PATH="../var/log/provision.log" echo "PROVISIONING STARTING." >>$LOG_PATH # PYTHONUNBUFFERED is important to ensure that tracebacks don't get # lost far above where they should be in the output. export PYTHONUNBUFFERED=1 ./lib/provision.py "$@" 2>&1 | tee -a "$LOG_PATH" failed=${PIPESTATUS[0]} if [ "$failed" -ne 0 ]; then echo -e "$FAIL" echo "Provisioning failed (exit code $failed)!" echo echo "* Look at the traceback(s) above to find more about the errors." echo "* Resolve the errors or get help on chat." echo "* If you can fix this yourself, you can re-run tools/provision at any time." echo "* Logs are here: zulip/var/log/provision.log" echo -e "$ENDC" exit "$failed" elif [ "$VIRTUAL_ENV" != "/srv/zulip-py3-venv" ] && [ -z "${SKIP_VENV_SHELL_WARNING}" ]; then echo -e "$WARNING" echo "WARNING: This shell does not have the Zulip Python 3 virtualenv activated." echo "Zulip commands will fail until you activate the virtualenv." echo echo "To update the shell, run:" echo " source /srv/zulip-py3-venv/bin/activate" # shellcheck disable=SC2016 echo 'or just close this shell and start a new one (with Vagrant, `vagrant ssh`).' echo -en "$ENDC" fi exit 0