2022-06-08 12:57:05 +03:00
|
|
|
#!/bin/bash
|
|
|
|
#
|
|
|
|
# Default ENTRYPOINT for the docker image used for testing synapse with workers under complement
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
echo "Complement Synapse launcher"
|
|
|
|
echo " Args: $@"
|
2023-02-02 02:42:45 +03:00
|
|
|
echo " Env: SYNAPSE_COMPLEMENT_DATABASE=$SYNAPSE_COMPLEMENT_DATABASE SYNAPSE_COMPLEMENT_USE_WORKERS=$SYNAPSE_COMPLEMENT_USE_WORKERS SYNAPSE_COMPLEMENT_USE_ASYNCIO_REACTOR=$SYNAPSE_COMPLEMENT_USE_ASYNCIO_REACTOR"
|
2022-06-08 12:57:05 +03:00
|
|
|
|
|
|
|
function log {
|
|
|
|
d=$(date +"%Y-%m-%d %H:%M:%S,%3N")
|
|
|
|
echo "$d $@"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Set the server name of the homeserver
|
|
|
|
export SYNAPSE_SERVER_NAME=${SERVER_NAME}
|
|
|
|
|
|
|
|
# No need to report stats here
|
|
|
|
export SYNAPSE_REPORT_STATS=no
|
|
|
|
|
|
|
|
|
|
|
|
case "$SYNAPSE_COMPLEMENT_DATABASE" in
|
|
|
|
postgres)
|
|
|
|
# Set postgres authentication details which will be placed in the homeserver config file
|
|
|
|
export POSTGRES_PASSWORD=somesecret
|
|
|
|
export POSTGRES_USER=postgres
|
|
|
|
export POSTGRES_HOST=localhost
|
|
|
|
|
|
|
|
# configure supervisord to start postgres
|
|
|
|
export START_POSTGRES=true
|
|
|
|
;;
|
|
|
|
|
2022-06-16 14:12:26 +03:00
|
|
|
sqlite|"")
|
2024-03-21 16:50:51 +03:00
|
|
|
# Set START_POSTGRES to false unless it has already been set
|
|
|
|
# (i.e. by another container image inheriting our own).
|
|
|
|
export START_POSTGRES=${START_POSTGRES:-false}
|
2022-06-08 12:57:05 +03:00
|
|
|
;;
|
|
|
|
|
|
|
|
*)
|
|
|
|
echo "Unknown Synapse database: SYNAPSE_COMPLEMENT_DATABASE=$SYNAPSE_COMPLEMENT_DATABASE" >&2
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
|
|
if [[ -n "$SYNAPSE_COMPLEMENT_USE_WORKERS" ]]; then
|
|
|
|
# Specify the workers to test with
|
2022-11-08 15:34:09 +03:00
|
|
|
# Allow overriding by explicitly setting SYNAPSE_WORKER_TYPES outside, while still
|
|
|
|
# utilizing WORKERS=1 for backwards compatibility.
|
|
|
|
# -n True if the length of string is non-zero.
|
|
|
|
# -z True if the length of string is zero.
|
|
|
|
if [[ -z "$SYNAPSE_WORKER_TYPES" ]]; then
|
|
|
|
export SYNAPSE_WORKER_TYPES="\
|
2023-03-14 19:29:33 +03:00
|
|
|
event_persister:2, \
|
2022-06-08 12:57:05 +03:00
|
|
|
background_worker, \
|
|
|
|
frontend_proxy, \
|
|
|
|
event_creator, \
|
|
|
|
user_dir, \
|
|
|
|
media_repository, \
|
|
|
|
federation_inbound, \
|
|
|
|
federation_reader, \
|
|
|
|
federation_sender, \
|
|
|
|
synchrotron, \
|
2022-10-12 13:46:13 +03:00
|
|
|
client_reader, \
|
2022-06-08 12:57:05 +03:00
|
|
|
appservice, \
|
2023-03-14 19:29:33 +03:00
|
|
|
pusher, \
|
|
|
|
stream_writers=account_data+presence+receipts+to_device+typing"
|
2022-06-30 14:58:12 +03:00
|
|
|
|
2022-11-08 15:34:09 +03:00
|
|
|
fi
|
|
|
|
log "Workers requested: $SYNAPSE_WORKER_TYPES"
|
2023-10-27 20:29:20 +03:00
|
|
|
# adjust connection pool limits on worker mode as otherwise running lots of worker synapses
|
|
|
|
# can make docker unhappy (in GHA)
|
|
|
|
export POSTGRES_CP_MIN=1
|
|
|
|
export POSTGRES_CP_MAX=3
|
|
|
|
echo "using reduced connection pool limits for worker mode"
|
2022-06-30 14:58:12 +03:00
|
|
|
# Improve startup times by using a launcher based on fork()
|
|
|
|
export SYNAPSE_USE_EXPERIMENTAL_FORKING_LAUNCHER=1
|
2022-06-08 12:57:05 +03:00
|
|
|
else
|
|
|
|
# Empty string here means 'main process only'
|
|
|
|
export SYNAPSE_WORKER_TYPES=""
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2023-02-02 02:42:45 +03:00
|
|
|
if [[ -n "$SYNAPSE_COMPLEMENT_USE_ASYNCIO_REACTOR" ]]; then
|
|
|
|
if [[ -n "$SYNAPSE_USE_EXPERIMENTAL_FORKING_LAUNCHER" ]]; then
|
|
|
|
export SYNAPSE_COMPLEMENT_FORKING_LAUNCHER_ASYNC_IO_REACTOR="1"
|
|
|
|
else
|
|
|
|
export SYNAPSE_ASYNC_IO_REACTOR="1"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
export SYNAPSE_ASYNC_IO_REACTOR="0"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2022-06-08 12:57:05 +03:00
|
|
|
# Add Complement's appservice registration directory, if there is one
|
|
|
|
# (It can be absent when there are no application services in this test!)
|
|
|
|
if [ -d /complement/appservice ]; then
|
|
|
|
export SYNAPSE_AS_REGISTRATION_DIR=/complement/appservice
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Generate a TLS key, then generate a certificate by having Complement's CA sign it
|
|
|
|
# Note that both the key and certificate are in PEM format (not DER).
|
2022-06-16 14:43:21 +03:00
|
|
|
|
|
|
|
# First generate a configuration file to set up a Subject Alternative Name.
|
|
|
|
cat > /conf/server.tls.conf <<EOF
|
|
|
|
.include /etc/ssl/openssl.cnf
|
|
|
|
|
|
|
|
[SAN]
|
|
|
|
subjectAltName=DNS:${SERVER_NAME}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
# Generate an RSA key
|
2022-06-08 12:57:05 +03:00
|
|
|
openssl genrsa -out /conf/server.tls.key 2048
|
|
|
|
|
2022-06-16 14:43:21 +03:00
|
|
|
# Generate a certificate signing request
|
|
|
|
openssl req -new -config /conf/server.tls.conf -key /conf/server.tls.key -out /conf/server.tls.csr \
|
|
|
|
-subj "/CN=${SERVER_NAME}" -reqexts SAN
|
2022-06-08 12:57:05 +03:00
|
|
|
|
2022-06-16 14:43:21 +03:00
|
|
|
# Make the Complement Certificate Authority sign and generate a certificate.
|
2022-06-08 12:57:05 +03:00
|
|
|
openssl x509 -req -in /conf/server.tls.csr \
|
|
|
|
-CA /complement/ca/ca.crt -CAkey /complement/ca/ca.key -set_serial 1 \
|
2022-06-16 14:43:21 +03:00
|
|
|
-out /conf/server.tls.crt -extfile /conf/server.tls.conf -extensions SAN
|
|
|
|
|
|
|
|
# Assert that we have a Subject Alternative Name in the certificate.
|
|
|
|
# (grep will exit with 1 here if there isn't a SAN in the certificate.)
|
|
|
|
openssl x509 -in /conf/server.tls.crt -noout -text | grep DNS:
|
2022-06-08 12:57:05 +03:00
|
|
|
|
|
|
|
export SYNAPSE_TLS_CERT=/conf/server.tls.crt
|
|
|
|
export SYNAPSE_TLS_KEY=/conf/server.tls.key
|
|
|
|
|
|
|
|
# Run the script that writes the necessary config files and starts supervisord, which in turn
|
|
|
|
# starts everything else
|
|
|
|
exec /configure_workers_and_start.py
|