-
Notifications
You must be signed in to change notification settings - Fork 231
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #128 from nuex/dtl_scripts
Make scripts in rlx_prv_assembler DTL templates
- Loading branch information
Showing
11 changed files
with
644 additions
and
622 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,6 @@ | ||
%% -*- mode: Erlang; fill-column: 80; comment-column: 75; -*- | ||
{incl_app, relx, details}. | ||
{incl_app, relx}. | ||
{level, details}. | ||
{excl_mods, [bin_dtl, erl_script_dtl, extended_bin_dtl, | ||
install_upgrade_escript_dtl, nodetool_dtl, | ||
sys_config_dtl, vm_args_dtl]}. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
#!/bin/sh | ||
|
||
set -e | ||
|
||
SCRIPT_DIR=`dirname $0` | ||
RELEASE_ROOT_DIR=`cd $SCRIPT_DIR/.. && pwd` | ||
REL_NAME={{ rel_name }} | ||
REL_VSN={{ rel_vsn }} | ||
ERTS_VSN={{ erts_vsn }} | ||
REL_DIR=$RELEASE_ROOT_DIR/releases/$REL_VSN | ||
ERL_OPTS={{ erl_opts }} | ||
|
||
find_erts_dir() { | ||
local erts_dir=$RELEASE_ROOT_DIR/erts-$ERTS_VSN | ||
if [ -d "$erts_dir" ]; then | ||
ERTS_DIR=$erts_dir; | ||
ROOTDIR=$RELEASE_ROOT_DIR | ||
else | ||
local erl=`which erl` | ||
local erl_root=`$erl -noshell -eval "io:format(\\"~s\\", [code:root_dir()])." -s init stop` | ||
ERTS_DIR=$erl_root/erts-$ERTS_VSN | ||
ROOTDIR=$erl_root | ||
fi | ||
|
||
} | ||
|
||
find_sys_config() { | ||
local possible_sys=$REL_DIR/sys.config | ||
if [ -f "$possible_sys" ]; then | ||
SYS_CONFIG="-config $possible_sys" | ||
fi | ||
} | ||
|
||
find_erts_dir | ||
find_sys_config | ||
export ROOTDIR=$RELEASE_ROOT_DIR | ||
export BINDIR=$ERTS_DIR/bin | ||
export EMU=beam | ||
export PROGNAME=erl | ||
export LD_LIBRARY_PATH=$ERTS_DIR/lib:$LD_LIBRARY_PATH | ||
|
||
cd $ROOTDIR | ||
|
||
$BINDIR/erlexec $ERL_OPTS $SYS_CONFIG -boot $REL_DIR/$REL_NAME $@ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#!/bin/sh | ||
set -e | ||
|
||
SCRIPT_DIR=`dirname $0` | ||
ROOTDIR=`cd $SCRIPT_DIR/../../ && pwd` | ||
BINDIR=$ROOTDIR/erts-{{ erts_vsn }}/bin | ||
EMU=beam | ||
PROGNAME=`echo $0 | sed 's/.*\\///'` | ||
export EMU | ||
export ROOTDIR | ||
export BINDIR | ||
export PROGNAME | ||
exec "$BINDIR/erlexec" ${1+"$@"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,292 @@ | ||
#!/bin/sh | ||
|
||
set -e | ||
|
||
SCRIPT_DIR=`dirname $0` | ||
RELEASE_ROOT_DIR=`cd $SCRIPT_DIR/.. && pwd` | ||
REL_NAME={{ rel_name }} | ||
REL_VSN={{ rel_vsn }} | ||
ERTS_VSN={{ erts_vsn }} | ||
REL_DIR=$RELEASE_ROOT_DIR/releases/$REL_VSN | ||
ERL_OPTS={{ erl_opts }} | ||
PIPE_DIR=/tmp/erl_pipes/{{ rel_name }}/ | ||
|
||
find_erts_dir() { | ||
local erts_dir=$RELEASE_ROOT_DIR/erts-$ERTS_VSN | ||
if [ -d "$erts_dir" ]; then | ||
ERTS_DIR=$erts_dir; | ||
ROOTDIR=$RELEASE_ROOT_DIR | ||
else | ||
local erl=`which erl` | ||
local erl_root=`$erl -noshell -eval "io:format(\\"~s\\", [code:root_dir()])." -s init stop` | ||
ERTS_DIR=$erl_root/erts-$ERTS_VSN | ||
ROOTDIR=$erl_root | ||
fi | ||
|
||
} | ||
|
||
find_sys_config() { | ||
local possible_sys=$REL_DIR/sys.config | ||
if [ -f "$possible_sys" ]; then | ||
SYS_CONFIG="-config $possible_sys" | ||
fi | ||
} | ||
|
||
# Use $CWD/vm.args if exists, otherwise releases/APP_VSN/vm.args, or else etc/vm.args | ||
if [ -e "$RELEASE_ROOT_DIR/vm.args" ]; then | ||
VMARGS_PATH=$RELEASE_ROOT_DIR/vm.args | ||
USE_DIR=$RELEASE_ROOT_DIR | ||
else | ||
USE_DIR=$REL_DIR | ||
if [ -e "$REL_DIR/vm.args" ]; then | ||
VMARGS_PATH="$REL_DIR/vm.args" | ||
else | ||
VMARGS_PATH="$REL_DIR/vm.args" | ||
fi | ||
fi | ||
|
||
RUNNER_LOG_DIR=$RELEASE_ROOT_DIR/log | ||
# Make sure log directory exists | ||
mkdir -p $RUNNER_LOG_DIR | ||
|
||
# Use releases/VSN/sys.config if it exists otherwise use etc/app.config | ||
if [ -e "$USE_DIR/sys.config" ]; then | ||
CONFIG_PATH="$USE_DIR/sys.config" | ||
else | ||
if [ -e "$REL_DIR/sys.config" ]; then | ||
CONFIG_PATH="$REL_DIR/sys.config" | ||
else | ||
CONFIG_PATH="$REL_DIR/app.config" | ||
fi | ||
fi | ||
|
||
# Extract the target node name from node.args | ||
NAME_ARG=`egrep '^-s?name' $VMARGS_PATH` | ||
if [ -z "$NAME_ARG" ]; then | ||
echo "vm.args needs to have either -name or -sname parameter." | ||
exit 1 | ||
fi | ||
|
||
# Extract the name type and name from the NAME_ARG for REMSH | ||
REMSH_TYPE=`echo $NAME_ARG | awk '{print $1}'` | ||
REMSH_NAME=`echo $NAME_ARG | awk '{print $2}'` | ||
|
||
# Note the `date +%s`, used to allow multiple remsh to the same node transparently | ||
REMSH_NAME_ARG="$REMSH_TYPE remsh`date +%s`@`echo $REMSH_NAME | awk -F@ '{print $2}'`" | ||
REMSH_REMSH_ARG="-remsh $REMSH_NAME -boot start_clean" | ||
|
||
# Extract the target cookie | ||
COOKIE_ARG=`grep '^-setcookie' $VMARGS_PATH` | ||
if [ -z "$COOKIE_ARG" ]; then | ||
echo "vm.args needs to have a -setcookie parameter." | ||
exit 1 | ||
fi | ||
|
||
find_erts_dir | ||
find_sys_config | ||
export ROOTDIR=$RELEASE_ROOT_DIR | ||
export BINDIR=$ERTS_DIR/bin | ||
export EMU=beam | ||
export PROGNAME=erl | ||
export LD_LIBRARY_PATH=$ERTS_DIR/lib:$LD_LIBRARY_PATH | ||
|
||
cd $ROOTDIR | ||
|
||
# Setup remote shell command to control node | ||
REMSH="$BINDIR/erl $REMSH_NAME_ARG $REMSH_REMSH_ARG $COOKIE_ARG" | ||
|
||
# Setup command to control the node | ||
NODETOOL="$BINDIR/escript $ROOTDIR/bin/nodetool $NAME_ARG $COOKIE_ARG" | ||
|
||
# Check the first argument for instructions | ||
case "$1" in | ||
start|start_boot) | ||
|
||
# Make sure there is not already a node running | ||
#RES=`$NODETOOL ping` | ||
#if [ "$RES" = "pong" ]; then | ||
# echo "Node is already running!" | ||
# exit 1 | ||
#fi | ||
case "$1" in | ||
start) | ||
shift | ||
START_OPTION="console" | ||
HEART_OPTION="start" | ||
;; | ||
start_boot) | ||
shift | ||
START_OPTION="console_boot" | ||
HEART_OPTION="start_boot" | ||
;; | ||
esac | ||
RUN_PARAM=$(printf "'%s' " "$@") | ||
HEART_COMMAND="$SCRIPT_DIR/bin/$REL_NAME $HEART_OPTION $RUN_PARAM" | ||
export HEART_COMMAND | ||
mkdir -p $PIPE_DIR | ||
$BINDIR/run_erl -daemon $PIPE_DIR $RUNNER_LOG_DIR "exec $RELEASE_ROOT_DIR/bin/$REL_NAME $START_OPTION $RUN_PARAM" 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 "$SCRIPT_DIR/.*/[b]eam"|awk '{print $1}'` | ||
;; | ||
SunOS) | ||
# PID COMMAND | ||
PID=`ps -ef -o pid= -o args=| | ||
grep "$SCRIPT_DIR/.*/[b]eam"|awk '{print $1}'` | ||
;; | ||
CYGWIN*) | ||
# UID PID PPID TTY STIME COMMAND | ||
PID=`ps -efW|grep "$SCRIPT_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 $BINDIR/to_erl $PIPE_DIR | ||
;; | ||
|
||
remote_console) | ||
# 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 $REMSH | ||
;; | ||
|
||
upgrade|downgrade|install) | ||
if [ -z "$2" ]; then | ||
echo "Missing package argument" | ||
echo "Usage: $REL_NAME $1 {package base name}" | ||
echo "NOTE {package base name} MUST NOT include the .tar.gz suffix" | ||
exit 1 | ||
fi | ||
|
||
# Make sure a node IS running | ||
RES=`$NODETOOL ping` | ||
ES=$? | ||
if [ "$ES" -ne 0 ]; then | ||
echo "Node is not running!" | ||
exit $ES | ||
fi | ||
|
||
node_name=`echo $NAME_ARG | awk '{print $2}'` | ||
erlang_cookie=`echo $COOKIE_ARG | awk '{print $2}'` | ||
|
||
exec $BINDIR/escript $ROOTDIR/bin/install_upgrade.escript $REL_NAME $node_name $erlang_cookie $2 | ||
;; | ||
|
||
console|console_clean|console_boot) | ||
# .boot file typically just $REL_NAME (ie, the app name) | ||
# however, for debugging, sometimes start_clean.boot is useful. | ||
# For e.g. 'setup', one may even want to name another boot script. | ||
case "$1" in | ||
console) [ -f $REL_DIR/$REL_NAME.boot ] && BOOTFILE=$REL_DIR/$REL_NAME || BOOTFILE=$REL_DIR/start ;; | ||
console_clean) BOOTFILE=$ROOTDIR/bin/start_clean ;; | ||
console_boot) | ||
shift | ||
BOOTFILE="$1" | ||
shift | ||
;; | ||
esac | ||
# Setup beam-required vars | ||
EMU=beam | ||
PROGNAME=`echo $0 | sed 's/.*\\///'` | ||
CMD="$BINDIR/erlexec -boot $BOOTFILE -env ERL_LIBS $REL_DIR/lib -config $CONFIG_PATH -args_file $VMARGS_PATH" | ||
export EMU | ||
export PROGNAME | ||
|
||
# Dump environment info for logging purposes | ||
echo "Exec: $CMD" -- ${1+"$@"} | ||
echo "Root: $ROOTDIR" | ||
|
||
# Log the startup | ||
logger -t "$REL_NAME[$$]" "Starting up" | ||
|
||
# Start the VM | ||
exec $CMD -- ${1+"$@"} | ||
;; | ||
|
||
foreground) | ||
# start up the release in the foreground for use by runit | ||
# or other supervision services | ||
|
||
[ -f $REL_DIR/$REL_NAME.boot ] && BOOTFILE=$REL_NAME || BOOTFILE=start | ||
FOREGROUNDOPTIONS="-noinput +Bd" | ||
|
||
# Setup beam-required vars | ||
EMU=beam | ||
PROGNAME=`echo $0 | sed 's/.*\\///'` | ||
CMD="$BINDIR/erlexec $FOREGROUNDOPTIONS -boot $REL_DIR/$BOOTFILE -mode embedded -config $CONFIG_PATH -args_file $VMARGS_PATH" | ||
export EMU | ||
export PROGNAME | ||
|
||
# Dump environment info for logging purposes | ||
echo "Exec: $CMD" -- ${1+"$@"} | ||
echo "Root: $ROOTDIR" | ||
|
||
# Start the VM | ||
exec $CMD -- ${1+"$@"} | ||
;; | ||
*) | ||
echo "Usage: $REL_NAME {start|start_boot <file>|foreground|stop|restart|reboot|ping|console|console_clean|console_boot <file>|attach|remote_console|upgrade}" | ||
exit 1 | ||
;; | ||
esac | ||
|
||
exit 0 |
Oops, something went wrong.