Created
April 23, 2012 07:31
-
-
Save jvliwanag/2469361 to your computer and use it in GitHub Desktop.
openacd make script
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
#!/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 | |
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
#!/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 [email protected] -setcookie openacd -remsh [email protected] | |
;; | |
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 |
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
-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