Skip to content

Instantly share code, notes, and snippets.

@jvliwanag
Created April 23, 2012 07:31
Show Gist options
  • Save jvliwanag/2469361 to your computer and use it in GitHub Desktop.
Save jvliwanag/2469361 to your computer and use it in GitHub Desktop.
openacd make script
#!/bin/bash
OUTDIR=~/playground
BASEDIR=/home/jvliwanag/workspace/OpenACD
REBAR="$BASEDIR"/rebar
BINDIR="$OUTDIR"/bin
ETCDIR="$OUTDIR"/etc
LIBDIR="$OUTDIR"/lib
VARDIR="$OUTDIR"/var
OADIR="$LIBDIR"/OpenACD
OALIBDIR="$OADIR"/lib
OABINDIR="$OADIR"/bin
OACONFIGDIR="$ETCDIR"/OpenACD
OAVARDIR="$VARDIR"/OpenACD
OAPLUGINDIR="$OADIR"/plugin.d
mkdir -p "$BINDIR"
mkdir -p "$ETCDIR"
mkdir -p "$LIBDIR"
mkdir -p "$VARDIR"
# Reset
rm -Rf "$OADIR"
mkdir -p "$OADIR"
mkdir -p "$OALIBDIR"
mkdir -p "$OABINDIR"
mkdir -p "$OACONFIGDIR"
mkdir -p "$OAVARDIR"
mkdir -p "$OAPLUGINDIR"
# Compile
cd "$BASEDIR"
#$BASEDIR/rebar compile
### Libraries
function add_to_lib {
dep="$1"
depname=$( basename $dep )
outdepdir="$OALIBDIR"/"$depname"
# TODO clean up
rm -f "$outdepdir/*"
mkdir "$outdepdir"
ebindir="$dep/ebin"
includedir="$dep/include"
privdir="$dep/priv"
[ -d "$ebindir" ] && cp -Rf "$ebindir" "$outdepdir/ebin"
[ -d "$includedir" ] && cp -Rf "$includedir" "$outdepdir/include"
[ -d "$privdir" ] && cp -Rf "$dep/priv" "$outdepdir/priv"
}
# Add self to lib
add_to_lib "$BASEDIR"
# Copy deps to lib
for dep in "$BASEDIR"/**/deps/*; do
add_to_lib "$dep"
done
# Include apps to lib
for app in "$BASEDIR"/include_apps/*; do
add_to_lib "$app"
done
## Configurations
cp "$BASEDIR"/rel/files/app.config "$OACONFIGDIR"
cp "$BASEDIR"/rel/files/vm.args "$OACONFIGDIR"
## Var dirs
mkdir -p "$OAVARDIR"/db
mkdir -p "$OAVARDIR"/log
## Bin
cp "$BASEDIR"/scripts/openacd "$OABINDIR"
ln -s "$OABINDIR"/openacd "$BINDIR"/openacd
#!/bin/bash
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
RUNNER_RUN_DIR=$RUNNER_BASE_DIR/run
RUNNER_PLUGIN_DIR=$RUNNER_BASE_DIR/plugin.d
PIPE_DIR=/tmp/$RUNNER_BASE_DIR/
# To change these, set these env vars before running this script
# RUNNER_USER - is undefined by default which means any user is legal as long as file permissions are set
# accordingly. Root is usually a bad idea but works.
: ${OPENACD_LOG_DIR:=$RUNNER_LOG_DIR}
: ${OPENACD_RUN_DIR:=$RUNNER_RUN_DIR}
: ${OPENACD_ETC_DIR:=$RUNNER_ETC_DIR}
export OPENACD_LOG_DIR
export OPENACD_RUN_DIR
# Add plug-in dir to path
ERL_LIBS=$ERL_LIBS:"$OPENACD_PLUGIN_DIR"
export ERL_LIBS
# 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
mkdir -p $RUNNER_RUN_DIR
# Extract the target node name from node.args
NAME_ARG=`grep -e '-[s]*name' $OPENACD_ETC_DIR/vm.args`
if [ -z "$NAME_ARG" ]; then
echo "vm.args needs to have either -name or -sname parameter."
exit 1
fi
# Extract the target cookie
COOKIE_ARG=`grep -e '-setcookie' $OPENACD_ETC_DIR/vm.args`
if [ -z "$COOKIE_ARG" ]; then
echo "vm.args needs to have a -setcookie parameter."
exit 1
fi
if [ ! -f "$OPENACD_RUN_DIR/key" ]; then
echo "RSA key does not exist, generating..."
ssh-keygen -t rsa -f $OPENACD_RUN_DIR/key -N ""
RES=$?
if [ $RES != 0 ]; then
echo "Key generation failed with error $RES!"
exit $RES
fi
fi
# Identify the script name
SCRIPT=`basename $0`
# Parse out release and erts info
START_ERL=`cat $RUNNER_BASE_DIR/releases/start_erl.data`
ERTS_VSN=${START_ERL% *}
APP_VSN=${START_ERL#* }
# Add ERTS bin dir to our path
ERTS_PATH=$RUNNER_BASE_DIR/erts-$ERTS_VSN/bin
# Setup command to control the node
NODETOOL="$ERTS_PATH/escript $ERTS_PATH/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
export HEART_COMMAND="$RUNNER_BASE_DIR/bin/$SCRIPT start"
mkdir -p $PIPE_DIR
# Note the trailing slash on $PIPE_DIR/
$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...
PID=`$NODETOOL pid`
$NODETOOL stop
while `kill 0 $PID 2>/dev/null`;
do
sleep 1
done
;;
restart)
## Restart the VM without exiting the process
$NODETOOL restart
;;
reboot)
## Restart the VM completely (uses heart to restart it)
$NODETOOL reboot
;;
ping)
## See if the VM is alive
$NODETOOL ping
;;
remsh)
# Make sure a node IS running
RES=`$NODETOOL ping`
if [ "$RES" != "pong" ]; then
echo "Node is not running!"
exit 1
fi
$ERTS_PATH/erl -name remsh@127.0.0.1 -setcookie openacd -remsh openacd@127.0.0.1
;;
attach)
# Make sure a node IS running
RES=`$NODETOOL ping`
if [ "$RES" != "pong" ]; then
echo "Node is not running!"
exit 1
fi
shift
$ERTS_PATH/to_erl $PIPE_DIR
;;
console)
# Setup beam-required vars
ROOTDIR=$RUNNER_BASE_DIR
BINDIR=$ROOTDIR/erts-$ERTS_VSN/bin
EMU=beam
PROGNAME=`echo $0 | sed 's/.*\\///'`
CMD="$BINDIR/erlexec -boot $RUNNER_BASE_DIR/releases/$APP_VSN/$SCRIPT -embedded -config $OPENACD_ETC_DIR/app.config -args_file $OPENACD_ETC_DIR/vm.args -- ${1+"$@"}"
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
-module(openacd).
-export([start/0]).
ensure_started(App) ->
case application:start(App) of
ok ->
ok;
{error, {already_started, _}} ->
ok
end.
start() ->
lists:foreach(fun ensure_started/1, my_apps()).
my_apps() -> [
kernel,
stdlib,
crypto,
public_key,
mnesia,
syntax_tools,
compiler,
xmerl,
ssl,
inets,
mochiweb,
errd,
gen_smtp,
sasl,
'OpenACD'
].
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment