mirror of
https://github.com/correl/rebar.git
synced 2024-11-27 11:09:55 +00:00
Merge pull request #52 from shino/slim-release-support
Slim release support
This commit is contained in:
commit
755c6023d1
5 changed files with 80 additions and 17 deletions
8
priv/templates/simplenode.install_upgrade.escript
Normal file → Executable file
8
priv/templates/simplenode.install_upgrade.escript
Normal file → Executable file
|
@ -6,6 +6,14 @@
|
||||||
-define(TIMEOUT, 60000).
|
-define(TIMEOUT, 60000).
|
||||||
-define(INFO(Fmt,Args), io:format(Fmt,Args)).
|
-define(INFO(Fmt,Args), io:format(Fmt,Args)).
|
||||||
|
|
||||||
|
%% TODO: This script currently does NOT support slim releases.
|
||||||
|
%% Necessary steps to upgrade a slim release are as follows:
|
||||||
|
%% 1. unpack relup archive manually
|
||||||
|
%% 2. copy releases directory and necessary libraries
|
||||||
|
%% 3. using release_hander:set_unpacked/2 .
|
||||||
|
%% For more details, see https://github.com/rebar/rebar/pull/52
|
||||||
|
%% and https://github.com/rebar/rebar/issues/202
|
||||||
|
|
||||||
main([NodeName, Cookie, ReleasePackage]) ->
|
main([NodeName, Cookie, ReleasePackage]) ->
|
||||||
TargetNode = start_distribution(NodeName, Cookie),
|
TargetNode = start_distribution(NodeName, Cookie),
|
||||||
{ok, Vsn} = rpc:call(TargetNode, release_handler, unpack_release,
|
{ok, Vsn} = rpc:call(TargetNode, release_handler, unpack_release,
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
{overlay, [
|
{overlay, [
|
||||||
{mkdir, "log/sasl"},
|
{mkdir, "log/sasl"},
|
||||||
{copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"},
|
{copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"},
|
||||||
{copy, "files/nodetool", "\{\{erts_vsn\}\}/bin/nodetool"},
|
{copy, "files/nodetool", "releases/\{\{rel_vsn\}\}/nodetool"},
|
||||||
{copy, "{{nodeid}}/bin/start_clean.boot",
|
{copy, "{{nodeid}}/bin/start_clean.boot",
|
||||||
"\{\{erts_vsn\}\}/bin/start_clean.boot"},
|
"\{\{erts_vsn\}\}/bin/start_clean.boot"},
|
||||||
{copy, "files/{{nodeid}}", "bin/{{nodeid}}"},
|
{copy, "files/{{nodeid}}", "bin/{{nodeid}}"},
|
||||||
|
|
|
@ -130,11 +130,43 @@ cd $USE_DIR
|
||||||
# Make sure log directory exists
|
# Make sure log directory exists
|
||||||
mkdir -p $USE_DIR/log
|
mkdir -p $USE_DIR/log
|
||||||
|
|
||||||
# Add ERTS bin dir to our path
|
RUNNER_SCRIPT_DATA=
|
||||||
ERTS_PATH=$RUNNER_BASE_DIR/erts-$ERTS_VSN/bin
|
if [ -e "$RUNNER_BASE_DIR/releases/$APP_VSN/runner_script.data" ]; then
|
||||||
|
RUNNER_SCRIPT_DATA=`cat $RUNNER_BASE_DIR/releases/$APP_VSN/runner_script.data`
|
||||||
|
fi
|
||||||
|
|
||||||
# Setup command to control the node
|
if [ -z "$RUNNER_SCRIPT_DATA" ]; then
|
||||||
NODETOOL="$ERTS_PATH/escript $ERTS_PATH/nodetool $NAME_ARG $COOKIE_ARG"
|
ROOTDIR=$RUNNER_BASE_DIR
|
||||||
|
ERTS_PATH=$RUNNER_BASE_DIR/erts-$ERTS_VSN/bin
|
||||||
|
if [ -e "$RUNNER_BASE_DIR/releases/$APP_VSN/nodetool" ]; then
|
||||||
|
NODETOOL="$ERTS_PATH/escript $RUNNER_BASE_DIR/releases/$APP_VSN/nodetool $NAME_ARG $COOKIE_ARG"
|
||||||
|
else
|
||||||
|
NODETOOL="$ERTS_PATH/escript $ERTS_PATH/nodetool $NAME_ARG $COOKIE_ARG"
|
||||||
|
fi
|
||||||
|
SLIM_ARGS=
|
||||||
|
elif [ "$RUNNER_SCRIPT_DATA" = "slim" ]; then
|
||||||
|
# Setup system paths
|
||||||
|
SYSTEM_ERL_PATH=`which erl`
|
||||||
|
if [ ! -x "$SYSTEM_ERL_PATH" ]; then
|
||||||
|
echo "Failed to find erl. Is Erlang/OTP available in PATH?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
SYSTEM_HOME_BIN=${SYSTEM_ERL_PATH%/*}
|
||||||
|
ROOTDIR=$SYSTEM_HOME_BIN/../lib/erlang
|
||||||
|
ERTS_PATH=$ROOTDIR/erts-$ERTS_VSN/bin
|
||||||
|
unset SYSTEM_ERL_PATH
|
||||||
|
unset SYSTEM_HOME_BIN
|
||||||
|
|
||||||
|
LOCAL_ERTS_PATH=$RUNNER_BASE_DIR/erts-$ERTS_VSN/bin
|
||||||
|
NODETOOL="$ERTS_PATH/escript $RUNNER_BASE_DIR/releases/$APP_VSN/nodetool $NAME_ARG $COOKIE_ARG"
|
||||||
|
unset LOCAL_ERL_PATH
|
||||||
|
|
||||||
|
# Setup additional arguments for slim release
|
||||||
|
SLIM_ARGS="-boot_var RELTOOL_EXT_LIB $RUNNER_BASE_DIR/lib -sasl releases_dir \"$RUNNER_BASE_DIR/releases\""
|
||||||
|
else
|
||||||
|
echo "Unknown runner_script.data"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Setup remote shell command to control node
|
# Setup remote shell command to control node
|
||||||
REMSH="$ERTS_PATH/erl -hidden $REMSH_NAME_ARG $REMSH_REMSH_ARG $COOKIE_ARG"
|
REMSH="$ERTS_PATH/erl -hidden $REMSH_NAME_ARG $REMSH_REMSH_ARG $COOKIE_ARG"
|
||||||
|
@ -310,11 +342,10 @@ case "$1" in
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
# Setup beam-required vars
|
# Setup beam-required vars
|
||||||
ROOTDIR=$RUNNER_BASE_DIR
|
|
||||||
BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin
|
BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin
|
||||||
EMU=beam
|
EMU=beam
|
||||||
PROGNAME=`echo $0 | sed 's/.*\\///'`
|
PROGNAME=`echo $0 | sed 's/.*\\///'`
|
||||||
CMD="$BINDIR/erlexec -boot $RUNNER_BASE_DIR/releases/$APP_VSN/$BOOTFILE -mode embedded -config $CONFIG_PATH -args_file $VMARGS_PATH"
|
CMD="$BINDIR/erlexec $SLIM_ARGS -boot $RUNNER_BASE_DIR/releases/$APP_VSN/$BOOTFILE -mode embedded -config $CONFIG_PATH -args_file $VMARGS_PATH"
|
||||||
export EMU
|
export EMU
|
||||||
export ROOTDIR
|
export ROOTDIR
|
||||||
export BINDIR
|
export BINDIR
|
||||||
|
@ -339,11 +370,10 @@ case "$1" in
|
||||||
FOREGROUNDOPTIONS="-noinput +Bd"
|
FOREGROUNDOPTIONS="-noinput +Bd"
|
||||||
|
|
||||||
# Setup beam-required vars
|
# Setup beam-required vars
|
||||||
ROOTDIR=$RUNNER_BASE_DIR
|
|
||||||
BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin
|
BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin
|
||||||
EMU=beam
|
EMU=beam
|
||||||
PROGNAME=`echo $0 | sed 's/.*\///'`
|
PROGNAME=`echo $0 | sed 's/.*\///'`
|
||||||
CMD="$BINDIR/erlexec $FOREGROUNDOPTIONS -boot $RUNNER_BASE_DIR/releases/$APP_VSN/$BOOTFILE -config $CONFIG_PATH -args_file $VMARGS_PATH"
|
CMD="$BINDIR/erlexec $SLIM_ARGS $FOREGROUNDOPTIONS -boot $RUNNER_BASE_DIR/releases/$APP_VSN/$BOOTFILE -config $CONFIG_PATH -args_file $VMARGS_PATH"
|
||||||
export EMU
|
export EMU
|
||||||
export ROOTDIR
|
export ROOTDIR
|
||||||
export BINDIR
|
export BINDIR
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
get_rel_file_path/2,
|
get_rel_file_path/2,
|
||||||
load_config/2,
|
load_config/2,
|
||||||
get_sys_tuple/1,
|
get_sys_tuple/1,
|
||||||
|
get_excl_lib_tuple/1,
|
||||||
get_target_dir/2,
|
get_target_dir/2,
|
||||||
get_root_dir/2,
|
get_root_dir/2,
|
||||||
get_target_parent_dir/2]).
|
get_target_parent_dir/2]).
|
||||||
|
@ -143,6 +144,13 @@ get_sys_tuple(ReltoolConfig) ->
|
||||||
?ABORT("Failed to find {sys, [...]} tuple in reltool.config.", [])
|
?ABORT("Failed to find {sys, [...]} tuple in reltool.config.", [])
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
%%
|
||||||
|
%% Look for the {excl_lib, ...} tuple in sys tuple of the reltool.config file.
|
||||||
|
%% Without this present, return false.
|
||||||
|
%%
|
||||||
|
get_excl_lib_tuple(ReltoolConfig) ->
|
||||||
|
lists:keyfind(excl_lib, 1, element(2, get_sys_tuple(ReltoolConfig))).
|
||||||
|
|
||||||
%%
|
%%
|
||||||
%% Look for {target_dir, TargetDir} in the reltool config file; if none is
|
%% Look for {target_dir, TargetDir} in the reltool config file; if none is
|
||||||
%% found, use the name of the release as the default target directory.
|
%% found, use the name of the release as the default target directory.
|
||||||
|
|
|
@ -147,15 +147,12 @@ process_overlay(Config, ReltoolConfig) ->
|
||||||
OverlayVars1),
|
OverlayVars1),
|
||||||
|
|
||||||
%% Finally, overlay the files specified by the overlay section
|
%% Finally, overlay the files specified by the overlay section
|
||||||
case lists:keyfind(overlay, 1, ReltoolConfig) of
|
case overlay_files(ReltoolConfig) of
|
||||||
{overlay, Overlay} when is_list(Overlay) ->
|
[] ->
|
||||||
|
ok;
|
||||||
|
Overlay ->
|
||||||
execute_overlay(Overlay, OverlayVars, rebar_utils:get_cwd(),
|
execute_overlay(Overlay, OverlayVars, rebar_utils:get_cwd(),
|
||||||
TargetDir);
|
TargetDir)
|
||||||
false ->
|
|
||||||
?INFO("No {overlay, [...]} found in reltool.config.\n", []);
|
|
||||||
_ ->
|
|
||||||
?ABORT("{overlay, [...]} entry in reltool.config "
|
|
||||||
"must be a list.\n", [])
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
@ -292,6 +289,26 @@ dump_spec(Config, Spec) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
overlay_files(ReltoolConfig) ->
|
||||||
|
Original = case lists:keyfind(overlay, 1, ReltoolConfig) of
|
||||||
|
{overlay, Overlay} when is_list(Overlay) ->
|
||||||
|
Overlay;
|
||||||
|
false ->
|
||||||
|
?INFO("No {overlay, [...]} found in reltool.config.\n", []),
|
||||||
|
[];
|
||||||
|
_ ->
|
||||||
|
?ABORT("{overlay, [...]} entry in reltool.config "
|
||||||
|
"must be a list.\n", [])
|
||||||
|
end,
|
||||||
|
SlimAddition = case rebar_rel_utils:get_excl_lib_tuple(ReltoolConfig) of
|
||||||
|
{excl_lib, otp_root} ->
|
||||||
|
[{create, "releases/{{rel_vsn}}/runner_script.data",
|
||||||
|
"slim\n"}];
|
||||||
|
false ->
|
||||||
|
[]
|
||||||
|
end,
|
||||||
|
Original ++ SlimAddition.
|
||||||
|
|
||||||
%% TODO: Merge functionality here with rebar_templater
|
%% TODO: Merge functionality here with rebar_templater
|
||||||
|
|
||||||
execute_overlay([], _Vars, _BaseDir, _TargetDir) ->
|
execute_overlay([], _Vars, _BaseDir, _TargetDir) ->
|
||||||
|
|
Loading…
Reference in a new issue