From 44ba06264f802128110d6ee388d4e7dbcd46a918 Mon Sep 17 00:00:00 2001 From: "Paul J. Davis" Date: Tue, 11 Oct 2011 22:06:58 -0500 Subject: Add a remsh command to BigCouch The remsh pattern is quite useful for connecting to running nodes for debugging production issues. This adds a small script that lets users connect quickly to a running node. --- rel/overlay/bin/remsh | 41 +++++++++++++++++++++++++++++++++++++++++ rel/reltool.config | 1 + 2 files changed, 42 insertions(+) create mode 100755 rel/overlay/bin/remsh diff --git a/rel/overlay/bin/remsh b/rel/overlay/bin/remsh new file mode 100755 index 00000000..d6028b42 --- /dev/null +++ b/rel/overlay/bin/remsh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +if test ! $1 ; then + echo "usage: $0 nodename" + exit 1 +fi + +if test `echo $1 | sed 's/[^@]//g'`; then + NAME="-name $1" +else + NAME="-sname $1" +fi + +ERTS_BIN_DIR=$(cd ${0%/*} && pwd) +ROOTDIR=${ERTS_BIN_DIR%/*} + +START_ERL=`cat $ROOTDIR/releases/start_erl.data` +ERTS_VSN=${START_ERL% *} +APP_VSN=${START_ERL#* } +START_CLEAN="${ROOTDIR}/releases/${APP_VSN}/start_clean" + +BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin + +REM_NODE="{{node_name}}" +REM_NODE=${REM_NODE#* } + +COOKIE="-setcookie monster" + +exec $BINDIR/erl $NAME -remsh $REM_NODE $COOKIE -hidden -boot $START_CLEAN diff --git a/rel/reltool.config b/rel/reltool.config index d8403865..ccca5aed 100644 --- a/rel/reltool.config +++ b/rel/reltool.config @@ -57,6 +57,7 @@ {copy, "overlay/share"}, {copy, "../couchjs/build/couchjs", "bin/couchjs"}, {copy, "../couchjs/build/main.js", "share/couchjs/main.js"}, + {template, "overlay/bin/remsh", "bin/remsh"}, {template, "overlay/etc/default.ini", "etc/default.ini"}, {template, "overlay/etc/vm.args", "etc/vm.args"} ]}. -- cgit v1.2.3 From d367c4bec22ad20807901c4b9c53b4fe4cd0fa59 Mon Sep 17 00:00:00 2001 From: "Paul J. Davis" Date: Wed, 12 Oct 2011 18:10:04 -0500 Subject: Improve remsh script Cookies now default to using ~/.erlang.cookie which is automatically generated if it does not exist when erlang starts with a name. There is also no longer a need to specify a name to remsh as it'll generate a name based on the process id and set the short or long version appropriately. --- configure | 9 ++++++++- rel/overlay/bin/remsh | 20 +++++++++----------- rel/overlay/etc/vm.args | 13 +++++++++---- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/configure b/configure index 0e299604..72d441e2 100755 --- a/configure +++ b/configure @@ -44,8 +44,12 @@ do BIGCOUCH_USER=$2 shift 2 ;; + -c) + COOKIE=$2 + shift 2 + ;; *) - echo "usage: $0 [-p {prefix} -t {template} -d {data_dir} -v {view_dir} -u {user}]" + echo "usage: $0 [-p {prefix} -t {template} -d {data_dir} -v {view_dir} -u {user} -c {cookie}]" exit ;; esac @@ -53,6 +57,7 @@ done if test ! -n "$DATA"; then DATA="$PREFIX/var/lib"; fi if test ! -n "$VIEW"; then VIEW="$PREFIX/var/lib"; fi +if test -n "$COOKIE"; then COOKIE="-setcookie $COOKIE"; fi echo "==> configuring bigcouch in rel/bigcouch.config" cat > rel/bigcouch.config << EOF @@ -61,6 +66,7 @@ cat > rel/bigcouch.config << EOF {view_dir, "$VIEW"}. {user, "$BIGCOUCH_USER"}. {node_name, "-name bigcouch"}. +{cookie, "$COOKIE"}. {cluster_port, 5984}. {cluster_ssl, 6984}. {backend_port, 5986}. @@ -81,6 +87,7 @@ cat > rel/dev$i.config << EOF {data_dir, "$DIRPATH/rel/tmpdata/dev$i"}. {view_dir, "$DIRPATH/rel/tmpdata/dev$i"}. {node_name, "-name dev$i@127.0.0.1"}. +{cookie, "$COOKIE"}. {cluster_port, `expr 10000 \* $i + 5984`}. {cluster_ssl, `expr 10000 \* $i + 6984`}. {backend_port, `expr 10000 \* $i + 5986`}. diff --git a/rel/overlay/bin/remsh b/rel/overlay/bin/remsh index d6028b42..39955ae8 100755 --- a/rel/overlay/bin/remsh +++ b/rel/overlay/bin/remsh @@ -12,15 +12,16 @@ # License for the specific language governing permissions and limitations under # the License. -if test ! $1 ; then - echo "usage: $0 nodename" - exit 1 -fi +NAME="remsh$$" +REM_NODE="{{node_name}}" +NAME_TYPE=${REM_NODE% *} +REM_NODE=${REM_NODE#* } +HOST=`echo "$REM_NODE" | grep -o "@.*" | sed 's/@//'` -if test `echo $1 | sed 's/[^@]//g'`; then - NAME="-name $1" +if test -n $HOST; then + NAME="$NAME_TYPE $NAME@$HOST" else - NAME="-sname $1" + NAME="$NAME_TYPE $NAME" fi ERTS_BIN_DIR=$(cd ${0%/*} && pwd) @@ -33,9 +34,6 @@ START_CLEAN="${ROOTDIR}/releases/${APP_VSN}/start_clean" BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin -REM_NODE="{{node_name}}" -REM_NODE=${REM_NODE#* } - -COOKIE="-setcookie monster" +COOKIE="{{cookie}}" exec $BINDIR/erl $NAME -remsh $REM_NODE $COOKIE -hidden -boot $START_CLEAN diff --git a/rel/overlay/etc/vm.args b/rel/overlay/etc/vm.args index bb143502..03e5af27 100644 --- a/rel/overlay/etc/vm.args +++ b/rel/overlay/etc/vm.args @@ -4,10 +4,15 @@ # with the -name flag. {{node_name}} -# All nodes must share the same magic cookie for distributed Erlang to work. -# Comment out this line if you synchronized the cookies by other means (using -# the ~/.erlang.cookie file, for example). --setcookie monster +# If you passed a value for the cookie to ./configure it will be set here. +# Otherwise it will default to using ~/.erlang.cookie which will be generated +# automatically if it doesn't exist. +# +# Note that you need to make sure that the cookie value used is synchronized +# across all nodes in the cluster. This means that if you don't set the +# cookie by hand you need to manually sync ~/.erlang.cookie across all nodes +# in the cluster. +{{cookie}} # Tell SASL not to log progress reports -sasl errlog_type error -- cgit v1.2.3