Ery Lee 13 лет назад
Родитель
Сommit
1e02cd1363
4 измененных файлов с 32 добавлено и 484 удалено
  1. 32 8
      README
  2. 0 179
      bin/emqtt
  3. 0 159
      bin/emqtt_ctl
  4. 0 138
      bin/nodetool

+ 32 - 8
README

@@ -1,31 +1,55 @@
 emqtt
 =====
 
-erlang mqtt broker based on rabbitmq network layer.
+erlang mqtt broker.
 
-compile
-=======
+requires
+========
+
+erlang R15B+ 
+
+git client
 
-require erlang R15B+ and git client
+build
+=======
 
 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
 ====
 

+ 0 - 179
bin/emqtt

@@ -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

+ 0 - 159
bin/emqtt_ctl

@@ -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 <Node>"
-            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 <Username> <Password>"
-            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 <Username>"
-            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 <Node>	#cluster node"
-		echo "		add_user <Username> <Password>	#add user"
-		echo "		delete_user <Username> 	#delete user"
-        exit 1
-        ;;
-	
-esac
-

+ 0 - 138
bin/nodetool

@@ -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.