Skip to content

Commit 5db01ad

Browse files
committed
basic erlang node skeleton
1 parent 74643d8 commit 5db01ad

19 files changed

+955
-0
lines changed

apps/skel/ebin/skel.app

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{application,skel,
2+
[{description,[]},
3+
{vsn,"1"},
4+
{registered,[]},
5+
{applications,[kernel,stdlib]},
6+
{mod,{skel_app,[]}},
7+
{env,[]},
8+
{modules,[skel_app,skel_sup]}]}.

apps/skel/src/skel.app.src

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{application, skel,
2+
[
3+
{description, ""},
4+
{vsn, "1"},
5+
{registered, []},
6+
{applications, [
7+
kernel,
8+
stdlib
9+
]},
10+
{mod, { skel_app, []}},
11+
{env, []}
12+
]}.

apps/skel/src/skel_app.erl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-module(skel_app).
2+
3+
-behaviour(application).
4+
5+
%% Application callbacks
6+
-export([start/2, stop/1]).
7+
8+
%% ===================================================================
9+
%% Application callbacks
10+
%% ===================================================================
11+
12+
start(_StartType, _StartArgs) ->
13+
skel_sup:start_link().
14+
15+
stop(_State) ->
16+
ok.

apps/skel/src/skel_sup.erl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
-module(skel_sup).
3+
4+
-behaviour(supervisor).
5+
6+
%% API
7+
-export([start_link/0]).
8+
9+
%% Supervisor callbacks
10+
-export([init/1]).
11+
12+
%% Helper macro for declaring children of supervisor
13+
-define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}).
14+
15+
%% ===================================================================
16+
%% API functions
17+
%% ===================================================================
18+
19+
start_link() ->
20+
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
21+
22+
%% ===================================================================
23+
%% Supervisor callbacks
24+
%% ===================================================================
25+
26+
init([]) ->
27+
{ok, { {one_for_one, 5, 10}, []} }.
28+

apps/skelnode/ebin/skelnode.app

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{application,skelnode,
2+
[{description,[]},
3+
{vsn,"1"},
4+
{registered,[]},
5+
{applications,[kernel,stdlib]},
6+
{mod,{skelnode_app,[]}},
7+
{env,[]},
8+
{modules,[skelnode_app,skelnode_sup]}]}.

apps/skelnode/src/skelnode.app.src

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{application, skelnode,
2+
[
3+
{description, ""},
4+
{vsn, "1"},
5+
{registered, []},
6+
{applications, [
7+
kernel,
8+
stdlib
9+
]},
10+
{mod, { skelnode_app, []}},
11+
{env, []}
12+
]}.

apps/skelnode/src/skelnode_app.erl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-module(skelnode_app).
2+
3+
-behaviour(application).
4+
5+
%% Application callbacks
6+
-export([start/2, stop/1]).
7+
8+
%% ===================================================================
9+
%% Application callbacks
10+
%% ===================================================================
11+
12+
start(_StartType, _StartArgs) ->
13+
skelnode_sup:start_link().
14+
15+
stop(_State) ->
16+
ok.

apps/skelnode/src/skelnode_sup.erl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
-module(skelnode_sup).
3+
4+
-behaviour(supervisor).
5+
6+
%% API
7+
-export([start_link/0]).
8+
9+
%% Supervisor callbacks
10+
-export([init/1]).
11+
12+
%% Helper macro for declaring children of supervisor
13+
-define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}).
14+
15+
%% ===================================================================
16+
%% API functions
17+
%% ===================================================================
18+
19+
start_link() ->
20+
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
21+
22+
%% ===================================================================
23+
%% Supervisor callbacks
24+
%% ===================================================================
25+
26+
init([]) ->
27+
{ok, { {one_for_one, 5, 10}, []} }.
28+

rebar

157 KB
Binary file not shown.

rebar.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{sub_dirs, ["apps/skel", "apps/skelnode", "rel"]}.

rel/files/erl

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/bin/sh
2+
3+
# /bin/sh on Solaris is not a POSIX compatible shell, but /usr/bin/ksh is.
4+
if [ `uname -s` = 'SunOS' -a "${POSIX_SHELL}" != "true" ]; then
5+
POSIX_SHELL="true"
6+
export POSIX_SHELL
7+
exec /usr/bin/ksh $0 "$@"
8+
fi
9+
10+
# clear it so if we invoke other scripts, they run as ksh as well
11+
unset POSIX_SHELL
12+
13+
## This script replaces the default "erl" in erts-VSN/bin. This is
14+
## necessary as escript depends on erl and in turn, erl depends on
15+
## having access to a bootscript (start.boot). Note that this script
16+
## is ONLY invoked as a side-effect of running escript -- the embedded
17+
## node bypasses erl and uses erlexec directly (as it should).
18+
##
19+
## Note that this script makes the assumption that there is a
20+
## start_clean.boot file available in $ROOTDIR/release/VSN.
21+
22+
# Determine the abspath of where this script is executing from.
23+
ERTS_BIN_DIR=$(cd ${0%/*} && pwd)
24+
25+
# Now determine the root directory -- this script runs from erts-VSN/bin,
26+
# so we simply need to strip off two dirs from the end of the ERTS_BIN_DIR
27+
# path.
28+
ROOTDIR=${ERTS_BIN_DIR%/*/*}
29+
30+
# Parse out release and erts info
31+
START_ERL=`cat $ROOTDIR/releases/start_erl.data`
32+
ERTS_VSN=${START_ERL% *}
33+
APP_VSN=${START_ERL#* }
34+
35+
BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin
36+
EMU=beam
37+
PROGNAME=`echo $0 | sed 's/.*\\///'`
38+
CMD="$BINDIR/erlexec"
39+
export EMU
40+
export ROOTDIR
41+
export BINDIR
42+
export PROGNAME
43+
44+
exec $CMD -boot $ROOTDIR/releases/$APP_VSN/start_clean ${1+"$@"}

rel/files/install_upgrade.escript

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/usr/bin/env escript
2+
%%! -noshell -noinput
3+
%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
4+
%% ex: ft=erlang ts=4 sw=4 et
5+
6+
-define(TIMEOUT, 60000).
7+
-define(INFO(Fmt,Args), io:format(Fmt,Args)).
8+
9+
main([NodeName, Cookie, ReleasePackage]) ->
10+
TargetNode = start_distribution(NodeName, Cookie),
11+
{ok, Vsn} = rpc:call(TargetNode, release_handler, unpack_release,
12+
[ReleasePackage], ?TIMEOUT),
13+
?INFO("Unpacked Release ~p~n", [Vsn]),
14+
{ok, OtherVsn, Desc} = rpc:call(TargetNode, release_handler,
15+
check_install_release, [Vsn], ?TIMEOUT),
16+
{ok, OtherVsn, Desc} = rpc:call(TargetNode, release_handler,
17+
install_release, [Vsn], ?TIMEOUT),
18+
?INFO("Installed Release ~p~n", [Vsn]),
19+
ok = rpc:call(TargetNode, release_handler, make_permanent, [Vsn], ?TIMEOUT),
20+
?INFO("Made Release ~p Permanent~n", [Vsn]);
21+
main(_) ->
22+
init:stop(1).
23+
24+
start_distribution(NodeName, Cookie) ->
25+
MyNode = make_script_node(NodeName),
26+
{ok, _Pid} = net_kernel:start([MyNode, shortnames]),
27+
erlang:set_cookie(node(), list_to_atom(Cookie)),
28+
TargetNode = make_target_node(NodeName),
29+
case {net_kernel:hidden_connect_node(TargetNode),
30+
net_adm:ping(TargetNode)} of
31+
{true, pong} ->
32+
ok;
33+
{_, pang} ->
34+
io:format("Node ~p not responding to pings.\n", [TargetNode]),
35+
init:stop(1)
36+
end,
37+
TargetNode.
38+
39+
make_target_node(Node) ->
40+
[_, Host] = string:tokens(atom_to_list(node()), "@"),
41+
list_to_atom(lists:concat([Node, "@", Host])).
42+
43+
make_script_node(Node) ->
44+
list_to_atom(lists:concat([Node, "_upgrader_", os:getpid()])).

0 commit comments

Comments
 (0)