diff options
author | Christophe Romain <christophe.romain@process-one.net> | 2017-03-21 18:59:12 +0100 |
---|---|---|
committer | Christophe Romain <christophe.romain@process-one.net> | 2017-03-21 18:59:12 +0100 |
commit | 430fc8eb6235f6d73468187453a7376e5879a8bb (patch) | |
tree | 011f5f6b30f3ec1b3c0aab2daa79af6c87120178 /docker/scripts | |
parent | prosody2ejabberd: Fix offline message record type (diff) |
Update docker files from latest Rafael's changes
Diffstat (limited to 'docker/scripts')
-rw-r--r-- | docker/scripts/lib/base_config.sh | 53 | ||||
-rw-r--r-- | docker/scripts/lib/base_functions.sh | 66 | ||||
-rw-r--r-- | docker/scripts/lib/config.sh | 1 | ||||
-rw-r--r-- | docker/scripts/lib/functions.sh | 1 | ||||
-rwxr-xr-x | docker/scripts/post/10_ejabberd_modules_update_specs.sh | 24 | ||||
-rwxr-xr-x | docker/scripts/post/11_ejabberd_install_modules.sh | 143 | ||||
-rwxr-xr-x | docker/scripts/post/20_ejabberd_register_users.sh | 118 | ||||
-rwxr-xr-x | docker/scripts/post/99_first_start_done.sh | 14 | ||||
-rwxr-xr-x | docker/scripts/pre/00_change_user.sh | 23 | ||||
-rwxr-xr-x | docker/scripts/pre/01_write_certifiates_from_env.sh | 33 | ||||
-rwxr-xr-x | docker/scripts/pre/02_make_snakeoil_certificates.sh | 91 | ||||
-rwxr-xr-x | docker/scripts/pre/03_make_dhparam.sh | 28 | ||||
-rwxr-xr-x | docker/scripts/pre/10_erlang_cookie.sh | 25 | ||||
-rwxr-xr-x | docker/scripts/pre/20_ejabberd_config.sh | 38 | ||||
-rwxr-xr-x | docker/scripts/stop/10_leave_cluster.sh | 21 |
15 files changed, 679 insertions, 0 deletions
diff --git a/docker/scripts/lib/base_config.sh b/docker/scripts/lib/base_config.sh new file mode 100644 index 000000000..a856fe785 --- /dev/null +++ b/docker/scripts/lib/base_config.sh @@ -0,0 +1,53 @@ +readonly HOSTIP=$(hostname -i) +readonly HOSTNAME=$(hostname -f) +readonly DOMAINNAME=$(hostname -d) + +readonly ERLANGCOOKIEFILE="${EJABBERD_HOME}/.erlang.cookie" +readonly EJABBERDCTL="/sbin/ejabberdctl" +readonly CONFIGFILE="${EJABBERD_HOME}/conf/ejabberd.yml" +readonly CONFIGTEMPLATE="${EJABBERD_HOME}/conf/ejabberd.yml.tpl" +readonly CTLCONFIGFILE="${EJABBERD_HOME}/conf/ejabberdctl.cfg" +readonly CTLCONFIGTEMPLATE="${EJABBERD_HOME}/conf/ejabberdctl.cfg.tpl" +readonly SSLCERTDIR="${EJABBERD_HOME}/ssl" +readonly SSLCERTHOST="${SSLCERTDIR}/host.pem" +readonly SSLDHPARAM="${SSLCERTDIR}/dh.pem" +readonly LOGDIR="/var/log/ejabberd" +readonly FIRST_START_DONE_FILE="/${EJABBERD_HOME}/first-start-done" +readonly CLUSTER_NODE_FILE="/${EJABBERD_HOME}/cluster-done" + +readonly PYTHON_JINJA2="import os; +import sys; +import jinja2; +sys.stdout.write( + jinja2.Template + (sys.stdin.read() + ).render(env=os.environ))" + +# backward compatibility environment variables +set +e + +[[ -n $EJABBERD_ADMIN ]] \ + && export EJABBERD_ADMINS=${EJABBERD_ADMIN} + +[[ -n $AUTH_METHOD ]] \ + && export EJABBERD_AUTH_METHOD=${AUTH_METHOD} + +[[ -n $SKIP_MODULES_UPDATE ]] \ + && export EJABBERD_SKIP_MODULES_UPDATE=${SKIP_MODULES_UPDATE} + +[[ -n $ERL_OPTIONS ]] \ + && export ERLANG_OPTIONS=${ERL_OPTIONS} + +[[ -n $SSLCERT_HOST ]] \ + && export EJABBERD_SSLCERT_HOST=${SSLCERT_HOST} + +[[ -n $SSLCERT_EXAMPLE_COM ]] \ + && export EJABBERD_SSLCERT_EXAMPLE_COM=${SSLCERT_EXAMPLE_COM} + +[[ -n $LOGLEVEL ]] \ + && export EJABBERD_LOGLEVEL=${LOGLEVEL} + +[[ -n $EJABBERD_WEB_ADMIN_SSL ]] \ + && export EJABBERD_HTTPS=${EJABBERD_WEB_ADMIN_SSL} + +set -e diff --git a/docker/scripts/lib/base_functions.sh b/docker/scripts/lib/base_functions.sh new file mode 100644 index 000000000..daadd1f68 --- /dev/null +++ b/docker/scripts/lib/base_functions.sh @@ -0,0 +1,66 @@ +is_set() { + local var=$1 + + [[ -n $var ]] +} + + +is_zero() { + local var=$1 + + [[ -z $var ]] +} + + +file_exist() { + local file=$1 + + [[ -e $file ]] +} + + +is_true() { + local var=${1,,} + local choices=("yes" "1" "y" "true") + for ((i=0;i < ${#choices[@]};i++)) { + [[ "${choices[i]}" == $var ]] && return 0 + } + return 1 +} + + +# overwrite this function to get hostname from other sources +# like dns or etcd +get_nodename() { + echo ${HOSTNAME} +} + + +join_cluster() { + local cluster_node=$1 + + is_zero ${cluster_node} \ + && exit 0 + + echo "Join cluster..." + + local erlang_node_name=${ERLANG_NODE%@*} + local erlang_cluster_node="${erlang_node_name}@${cluster_node}" + + response=$(${EJABBERDCTL} ping ${erlang_cluster_node}) + while [ "$response" != "pong" ]; do + echo "Waiting for ${erlang_cluster_node}..." + sleep 2 + response=$(${EJABBERDCTL} ping ${erlang_cluster_node}) + done + + echo "Join cluster at ${erlang_cluster_node}... " + NO_WARNINGS=true ${EJABBERDCTL} join_cluster $erlang_cluster_node + + if [ $? -eq 0 ]; then + touch ${CLUSTER_NODE_FILE} + else + echo "cloud not join cluster" + exit 1 + fi +} diff --git a/docker/scripts/lib/config.sh b/docker/scripts/lib/config.sh new file mode 100644 index 000000000..6b9cbbb12 --- /dev/null +++ b/docker/scripts/lib/config.sh @@ -0,0 +1 @@ +# Overridable file diff --git a/docker/scripts/lib/functions.sh b/docker/scripts/lib/functions.sh new file mode 100644 index 000000000..6b9cbbb12 --- /dev/null +++ b/docker/scripts/lib/functions.sh @@ -0,0 +1 @@ +# Overridable file diff --git a/docker/scripts/post/10_ejabberd_modules_update_specs.sh b/docker/scripts/post/10_ejabberd_modules_update_specs.sh new file mode 100755 index 000000000..01f20001e --- /dev/null +++ b/docker/scripts/post/10_ejabberd_modules_update_specs.sh @@ -0,0 +1,24 @@ +#!/bin/bash +set -e + +# Updates the known modules as to be found in https://github.com/processone/ejabberd-contrib + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + + +run_modules_update_specs() { + echo -n 'Updating module specs... ' + ${EJABBERDCTL} modules_update_specs +} + + +is_true ${EJABBERD_SKIP_MODULES_UPDATE} \ + && exit 0 + +run_modules_update_specs + + +exit 0 diff --git a/docker/scripts/post/11_ejabberd_install_modules.sh b/docker/scripts/post/11_ejabberd_install_modules.sh new file mode 100755 index 000000000..8089fe9f2 --- /dev/null +++ b/docker/scripts/post/11_ejabberd_install_modules.sh @@ -0,0 +1,143 @@ +#!/bin/bash +set -e + +# Installs modules as defined in environment variables + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + +install_module_from_source() { + local module_name=$1 + local module_source_path=${EJABBERD_HOME}/module_source/${module_name} + local module_install_folder=${EJABBERD_HOME}/.ejabberd-modules/sources + + echo "Analyzing module ${module_name} for installation" + # Make sure that the module exists in the source folder before attempting a copy + + if [ ! -d ${module_source_path} ]; then + echo "Error: Module ${module_name} not found in ${EJABBERD_HOME}/module_source" + echo "Please use a shared volume to populate your module in ${EJABBERD_HOME}/module_source" + return 1; + fi + + # Check to see if the module is already installed + local install_count=$(${EJABBERDCTL} modules_installed | grep -ce "^${module_name}[[:space:]]") + if [ $install_count -gt 0 ]; then + echo "Error: Module already installed: ${module_name}" + return 1; + fi + + # Copy the module into the shared folder + echo "Copying module to ejabberd folder ${module_install_folder}" + mkdir -p ${module_install_folder} + cp -R ${module_source_path} ${module_install_folder} + + # Run the ejabberdctl module_check on the module + echo "Running module_check on ${module_name}" + ${EJABBERDCTL} module_check ${module_name} + if [ $? -ne 0 ]; then + echo "Module check failed for ${module_name}" + return 1; + fi + echo "Module check succeeded for ${module_name}" + + # Install the module + echo "Running module_install on ${module_name}" + ${EJABBERDCTL} module_install ${module_name} + if [ $? -ne 0 ]; then + echo "Module installation failed for ${module_name}" + return 1; + fi + echo "Module installation succeeded for ${module_name}" + + return 0; +} + +install_module_from_ejabberd_contrib() { + local module_name=$1 + + # Check to see if the module is already installed + local install_count=$(${EJABBERDCTL} modules_installed | grep -ce "^${module_name}[[:space:]]") + if [ $install_count -gt 0 ]; then + echo "Error: Module already installed: ejabberd_contrib ${module_name}" + return 1; + fi + + # Install the module + echo "Running module_install on ejabberd_contrib ${module_name}" + ${EJABBERDCTL} module_install ${module_name} + if [ $? -ne 0 ]; then + echo "Module installation failed for ejabberd_contrib ${module_name}" + return 1; + fi + echo "Module installation succeeded for ejabberd_contrib ${module_name}" + + return 0; +} + +enable_custom_auth_module_override() { + module_name=$1; + # When using custom authentication modules, the module name must be + # in the following pattern: ejabberd_auth_foo, where foo is the + # value you will use for your auth_method yml configuration. + required_prefix="ejabberd_auth_" + + if [[ "${module_name}" != "${required_prefix}"* ]]; then + echo "Error: module_name must begin with ${required_prefix}" + exit 1; + fi + + echo "Checking custom auth module: ${module_name}" + # Make sure the auth module is installed + local install_count=$(${EJABBERDCTL} modules_installed | grep -ce "^${module_name}[[:space:]]") + if [ $install_count -eq 0 ]; then + echo "Error: custom auth_module not installed: ${module_name}" + return 1; + fi + + custom_auth_method=${module_name#$required_prefix} + echo -e "\nauth_method: [${custom_auth_method}]" >> ${CONFIGFILE} + echo "Custom auth module ${module_name} configuration complete." +} + +file_exist ${FIRST_START_DONE_FILE} \ + && exit 0 + +is_restart_needed=0; + +if [ -n "${EJABBERD_SOURCE_MODULES}" ]; then + for module_name in ${EJABBERD_SOURCE_MODULES} ; do + install_module_from_source ${module_name} + done + is_restart_needed=1; +fi + +# Check the EJABBERD_CONTRIB_MODULES variable for any ejabberd_contrib modules +if [ -n "${EJABBERD_CONTRIB_MODULES}" ]; then + for module_name in ${EJABBERD_CONTRIB_MODULES} ; do + install_module_from_ejabberd_contrib ${module_name} + done + is_restart_needed=1; +fi + +# If a custom module was defined for handling auth, we need to override +# the pre-defined auth methods in the config. +if [ -n "${EJABBERD_CUSTOM_AUTH_MODULE_OVERRIDE}" ]; then + enable_custom_auth_module_override "${EJABBERD_CUSTOM_AUTH_MODULE_OVERRIDE}" + is_restart_needed=1; +fi + +# If any modules were installed, restart the server, if the option is enabled +if [ ${is_restart_needed} -eq 1 ]; then + if is_true ${EJABBERD_RESTART_AFTER_MODULE_INSTALL} ; then + echo "Restarting ejabberd after successful module installation(s)" + ${EJABBERDCTL} restart + child=$! + ${EJABBERDCTL} "started" + wait $child + fi +fi + +exit 0 diff --git a/docker/scripts/post/20_ejabberd_register_users.sh b/docker/scripts/post/20_ejabberd_register_users.sh new file mode 100755 index 000000000..0a9569559 --- /dev/null +++ b/docker/scripts/post/20_ejabberd_register_users.sh @@ -0,0 +1,118 @@ +#!/bin/bash + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + +# Do not exit if users already registered +set +e + +randpw() { + < /dev/urandom tr -dc A-Z-a-z-0-9 | head -c ${1:-16}; + echo; +} + + +register_user() { + local user=$1 + local domain=$2 + local password=$3 + + ${EJABBERDCTL} register ${user} ${domain} ${password} + return $? +} + + +register_all_users() { + # register users from environment $EJABBERD_USERS with given + # password or random password written to stout. Use whitespace + # to seperate users. + # + # sample: + # - add a user with an given password: + # -e "EJABBERD_USERS=admin@example.com:adminSecret" + # - add a user with a random password: + # -e "EJABBERD_USERS=user@example.com" + # - set password for admin and use random for user1: + # -e "EJABBERD_USERS=admin@example.com:adminSecret user@example.com" + + for user in ${EJABBERD_USERS} ; do + local jid=${user%%:*} + local password=${user#*:} + + local username=${jid%%@*} + local domain=${jid#*@} + + [[ "${password}" == "${jid}" ]] \ + && password=$(randpw) + + register_user ${username} ${domain} ${password} + local retval=$? + + [[ ${retval} -eq 0 ]] \ + && echo "Password for user ${username}@${domain} is ${password}" + done +} + + +file_exist ${FIRST_START_DONE_FILE} \ + && exit 0 + + +file_exist ${CLUSTER_NODE_FILE} \ + && exit 0 + + +is_set ${EJABBERD_USERS} \ + && register_all_users + + +################################## +## Keep for backward compatibility + +register_all_ejabberd_admins() { + # add all admins from environment $EJABBERD_ADMINS with the passwords from + # environment $EJABBERD_ADMIN_PASS. + + local passwords + local IFS=' ' + read -a passwords <<< "${EJABBERD_ADMIN_PWD}" + + for admin in ${EJABBERD_ADMINS} ; do + local user=${admin%%@*} + local domain=${admin#*@} + local password=${passwords[0]} + passwords=("${passwords[@]:1}") + register_user ${user} ${domain} ${password} + done +} + + +register_all_ejabberd_admins_randpw() { + # add all admins from environment $EJABBERD_ADMINS with a random + # password and write the password to stdout. + + for admin in ${EJABBERD_ADMINS} ; do + local user=${admin%%@*} + local domain=${admin#*@} + local password=$(randpw) + + register_user ${user} ${domain} ${password} + local retval=$? + + [[ ${retval} -eq 0 ]] \ + && echo "Password for user ${user}@${domain} is ${password}" + done +} + + +is_set ${EJABBERD_ADMIN_PWD} \ + && register_all_ejabberd_admins + + +is_true ${EJABBERD_ADMIN_RANDPWD} \ + && register_all_ejabberd_admins_randpw + + +exit 0 diff --git a/docker/scripts/post/99_first_start_done.sh b/docker/scripts/post/99_first_start_done.sh new file mode 100755 index 000000000..b64d94b07 --- /dev/null +++ b/docker/scripts/post/99_first_start_done.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -e + +# Write a first-start-done file + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + + +if [ ! -e "${FIRST_START_DONE_FILE}" ]; then + touch ${FIRST_START_DONE_FILE} +fi diff --git a/docker/scripts/pre/00_change_user.sh b/docker/scripts/pre/00_change_user.sh new file mode 100755 index 000000000..3edeafb34 --- /dev/null +++ b/docker/scripts/pre/00_change_user.sh @@ -0,0 +1,23 @@ +#!/bin/bash +set -e + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + + +readonly whoami=$(whoami) + + +change_ejabberd_run_user() { + echo "Change ejabberd install user to root..." + sed -i "s/INSTALLUSER=${EJABBERD_USER}/INSTALLUSER=${whoami}/" ${EJABBERDCTL} +} + + +[[ "${whoami}" == "root" ]] \ + && change_ejabberd_run_user + + +exit 0 diff --git a/docker/scripts/pre/01_write_certifiates_from_env.sh b/docker/scripts/pre/01_write_certifiates_from_env.sh new file mode 100755 index 000000000..509b27e20 --- /dev/null +++ b/docker/scripts/pre/01_write_certifiates_from_env.sh @@ -0,0 +1,33 @@ +#!/bin/bash +set -e + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + +# Instead of having to mount a direction, specify the ssl certs +# via environment variables: +# `EJABBERD_SSLCERT_HOST` and `EJABBERD_SSLCERT_{domain_name}`. +# For example: `EJABBERD_SSLCERT_EXAMPLE_COM`. + +write_file_from_env() { + echo "Writing $1 to $2" + mkdir -p "$(dirname $2)" + echo "${!1}" > $2 +} + +# Write the host certificate +is_set ${EJABBERD_SSLCERT_HOST} \ + && write_file_from_env "EJABBERD_SSLCERT_HOST" ${SSLCERTHOST} + +# Write the domain certificates for each XMPP_DOMAIN +for xmpp_domain in ${XMPP_DOMAIN} ; do + var="EJABBERD_SSLCERT_$(echo $xmpp_domain | awk '{print toupper($0)}' | sed 's/\./_/g;s/-/_/g')" + if is_set ${!var} ; then + file_exist "${SSLCERTDIR}/${xmpp_domain}.pem" \ + || write_file_from_env "$var" "${SSLCERTDIR}/${xmpp_domain}.pem" + fi +done + +exit 0 diff --git a/docker/scripts/pre/02_make_snakeoil_certificates.sh b/docker/scripts/pre/02_make_snakeoil_certificates.sh new file mode 100755 index 000000000..0e7f21822 --- /dev/null +++ b/docker/scripts/pre/02_make_snakeoil_certificates.sh @@ -0,0 +1,91 @@ +#!/bin/bash +set -e + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + + +make_snakeoil_certificate() { + local domain=$1 + local certfile=$2 + + openssl req -subj "/CN=${domain}" \ + -new \ + -newkey rsa:4096 \ + -days 365 \ + -nodes \ + -x509 \ + -keyout /tmp/selfsigned.key \ + -out /tmp/selfsigned.crt + + echo "Writing ssl cert and private key to '${certfile}'..." + cat /tmp/selfsigned.crt /tmp/selfsigned.key > ${certfile} + rm /tmp/selfsigned.crt /tmp/selfsigned.key +} + + +make_host_snakeoil_certificate() { + local IFS=@ + local domain='localhost' + local erlang_node=${ERLANG_NODE} + + if is_true ${erlang_node} ; then + domain=${HOSTNAME} + elif is_set ${erlang_node} ; then + set ${erlang_node} + local nodehost=$2 + if is_zero ${nodehost} ; then + domain=${HOSTNAME} + else + domain=${nodehost} + fi + fi + + echo -n "Missing ssl cert for your host. " + echo "Generating snakeoil ssl cert for ${domain}..." + + make_snakeoil_certificate ${domain} ${SSLCERTHOST} +} + + +make_domain_snakeoil_certificate() { + local domain=$1 + local certfile=$2 + + echo -n "Missing ssl cert for your xmpp domain. " + echo "Generating snakeoil ssl cert for ${domain}..." + + make_snakeoil_certificate ${domain} ${certfile} +} + + +## backward compatibility +# link old xmpp_domain.pem file to the first <domainname>.pem in XMPP_DOMAIN +readonly SSLCERTDOMAIN="${SSLCERTDIR}/xmpp_domain.pem" +if file_exist ${SSLCERTDOMAIN} ; then + for xmpp_domain in ${XMPP_DOMAIN} ; do + file_exist "${SSLCERTDIR}/${xmpp_domain}.pem" \ + || ln -s ${SSLCERTDOMAIN} "${SSLCERTDIR}/${xmpp_domain}.pem" + break + done +fi + + +is_true ${EJABBERD_SKIP_MAKE_SSLCERT} \ + && echo "Skip certificate generation" \ + && exit 0 + +# generate host ssl cert if missing +file_exist ${SSLCERTHOST} \ + || make_host_snakeoil_certificate + +# generate xmmp domain ssl certificates if missing +for xmpp_domain in ${XMPP_DOMAIN} ; do + domain_certfile="${SSLCERTDIR}/${xmpp_domain}.pem" + file_exist ${domain_certfile} \ + || make_domain_snakeoil_certificate ${xmpp_domain} ${domain_certfile} +done + +exit 0 diff --git a/docker/scripts/pre/03_make_dhparam.sh b/docker/scripts/pre/03_make_dhparam.sh new file mode 100755 index 000000000..e240210fc --- /dev/null +++ b/docker/scripts/pre/03_make_dhparam.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -e + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + + +make_dhparam() { + local dhfile=$1 + local bits=$2 + + echo "Writing dh file to '${dhfile}'..." + openssl dhparam -out ${dhfile} ${bits} +} + + +is_true ${EJABBERD_SKIP_MAKE_DHPARAM} \ + && echo "Skip DH param generation" \ + && exit 0 + +if is_true ${EJABBERD_DHPARAM} ; then + file_exist ${SSLDHPARAM} \ + || make_dhparam ${SSLDHPARAM} 4096 +fi + +exit 0 diff --git a/docker/scripts/pre/10_erlang_cookie.sh b/docker/scripts/pre/10_erlang_cookie.sh new file mode 100755 index 000000000..bf276fc12 --- /dev/null +++ b/docker/scripts/pre/10_erlang_cookie.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -e + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + + +set_erlang_cookie() { + echo "Set erlang cookie to ${ERLANG_COOKIE}..." + echo ${ERLANG_COOKIE} > ${ERLANGCOOKIEFILE} + chmod 400 ${ERLANGCOOKIEFILE} +} + + +file_exist ${FIRST_START_DONE_FILE} \ + && exit 0 + + +# set erlang cookie if ERLANG_COOKIE is set in environemt +is_set ${ERLANG_COOKIE} \ + && set_erlang_cookie + +exit 0 diff --git a/docker/scripts/pre/20_ejabberd_config.sh b/docker/scripts/pre/20_ejabberd_config.sh new file mode 100755 index 000000000..498648c5a --- /dev/null +++ b/docker/scripts/pre/20_ejabberd_config.sh @@ -0,0 +1,38 @@ +#!/bin/bash +set -e + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + + +make_config() { + if [ ! -e ${CONFIGFILE} ]; then + echo "Generating ejabberd config file..." + cat ${CONFIGTEMPLATE} \ + | python -c "${PYTHON_JINJA2}" \ + > ${CONFIGFILE} + else + echo "ejabberd config file exists." + fi + + if [ ! -e ${CTLCONFIGFILE} ]; then + echo "Generating ejabberdctl config file..." + cat ${CTLCONFIGTEMPLATE} \ + | python -c "${PYTHON_JINJA2}" \ + > ${CTLCONFIGFILE} + else + echo "ejabberdctl config file exists." + fi +} + + +file_exist ${FIRST_START_DONE_FILE} \ + && exit 0 + + +# generate config file +make_config + +exit 0 diff --git a/docker/scripts/stop/10_leave_cluster.sh b/docker/scripts/stop/10_leave_cluster.sh new file mode 100755 index 000000000..b75efc52d --- /dev/null +++ b/docker/scripts/stop/10_leave_cluster.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -e + +source "${EJABBERD_HOME}/scripts/lib/base_config.sh" +source "${EJABBERD_HOME}/scripts/lib/config.sh" +source "${EJABBERD_HOME}/scripts/lib/base_functions.sh" +source "${EJABBERD_HOME}/scripts/lib/functions.sh" + + +leave_cluster() { + echo "Leave cluster... " + rm ${CLUSTER_NODE_FILE} + NO_WARNINGS=true ${EJABBERDCTL} leave_cluster +} + + +file_exist ${CLUSTER_NODE_FILE} \ + && leave_cluster + + +exit 0 |