From 1e02cd1363299d21eafe4d97f7bb2e17bda67b8f Mon Sep 17 00:00:00 2001 From: Ery Lee Date: Wed, 26 Dec 2012 14:44:19 +0800 Subject: [PATCH] rm bin and fix README --- README | 40 ++++++++--- bin/emqtt | 179 -------------------------------------------------- bin/emqtt_ctl | 159 -------------------------------------------- bin/nodetool | 138 -------------------------------------- 4 files changed, 32 insertions(+), 484 deletions(-) delete mode 100755 bin/emqtt delete mode 100755 bin/emqtt_ctl delete mode 100755 bin/nodetool diff --git a/README b/README index d7025601b..8d98beb49 100644 --- a/README +++ b/README @@ -1,31 +1,55 @@ emqtt ===== -erlang mqtt broker based on rabbitmq network layer. +erlang mqtt broker. -compile +requires +======== + +erlang R15B+ + +git client + +build ======= -require erlang R15B+ and git client - make +release +======= + +#generate a release in rel/emqtt folder + +make generate + +deloy +===== + +cp -R rel/emqtt $INSTALL_DIR + start ====== +cd $INSTALL_DRI/emqtt + +#debug mode + ./bin/emqtt console +#startup + ./bin/emqtt start +status +====== + +./bin/emqtt_ctl status + stop ==== ./bin/emqtt stop -status -====== -./bin/emqtt_ctl status - logs ==== diff --git a/bin/emqtt b/bin/emqtt deleted file mode 100755 index d71aa4f10..000000000 --- a/bin/emqtt +++ /dev/null @@ -1,179 +0,0 @@ -#!/bin/bash -# -*- tab-width:4;indent-tabs-mode:nil -*- -# ex: ts=4 sw=4 et - -RUNNER_SCRIPT_DIR=$(cd ${0%/*} && pwd) - -RUNNER_BASE_DIR=${RUNNER_SCRIPT_DIR%/*} -RUNNER_ETC_DIR=$RUNNER_BASE_DIR/etc -RUNNER_LOG_DIR=$RUNNER_BASE_DIR/log -# Note the trailing slash on $PIPE_DIR/ -PIPE_DIR=/tmp/$RUNNER_BASE_DIR/ -RUNNER_USER= - -# Make sure this script is running as the appropriate user -if [ ! -z "$RUNNER_USER" ] && [ `whoami` != "$RUNNER_USER" ]; then - exec sudo -u $RUNNER_USER -i $0 $@ -fi - -# Make sure CWD is set to runner base dir -cd $RUNNER_BASE_DIR - -# Make sure log directory exists -mkdir -p $RUNNER_LOG_DIR -# Identify the script name -SCRIPT=`basename $0` - -# Parse out release and erts info -ERLANG_BASE_DIR=/usr/local/lib/erlang -START_ERL=`cat $ERLANG_BASE_DIR/releases/start_erl.data` -ERTS_VSN=${START_ERL% *} -APP_VSN=${START_ERL#* } - -VMARGS_PATH="$RUNNER_ETC_DIR/emqtt.args" - -CONFIG_PATH="$RUNNER_ETC_DIR/emqtt.config" - -# Extract the target node name from node.args -NAME_ARG=`egrep '^-s?name' $VMARGS_PATH` -if [ -z "$NAME_ARG" ]; then - echo "emqtt.args needs to have either -name or -sname parameter." - exit 1 -fi - -# Extract the target cookie -COOKIE_ARG=`grep '^-setcookie' $VMARGS_PATH` -if [ -z "$COOKIE_ARG" ]; then - echo "emqtt.args needs to have a -setcookie parameter." - exit 1 -fi - -# Add ERTS bin dir to our path -ERTS_PATH=$ERLANG_BASE_DIR/erts-$ERTS_VSN/bin - -# Setup command to control the node -NODETOOL="escript $RUNNER_BASE_DIR/bin/nodetool $NAME_ARG $COOKIE_ARG" - -# Check the first argument for instructions -case "$1" in - start) - # Make sure there is not already a node running - RES=`$NODETOOL ping` - if [ "$RES" = "pong" ]; then - echo "Node is already running!" - exit 1 - fi - HEART_COMMAND="$RUNNER_BASE_DIR/bin/$SCRIPT start" - export HEART_COMMAND - mkdir -p $PIPE_DIR - shift # remove $1 - $ERTS_PATH/run_erl -daemon $PIPE_DIR $RUNNER_LOG_DIR "exec $RUNNER_BASE_DIR/bin/$SCRIPT console $@" 2>&1 - ;; - - stop) - # Wait for the node to completely stop... - case `uname -s` in - Linux|Darwin|FreeBSD|DragonFly|NetBSD|OpenBSD) - # PID COMMAND - PID=`ps ax -o pid= -o command=|\ - grep "$RUNNER_BASE_DIR/.*/[b]eam"|awk '{print $1}'` - ;; - SunOS) - # PID COMMAND - PID=`ps -ef -o pid= -o args=|\ - grep "$RUNNER_BASE_DIR/.*/[b]eam"|awk '{print $1}'` - ;; - CYGWIN*) - # UID PID PPID TTY STIME COMMAND - PID=`ps -efW|grep "$RUNNER_BASE_DIR/.*/[b]eam"|awk '{print $2}'` - ;; - esac - $NODETOOL stop - ES=$? - if [ "$ES" -ne 0 ]; then - exit $ES - fi - while `kill -0 $PID 2>/dev/null`; - do - sleep 1 - done - ;; - - restart) - ## Restart the VM without exiting the process - $NODETOOL restart - ES=$? - if [ "$ES" -ne 0 ]; then - exit $ES - fi - ;; - - reboot) - ## Restart the VM completely (uses heart to restart it) - $NODETOOL reboot - ES=$? - if [ "$ES" -ne 0 ]; then - exit $ES - fi - ;; - - ping) - ## See if the VM is alive - $NODETOOL ping - ES=$? - if [ "$ES" -ne 0 ]; then - exit $ES - fi - ;; - - attach) - # Make sure a node IS running - RES=`$NODETOOL ping` - ES=$? - if [ "$ES" -ne 0 ]; then - echo "Node is not running!" - exit $ES - fi - - shift - exec $ERTS_PATH/to_erl $PIPE_DIR - ;; - - console) - # .boot file typically just $SCRIPT (ie, the app name) - # however, for debugging, sometimes start_clean.boot is useful: - #case "$1" in - # console) BOOTFILE=$SCRIPT ;; - # console_clean) BOOTFILE=start_clean ;; - #esac - # Setup beam-required vars - ERL_LIBS=$RUNNER_BASE_DIR/lib - ROOTDIR=$RUNNER_BASE_DIR - BINDIR=$ERTS_PATH - EMU=beam - PROGNAME=`echo $0 | sed 's/.*\\///'` - CMD="$ERTS_PATH/erl -pa $RUNNER_BASE_DIR/ebin -config $CONFIG_PATH -args_file $VMARGS_PATH -- ${1+"$@"}" - export ERL_LIBS - export EMU - export ROOTDIR - export BINDIR - export PROGNAME - - # Dump environment info for logging purposes - echo "Exec: $CMD" - echo "Root: $ROOTDIR" - - # Log the startup - logger -t "$SCRIPT[$$]" "Starting up" - - # Start the VM - exec $CMD - ;; - - *) - echo "Usage: $SCRIPT {start|stop|restart|reboot|ping|console||attach}" - exit 1 - ;; -esac - -exit 0 diff --git a/bin/emqtt_ctl b/bin/emqtt_ctl deleted file mode 100755 index b056316c1..000000000 --- a/bin/emqtt_ctl +++ /dev/null @@ -1,159 +0,0 @@ -#!/bin/bash - -RUNNER_SCRIPT_DIR=$(cd ${0%/*} && pwd) - -RUNNER_BASE_DIR=${RUNNER_SCRIPT_DIR%/*} -RUNNER_ETC_DIR=$RUNNER_BASE_DIR/etc -RUNNER_BIN_DIR=$RUNNER_BASE_DIR/bin -RUNNER_LOG_DIR=$RUNNER_BASE_DIR/log - -RUNNER_EBIN_DIR=$RUNNER_BASE_DIR/ebin -RUNNER_USER= - -# Make sure CWD is set to runner base dir -cd $RUNNER_BASE_DIR - -# Extract the target node name from node.args -NAME_ARG=`grep '\-[s]*name' $RUNNER_ETC_DIR/emqtt.args` -if [ -z "$NAME_ARG" ]; then - echo "emqtt.args needs to have either -name or -sname parameter." - exit 1 -fi - -# Learn how to specify node name for connection from remote nodes -echo "$NAME_ARG" | grep '^-sname' > /dev/null 2>&1 -if [ "X$?" = "X0" ]; then - NAME_PARAM="-sname" - NAME_HOST="" -else - NAME_PARAM="-name" - echo "$NAME_ARG" | grep '@.*' > /dev/null 2>&1 - if [ "X$?" = "X0" ]; then - NAME_HOST=`echo "${NAME_ARG}" | sed -e 's/.*\(@.*\)$/\1/'` - else - NAME_HOST="" - fi -fi - -# Extract the target cookie -COOKIE_ARG=`grep '\-setcookie' $RUNNER_ETC_DIR/emqtt.args` -if [ -z "$COOKIE_ARG" ]; then - echo "emqtt.args needs to have a -setcookie parameter." - exit 1 -fi - -# Identify the script name -SCRIPT=`basename $0` - -# Parse out release and erts info -ERLANG_BASE_DIR=/usr/local/lib/erlang -START_ERL=`cat $ERLANG_BASE_DIR/releases/start_erl.data` -ERTS_VSN=${START_ERL% *} -APP_VSN=${START_ERL#* } - -# Add ERTS bin dir to our path -ERTS_PATH=$ERLANG_BASE_DIR/erts-$ERTS_VSN/bin - -# Setup command to control the node -NODETOOL="$ERTS_PATH/escript $RUNNER_BIN_DIR/nodetool $NAME_ARG $COOKIE_ARG" - -# Check the first argument for instructions -case "$1" in - status) - if [ $# -ne 1 ]; then - echo "Usage: $SCRIPT status" - exit 1 - fi - - # Make sure the local node IS running - RES=`$NODETOOL ping` - if [ "$RES" != "pong" ]; then - echo "Node is not running!" - exit 1 - fi - shift - - $NODETOOL rpc emqtt_ctl status $@ - ;; - - cluster_info) - if [ $# -ne 1 ]; then - echo "Usage: $SCRIPT cluster_info" - exit 1 - fi - - # Make sure the local node IS running - RES=`$NODETOOL ping` - if [ "$RES" != "pong" ]; then - echo "Node is not running!" - exit 1 - fi - shift - - $NODETOOL rpc emqtt_ctl cluster_info $@ - ;; - - - cluster) - if [ $# -ne 2 ]; then - echo "Usage: $SCRIPT cluster " - exit 1 - fi - - # Make sure the local node IS running - RES=`$NODETOOL ping` - if [ "$RES" != "pong" ]; then - echo "emqtt is not running!" - exit 1 - fi - shift - - $NODETOOL rpc emqtt_ctl cluster $@ - ;; - - add_user) - if [ $# -ne 3 ]; then - echo "Usage: $SCRIPT add_user " - exit 1 - fi - - # Make sure the local node IS running - RES=`$NODETOOL ping` - if [ "$RES" != "pong" ]; then - echo "emqtt is not running!" - exit 1 - fi - shift - - $NODETOOL rpc emqtt_ctl add_user $@ - ;; - - delete_user) - if [ $# -ne 2 ]; then - echo "Usage: $SCRIPT delete_user " - exit 1 - fi - - # Make sure the local node IS running - RES=`$NODETOOL ping` - if [ "$RES" != "pong" ]; then - echo "emqtt is not running!" - exit 1 - fi - shift - - $NODETOOL rpc emqtt_ctl delete_user $@ - ;; - - *) - echo "Usage: $SCRIPT" - echo " status #query emqtt status" - echo " cluster_info #query cluster nodes" - echo " cluster #cluster node" - echo " add_user #add user" - echo " delete_user #delete user" - exit 1 - ;; - -esac - diff --git a/bin/nodetool b/bin/nodetool deleted file mode 100755 index 1030c9355..000000000 --- a/bin/nodetool +++ /dev/null @@ -1,138 +0,0 @@ -%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*- -%% ex: ft=erlang ts=4 sw=4 et -%% ------------------------------------------------------------------- -%% -%% nodetool: Helper Script for interacting with live nodes -%% -%% ------------------------------------------------------------------- - -main(Args) -> - ok = start_epmd(), - %% Extract the args - {RestArgs, TargetNode} = process_args(Args, [], undefined), - - %% See if the node is currently running -- if it's not, we'll bail - case {net_kernel:hidden_connect_node(TargetNode), net_adm:ping(TargetNode)} of - {true, pong} -> - ok; - {_, pang} -> - io:format("Node ~p not responding to pings.\n", [TargetNode]), - halt(1) - end, - - case RestArgs of - ["ping"] -> - %% If we got this far, the node already responsed to a ping, so just dump - %% a "pong" - io:format("pong\n"); - ["stop"] -> - io:format("~p\n", [rpc:call(TargetNode, init, stop, [], 60000)]); - ["restart"] -> - io:format("~p\n", [rpc:call(TargetNode, init, restart, [], 60000)]); - ["reboot"] -> - io:format("~p\n", [rpc:call(TargetNode, init, reboot, [], 60000)]); - ["rpc", Module, Function | RpcArgs] -> - case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function), - RpcArgs, 60000) of - ok -> - ok; - {badrpc, Reason} -> - io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]), - halt(1); - _ -> - halt(1) - end; - ["rpcterms", Module, Function, ArgsAsString] -> - case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function), - consult(ArgsAsString), 60000) of - {badrpc, Reason} -> - io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]), - halt(1); - Other -> - io:format("~p\n", [Other]) - end; - Other -> - io:format("Other: ~p\n", [Other]), - io:format("Usage: nodetool {ping|stop|restart|reboot}\n") - end, - net_kernel:stop(). - -process_args([], Acc, TargetNode) -> - {lists:reverse(Acc), TargetNode}; -process_args(["-setcookie", Cookie | Rest], Acc, TargetNode) -> - erlang:set_cookie(node(), list_to_atom(Cookie)), - process_args(Rest, Acc, TargetNode); -process_args(["-name", TargetName | Rest], Acc, _) -> - ThisNode = append_node_suffix(TargetName, "_ctrl_"), - {ok, _} = net_kernel:start([ThisNode, longnames]), - process_args(Rest, Acc, nodename(TargetName)); -process_args(["-sname", TargetName | Rest], Acc, _) -> - ThisNode = append_node_suffix(TargetName, "_ctrl_"), - {ok, _} = net_kernel:start([ThisNode, shortnames]), - process_args(Rest, Acc, nodename(TargetName)); -process_args([Arg | Rest], Acc, Opts) -> - process_args(Rest, [Arg | Acc], Opts). - - -start_epmd() -> - [] = os:cmd(epmd_path() ++ " -daemon"), - ok. - -epmd_path() -> - ErtsBinDir = filename:dirname(escript:script_name()), - Name = "epmd", - case os:find_executable(Name, ErtsBinDir) of - false -> - case os:find_executable(Name) of - false -> - io:format("Could not find epmd.~n"), - halt(1); - GlobalEpmd -> - GlobalEpmd - end; - Epmd -> - Epmd - end. - - -nodename(Name) -> - case string:tokens(Name, "@") of - [_Node, _Host] -> - list_to_atom(Name); - [Node] -> - [_, Host] = string:tokens(atom_to_list(node()), "@"), - list_to_atom(lists:concat([Node, "@", Host])) - end. - -append_node_suffix(Name, Suffix) -> - case string:tokens(Name, "@") of - [Node, Host] -> - list_to_atom(lists:concat([Node, Suffix, os:getpid(), "@", Host])); - [Node] -> - list_to_atom(lists:concat([Node, Suffix, os:getpid()])) - end. - - -%% -%% Given a string or binary, parse it into a list of terms, ala file:consult/0 -%% -consult(Str) when is_list(Str) -> - consult([], Str, []); -consult(Bin) when is_binary(Bin)-> - consult([], binary_to_list(Bin), []). - -consult(Cont, Str, Acc) -> - case erl_scan:tokens(Cont, Str, 0) of - {done, Result, Remaining} -> - case Result of - {ok, Tokens, _} -> - {ok, Term} = erl_parse:parse_term(Tokens), - consult([], Remaining, [Term | Acc]); - {eof, _Other} -> - lists:reverse(Acc); - {error, Info, _} -> - {error, Info} - end; - {more, Cont1} -> - consult(Cont1, eof, Acc) - end.