I was fed up with lack of easy ways to connect multiple ejabberd together. The documentation contains what you need but because of not so friendly command lines, I was never satisfied by the procedure.
So I've added a simple command "attach" to "ejabberdctl" that speed up the procedure, basically it uses already defined vars from the script:
$EXEC_CMD "$ERL \
$NAME $ERLANG_NODE \
-mnesia dir \"\\\"$SPOOLDIR\\\"\" \
-mnesia extra_db_nodes \"[$MASTER]\" \
-s mnesia"
}
Apply this patch, and enjoy the "attach" command:
=== modified file 'src/ejabberdctl.template'
--- src/ejabberdctl.template 2012-08-02 14:39:16 +0000
+++ src/ejabberdctl.template 2012-08-31 09:06:56 +0000
@@ -364,13 +364,63 @@
status=0
}
return $status
+}
+
+attach ()
+{
+
+RUNAS=${INSTALLUSER-root}
+
+cat <<END
+- Attaching Procedure - (running as '$RUNAS')
+
+You're about to initialise this local mnesia with another running instance.
+Data will be written to '$SPOOLDIR'
+
+First, determine which node do you want to use as master, and answer the question.
+
+Now, once you're in the erlang shell, type:
+mnesia:info().
+
+Look at the line that starts with: "running db nodes", and observe that your node
+is listed.
+
+Then type the following:
+mnesia:change_table_copy_type(schema, node(), disc_copies).
+
+You'll normally get: "{atomic,ok}"
+
+You can now close the shell using:
+q().
+
+You can start ejabberd now, and observe this new node in the webadmin...
+END
+
+echo -n "Specify which master do you want to use (ex: ejabberd@node02): "
+read MASTER
+
+ if [[ -n $MASTER ]]
+ then
+
+ $EXEC_CMD "$ERL \
+ $NAME $ERLANG_NODE \
+ -mnesia dir \"\\\"$SPOOLDIR\\\"\" \
+ -mnesia extra_db_nodes \"[$MASTER]\" \
+ -s mnesia"
+
+ else
+ echo
+
+ fi
}
+
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
+ ' attach') attach;;
*) ctl $ARGS;;
esac