Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberdctl.template')
-rw-r--r--src/ejabberdctl.template388
1 files changed, 0 insertions, 388 deletions
diff --git a/src/ejabberdctl.template b/src/ejabberdctl.template
deleted file mode 100644
index b6dfd4fc4..000000000
--- a/src/ejabberdctl.template
+++ /dev/null
@@ -1,388 +0,0 @@
-#!/bin/sh
-
-# define default configuration
-POLL=true
-SMP=auto
-ERL_MAX_PORTS=32000
-ERL_PROCESSES=250000
-ERL_MAX_ETS_TABLES=1400
-
-# define default environment variables
-NODE=ejabberd
-HOST=localhost
-ERLANG_NODE=$NODE@$HOST
-ERL=@erl@
-INSTALLUSER=@installuser@
-
-# parse command line parameters
-ARGS=
-while [ $# -ne 0 ] ; do
- PARAM=$1
- shift
- case $PARAM in
- --) break ;;
- --node) ERLANG_NODE_ARG=$1; shift ;;
- --config-dir) ETCDIR=$1 ; shift ;;
- --config) EJABBERD_CONFIG_PATH=$1 ; shift ;;
- --ctl-config) EJABBERDCTL_CONFIG_PATH=$1 ; shift ;;
- --logs) LOGS_DIR=$1 ; shift ;;
- --spool) SPOOLDIR=$1 ; shift ;;
- *) ARGS="$ARGS $PARAM" ;;
- esac
-done
-
-# Define ejabberd variable if they have not been defined from the command line
-if [ "$ETCDIR" = "" ] ; then
- ETCDIR=@SYSCONFDIR@/ejabberd
-fi
-if [ "$EJABBERD_CONFIG_PATH" = "" ] ; then
- EJABBERD_CONFIG_PATH=$ETCDIR/ejabberd.cfg
-fi
-if [ "$EJABBERDCTL_CONFIG_PATH" = "" ] ; then
- EJABBERDCTL_CONFIG_PATH=$ETCDIR/ejabberdctl.cfg
-fi
-[ -f "$EJABBERDCTL_CONFIG_PATH" ] && . "$EJABBERDCTL_CONFIG_PATH"
-if [ "$LOGS_DIR" = "" ] ; then
- LOGS_DIR=@LOCALSTATEDIR@/log/ejabberd
-fi
-if [ "$SPOOLDIR" = "" ] ; then
- SPOOLDIR=@LOCALSTATEDIR@/lib/ejabberd
-fi
-if [ "$EJABBERD_DOC_PATH" = "" ] ; then
- EJABBERD_DOC_PATH=@DOCDIR@
-fi
-if [ "$ERLANG_NODE_ARG" != "" ] ; then
- ERLANG_NODE=$ERLANG_NODE_ARG
- NODE=${ERLANG_NODE%@*}
-fi
-
-# check the proper system user is used
-ID=`id -g`
-GIDS=`id -G`
-EJID=`id -g $INSTALLUSER`
-EXEC_CMD="false"
-for GID in $GIDS; do
- if [ $GID -eq 0 ] ; then
- EXEC_CMD="su ${INSTALLUSER} -p -c"
- fi
-done
-if [ "$ID" -eq "$EJID" ] ; then
- EXEC_CMD="sh -c"
-fi
-if [ "$EXEC_CMD" = "false" ] ; then
- echo "This command can only be run by root or the user $INSTALLUSER" >&2
- exit 4
-fi
-
-NAME=-name
-[ "$ERLANG_NODE" = "${ERLANG_NODE%.*}" ] && NAME=-sname
-
-KERNEL_OPTS=""
-if [ "$FIREWALL_WINDOW" != "" ] ; then
- KERNEL_OPTS="${KERNEL_OPTS} -kernel inet_dist_listen_min ${FIREWALL_WINDOW%-*} inet_dist_listen_max ${FIREWALL_WINDOW#*-}"
-fi
-if [ "$INET_DIST_INTERFACE" != "" ] ; then
- KERNEL_OPTS="${KERNEL_OPTS} -kernel inet_dist_use_interface \"${INET_DIST_INTERFACE}\""
-fi
-
-ERLANG_OPTS="+K $POLL -smp $SMP +P $ERL_PROCESSES $ERL_OPTIONS"
-
-# define additional environment variables
-if [ "$EJABBERDDIR" = "" ]; then
- EJABBERDDIR=@LIBDIR@/ejabberd
-fi
-if [ "$EJABBERD_EBIN_PATH" = "" ]; then
- EJABBERD_EBIN_PATH=$EJABBERDDIR/ebin
-fi
-if [ "$EJABBERD_PRIV_PATH" = "" ]; then
- EJABBERD_PRIV_PATH=$EJABBERDDIR/priv
-fi
-if [ "$EJABBERD_BIN_PATH" = "" ]; then
- EJABBERD_BIN_PATH=$EJABBERD_PRIV_PATH/bin
-fi
-if [ "$EJABBERD_SO_PATH" = "" ]; then
- EJABBERD_SO_PATH=$EJABBERD_PRIV_PATH/lib
-fi
-if [ "$EJABBERD_MSGS_PATH" = "" ]; then
- EJABBERD_MSGS_PATH=$EJABBERD_PRIV_PATH/msgs
-fi
-
-EJABBERD_LOG_PATH=$LOGS_DIR/ejabberd.log
-SASL_LOG_PATH=$LOGS_DIR/erlang.log
-DATETIME=`date "+%Y%m%d-%H%M%S"`
-ERL_CRASH_DUMP=$LOGS_DIR/erl_crash_$DATETIME.dump
-ERL_INETRC=$ETCDIR/inetrc
-HOME=$SPOOLDIR
-
-# create the home dir with the proper user if doesn't exist, because it stores cookie file
-[ -d $HOME ] || $EXEC_CMD "mkdir -p $HOME"
-
-# Change to a directory readable by INSTALLUSER to
-# prevent "File operation error: eacces." messages
-cd $HOME
-
-# export global variables
-export EJABBERD_CONFIG_PATH
-export EJABBERD_MSGS_PATH
-export EJABBERD_LOG_PATH
-export EJABBERD_SO_PATH
-export EJABBERD_BIN_PATH
-export EJABBERD_DOC_PATH
-export EJABBERD_PID_PATH
-export ERL_CRASH_DUMP
-export ERL_EPMD_ADDRESS
-export ERL_INETRC
-export ERL_MAX_PORTS
-export ERL_MAX_ETS_TABLES
-export HOME
-export EXEC_CMD
-
-
-# Compatibility in ZSH
-#setopt shwordsplit 2>/dev/null
-
-# start server
-start ()
-{
- checknodenameusage
- [ "$?" -eq 0 ] && echo "\nERROR: The node '$ERLANG_NODE' is already running." && return 1
-
- $EXEC_CMD "$ERL \
- $NAME $ERLANG_NODE \
- -noinput -detached \
- -pa $EJABBERD_EBIN_PATH \
- -mnesia dir \"\\\"$SPOOLDIR\\\"\" \
- $KERNEL_OPTS \
- -s ejabberd \
- -sasl sasl_error_logger \\{file,\\\"$SASL_LOG_PATH\\\"\\} \
- $ERLANG_OPTS $ARGS \"$@\""
-}
-
-# attach to server
-debug ()
-{
- echo "--------------------------------------------------------------------"
- echo ""
- echo "IMPORTANT: we will attempt to attach an INTERACTIVE shell"
- echo "to an already running ejabberd node."
- echo "If an ERROR is printed, it means the connection was not successful."
- echo "You can interact with the ejabberd node if you know how to use it."
- echo "Please be extremely cautious with your actions,"
- echo "and exit immediately if you are not completely sure."
- echo ""
- echo "To detach this shell from ejabberd, press:"
- echo " control+c, control+c"
- echo ""
- echo "--------------------------------------------------------------------"
- echo "To bypass permanently this warning, add to ejabberdctl.cfg the line:"
- echo " EJABBERD_BYPASS_WARNINGS=true"
- echo "Press any key to continue"
- if [ "$EJABBERD_BYPASS_WARNINGS" != "true" ] ; then
- read foo
- fi
- echo ""
- TTY=`tty | sed -e 's/.*\///g'`
- $EXEC_CMD "$ERL \
- $NAME debug-${TTY}-${ERLANG_NODE} \
- -remsh $ERLANG_NODE \
- -hidden \
- $KERNEL_OPTS \
- $ERLANG_OPTS $ARGS \"$@\""
-}
-
-# start interactive server
-live ()
-{
- checknodenameusage
- [ "$?" -eq 0 ] && echo "\nERROR: The node '$ERLANG_NODE' is already running." && return 1
-
- echo "--------------------------------------------------------------------"
- echo ""
- echo "IMPORTANT: ejabberd is going to start in LIVE (interactive) mode."
- echo "All log messages will be shown in the command shell."
- echo "You can interact with the ejabberd node if you know how to use it."
- echo "Please be extremely cautious with your actions,"
- echo "and exit immediately if you are not completely sure."
- echo ""
- echo "To exit this LIVE mode and stop ejabberd, press:"
- echo " q(). and press the Enter key"
- echo ""
- echo "--------------------------------------------------------------------"
- echo "To bypass permanently this warning, add to ejabberdctl.cfg the line:"
- echo " EJABBERD_BYPASS_WARNINGS=true"
- echo "Press any key to continue"
- if [ "$EJABBERD_BYPASS_WARNINGS" != "true" ] ; then
- read foo
- fi
- echo ""
- $EXEC_CMD "$ERL \
- $NAME $ERLANG_NODE \
- -pa $EJABBERD_EBIN_PATH \
- -mnesia dir \"\\\"$SPOOLDIR\\\"\" \
- $KERNEL_OPTS \
- -s ejabberd \
- $ERLANG_OPTS $ARGS \"$@\""
-}
-
-help ()
-{
- echo ""
- echo "Commands to start an ejabberd node:"
- echo " start Start an ejabberd node in server mode"
- echo " debug Attach an interactive Erlang shell to a running ejabberd node"
- echo " live Start an ejabberd node in live (interactive) mode"
- echo ""
- echo "Optional parameters when starting an ejabberd node:"
- echo " --config-dir dir Config ejabberd: $ETCDIR"
- echo " --config file Config ejabberd: $EJABBERD_CONFIG_PATH"
- echo " --ctl-config file Config ejabberdctl: $EJABBERDCTL_CONFIG_PATH"
- echo " --logs dir Directory for logs: $LOGS_DIR"
- echo " --spool dir Database spool dir: $SPOOLDIR"
- echo " --node nodename ejabberd node name: $ERLANG_NODE"
- echo ""
-}
-
-# common control function
-ctl ()
-{
- COMMAND=$@
-
- # Control number of connections identifiers
- # using flock if available. Expects a linux-style
- # flock that can lock a file descriptor.
- MAXCONNID=100
- CONNLOCKDIR=@LOCALSTATEDIR@/lock/ejabberdctl
- FLOCK='/usr/bin/flock'
- if [ ! -x "$FLOCK" ] || [ ! -d "$CONNLOCKDIR" ] ; then
- JOT='/usr/bin/jot'
- if [ ! -x "$JOT" ] ; then
- # no flock or jot, simply invoke ctlexec()
- CTL_CONN="ctl-${ERLANG_NODE}"
- ctlexec $CTL_CONN $COMMAND
- result=$?
- else
- # no flock, but at least there is jot
- RAND=`jot -r 1 0 $MAXCONNID`
- CTL_CONN="ctl-${RAND}-${ERLANG_NODE}"
- ctlexec $CTL_CONN $COMMAND
- result=$?
- fi
- else
- # we have flock so we get a lock
- # on one of a limited number of
- # conn names -- this allows
- # concurrent invocations using a bound
- # number of atoms
- for N in $(seq 1 $MAXCONNID); do
- CTL_CONN="ejabberdctl-$N"
- CTL_LOCKFILE="$CONNLOCKDIR/$CTL_CONN"
- (
- exec 8>"$CTL_LOCKFILE"
- if flock --nb 8; then
- ctlexec $CTL_CONN $COMMAND
- ssresult=$?
- # segregate from possible flock exit(1)
- ssresult=$(expr $ssresult \* 10)
- exit $ssresult
- else
- exit 1
- fi
- )
- result=$?
- if [ $result -eq 1 ]; then
- # means we errored out in flock
- # rather than in the exec - stay in the loop
- # trying other conn names...
- badlock=1
- else
- badlock=""
- break;
- fi
- done
- result=$(expr $result / 10)
- fi
-
- if [ "$badlock" ];then
- echo "Ran out of connections to try. Your ejabberd processes" >&2
- echo "may be stuck or this is a very busy server. For very" >&2
- echo "busy servers, consider raising MAXCONNID in ejabberdctl">&2
- exit 1;
- fi
-
- case $result in
- 0) :;;
- 1) :;;
- 2) help;;
- 3) help;;
- esac
- return $result
-}
-
-ctlexec ()
-{
- CONN_NAME=$1; shift
- COMMAND=$@
- $EXEC_CMD "$ERL \
- $NAME ${CONN_NAME} \
- -noinput \
- -hidden \
- -pa $EJABBERD_EBIN_PATH \
- $KERNEL_OPTS \
- -s ejabberd_ctl -extra $ERLANG_NODE $COMMAND"
-}
-
-# display ctl usage
-usage ()
-{
- ctl
- exit
-}
-
-# stop epmd if there is no other running node
-stop_epmd()
-{
- epmd -names | grep -q name || epmd -kill
-}
-
-# allow sync calls
-wait_for_status()
-{
- # args: status try delay
- # return: 0 OK, 1 KO
- timeout=$2
- status=4
- while [ $status -ne $1 ]; do
- sleep $3
- timeout=$(($timeout - 1))
- [ $timeout -eq 0 ] && {
- status=$1
- } || {
- ctl status > /dev/null
- status=$?
- }
- done
- [ $timeout -eq 0 ] && {
- status=1
- } || {
- status=0
- }
- return $status
-}
-
-# check node name is used or not
-# $? --> 0=alreadyused 1=available
-checknodenameusage ()
-{
- $EXEC_CMD "$ERL \
- $NAME $ERLANG_NODE \
- -s erlang halt | grep -c duplicate_name > /dev/null "
-}
-
-case $ARGS in
- ' start') start;;
- ' debug') debug;;
- ' live') live;;
- ' started') wait_for_status 0 30 2;; # wait 30x2s before timeout
- ' stopped') wait_for_status 3 15 2; stop_epmd;; # wait 15x2s before timeout
- *) ctl $ARGS;;
-esac