mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 03:53:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			128 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| set -e
 | |
| 
 | |
| if [[ $# == 0 ]]; then
 | |
|     MODE=dev
 | |
| elif [[ $# == 1 ]]; then
 | |
|     MODE=$1
 | |
| else
 | |
|     echo "Too many arguments"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| if [[ "$MODE" == "dev" ]]; then
 | |
|     USERNAME=zulip
 | |
|     DBNAME=zulip
 | |
|     STATUS_FILE_NAME=migration_status_dev
 | |
| elif [[ "$MODE" == "test" ]]; then
 | |
|     USERNAME=zulip_test
 | |
|     DBNAME=zulip_test
 | |
|     STATUS_FILE_NAME=migration_status_test
 | |
| else
 | |
|     echo "Usage instructions"
 | |
|     echo "Run with either no arguments (sets up devel db for local deploy--zulip with user zulip)"
 | |
|     echo "or specify 'test'"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| set -x
 | |
| 
 | |
| POSTGRES_USER="postgres"
 | |
| if [ "$(uname)" = "OpenBSD" ]; then
 | |
|     POSTGRES_USER="_postgresql"
 | |
| fi
 | |
| 
 | |
| ROOT_POSTGRES=(sudo -i -u "$POSTGRES_USER" psql)
 | |
| DEFAULT_DB=""
 | |
| if [ "$(uname)" = "Darwin" ]; then
 | |
|     ROOT_POSTGRES=(psql)
 | |
|     DEFAULT_DB="postgres"
 | |
| fi
 | |
| 
 | |
| if [ "$(uname)" = "OpenBSD" ]; then
 | |
|     DEFAULT_DB="postgres"
 | |
| fi
 | |
| 
 | |
| VAGRANTUSERNAME=$(whoami)
 | |
| 
 | |
| SEARCH_PATH=zulip,public
 | |
| PASSWORD=$("$(dirname "$0")/../../scripts/get-django-setting" LOCAL_DATABASE_PASSWORD)
 | |
| DBNAME_BASE=${DBNAME}_base
 | |
| 
 | |
| if ! pg_isready -U "$POSTGRES_USER" -q; then
 | |
|     set +x
 | |
|     echo
 | |
|     echo 'ERROR: PostgreSQL server is not running! Ensure the service is enabled.'
 | |
|     # shellcheck disable=SC2016
 | |
|     echo 'ERROR: Try `sudo service postgresql start`?'
 | |
|     echo "ERROR: You can easily test if you fixed it using: pg_isready -U \$POSTGRES_USER"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| # We need to remove the stamp file indicating that the database
 | |
| # is properly provisioned with migrations.
 | |
| uuid_var_path=$("$(readlink -f "$(dirname "$0")/../../scripts/lib/zulip_tools.py")" get_dev_uuid)
 | |
| rm -f "$uuid_var_path/$STATUS_FILE_NAME"
 | |
| 
 | |
| "${ROOT_POSTGRES[@]}" -v ON_ERROR_STOP=1 -e "$DEFAULT_DB" <<EOF
 | |
| DO \$\$BEGIN
 | |
|     CREATE USER $USERNAME;
 | |
| EXCEPTION WHEN duplicate_object THEN
 | |
|     RAISE NOTICE '$USERNAME user already exists';
 | |
| END\$\$;
 | |
| ALTER USER $USERNAME PASSWORD '$PASSWORD';
 | |
| ALTER USER $USERNAME CREATEDB;
 | |
| ALTER ROLE $USERNAME SET search_path TO $SEARCH_PATH;
 | |
| 
 | |
| DO \$\$BEGIN
 | |
|     CREATE USER "$VAGRANTUSERNAME"; 
 | |
| EXCEPTION WHEN duplicate_object THEN
 | |
|     RAISE NOTICE '$VAGRANTUSERNAME user already exists';
 | |
| END\$\$;
 | |
| GRANT $USERNAME TO "$VAGRANTUSERNAME";
 | |
| ALTER ROLE "$VAGRANTUSERNAME" SET search_path TO $SEARCH_PATH;
 | |
| EOF
 | |
| 
 | |
| umask go-rw
 | |
| PGPASS_PREFIX="*:*:*:$USERNAME:"
 | |
| PGPASS_ESCAPED_PREFIX="*:\\*:\\*:$USERNAME:"
 | |
| if ! grep -q "$PGPASS_ESCAPED_PREFIX" ~/.pgpass; then
 | |
|     echo "$PGPASS_PREFIX$PASSWORD" >>~/.pgpass
 | |
| else
 | |
|     sed -i "s/$PGPASS_ESCAPED_PREFIX.*\$/$PGPASS_PREFIX$PASSWORD/" ~/.pgpass
 | |
| fi
 | |
| chmod go-rw ~/.pgpass
 | |
| 
 | |
| PGHOST=localhost PGUSER="$USERNAME" \
 | |
|     "$(dirname "$0")/../../scripts/setup/terminate-psql-sessions" "$DBNAME" "$DBNAME_BASE"
 | |
| 
 | |
| psql -v ON_ERROR_STOP=1 -e -h localhost postgres "$USERNAME" <<EOF
 | |
| DROP DATABASE IF EXISTS $DBNAME;
 | |
| DROP DATABASE IF EXISTS $DBNAME_BASE;
 | |
| CREATE DATABASE $DBNAME_BASE
 | |
| EOF
 | |
| 
 | |
| psql -v ON_ERROR_STOP=1 -e -h localhost "$DBNAME_BASE" "$USERNAME" <<EOF
 | |
| CREATE SCHEMA zulip;
 | |
| EOF
 | |
| 
 | |
| "${ROOT_POSTGRES[@]}" -v ON_ERROR_STOP=1 -e "$DBNAME_BASE" <<EOF
 | |
| CREATE EXTENSION pgroonga;
 | |
| 
 | |
| -- Work around https://github.com/pgroonga/pgroonga/issues/335
 | |
| SELECT unnest(
 | |
|     CASE WHEN current_setting('server_version_num')::integer >= 150000
 | |
|         AND current_setting('pgroonga.enable_wal', TRUE) = 'on' IS NOT TRUE THEN
 | |
|         ARRAY['ALTER SYSTEM SET pgroonga.enable_wal = ''on''', 'SELECT pg_reload_conf()']
 | |
|     END
 | |
| ) \gexec
 | |
| EOF
 | |
| 
 | |
| psql -v ON_ERROR_STOP=1 -e -h localhost postgres "$USERNAME" <<EOF
 | |
| CREATE DATABASE $DBNAME TEMPLATE $DBNAME_BASE;
 | |
| EOF
 | |
| 
 | |
| "$(dirname "$0")/../../scripts/setup/flush-memcached"
 | |
| 
 | |
| echo "Database created"
 |