Update a couple of scripts

Mostly style.

Author: Franck Cuny <fcuny@apache.org>
Author: Leigh Stewart <lstewart@twitter.com>
Author: Khurrum Nasim <khurrumnasimm@gmail.com>

Reviewers: Sijie Guo <sijie@apache.org>

Closes #46 from franckcuny/fcuny/update-scripts and squashes the following commits:

50c16ec [Franck Cuny] Rename a variable in one of the shell script.
924ba7e [Franck Cuny] Run `git rev-parse` only once when building the bundle.
f1d3b3f [Franck Cuny] Remove more duplicated shell scripts.
90ce66f [Franck Cuny] Do not duplicate code for the 'bundle' script.
13987ea [Franck Cuny] Build cobertura report only on master for successful builds
525ec9a [Khurrum Nasim] Fix deadlock on BKSyncLogReaderDLSN
23c9190 [Leigh Stewart] Add documentation for distributedlog-benchmark
85aa8a7 [Franck Cuny] Make the shell style more consistent.
4f81ba2 [Franck Cuny] Rely on git to find the root directory.
diff --git a/distributedlog-benchmark/bin/bundle b/distributedlog-benchmark/bin/bundle
index 353f438..838f74d 100755
--- a/distributedlog-benchmark/bin/bundle
+++ b/distributedlog-benchmark/bin/bundle
@@ -18,19 +18,8 @@
 # * limitations under the License.
 # */
 
-BASEDIR=$(dirname "$0")
-DISTRIBUTEDLOG_ROOT="${BASEDIR}/../.."
-
 set -e
-shopt -s dotglob
 
-cd ${DISTRIBUTEDLOG_ROOT}
-rm -rf distributedlog-benchmark/lib
-rm -rf dist/distributedlog-benchmark*
-mkdir -p dist/distributedlog-benchmark/{conf,lib}
-mvn clean install -Ptwitter-ostrich-provider -pl distributedlog-benchmark -am -DskipTests
-cp -rf distributedlog-benchmark/conf/* dist/distributedlog-benchmark/conf
-cp -rf distributedlog-benchmark/lib/* dist/distributedlog-benchmark/lib
-cp -rf distributedlog-benchmark/target/distributedlog-benchmark-*.jar dist/distributedlog-benchmark
-cd dist
-zip -r distributedlog-benchmark.zip distributedlog-benchmark >/dev/null
+DLOG_ROOT=$(git rev-parse --show-toplevel)
+
+bash "${DLOG_ROOT}"/scripts/bundle benchmark
diff --git a/distributedlog-benchmark/bin/dbench b/distributedlog-benchmark/bin/dbench
index b84e133..42dd5b0 100755
--- a/distributedlog-benchmark/bin/dbench
+++ b/distributedlog-benchmark/bin/dbench
@@ -18,59 +18,13 @@
 # * limitations under the License.
 # */
 
-# check if net.ipv6.bindv6only is set to 1
-bindv6only=$(/sbin/sysctl -n net.ipv6.bindv6only 2> /dev/null)
-if [ -n "$bindv6only" ] && [ "$bindv6only" -eq "1" ]
-then
-  echo "Error: \"net.ipv6.bindv6only\" is set to 1 - Java networking could be broken"
-  echo "For more info (the following page also applies to dlog): http://wiki.apache.org/hadoop/HadoopIPv6"
-  exit 1
-fi
+set -e
 
-# See the following page for extensive details on setting
-# up the JVM to accept JMX remote management:
-# http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
-# by default we allow local JMX connections
-if [ "x$JMXLOCALONLY" = "x" ]
-then
-    JMXLOCALONLY=false
-fi
+DLOG_ROOT=$(git rev-parse --show-toplevel)
 
-if [ "x$JMXDISABLE" = "x" ]
-then
-    echo "JMX enabled by default" >&2
-    # for some reason these two options are necessary on jdk6 on Ubuntu
-    #   accord to the docs they are not necessary, but otw jconsole cannot
-    #   do a local attach
-    JMX_ARGS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY"
-else
-    echo "JMX disabled by user request" >&2
-fi
+DLOG_HOME="${DLOG_ROOT}/distributedlog-benchmark"
 
-BINDIR=`dirname "$0"`
-DLOG_HOME=`cd $BINDIR/.. > /dev/null;pwd`
-
-DEFAULT_LOG_CONF=$DLOG_HOME/conf/log4j.properties
-
-source $DLOG_HOME/conf/dlogenv.sh
-
-# exclude tests jar
-RELEASE_JAR=`ls $DLOG_HOME/distributedlog-*.jar 2> /dev/null | egrep -v 'tests|javadoc|sources' | tail -1`
-if [ $? == 0 ]; then
-    DLOG_JAR=$RELEASE_JAR
-fi
-
-# exclude tests jar
-BUILT_JAR=`ls $DLOG_HOME/target/distributedlog-*.jar 2> /dev/null | egrep -v 'tests|javadoc|sources' | tail -1`
-if [ $? != 0 ] && [ ! -e "$DLOG_JAR" ]; then
-    echo "\nCouldn't find dlog jar.";
-    echo "Make sure you've run 'mvn package'\n";
-    exit 1;
-elif [ -e "$BUILT_JAR" ]; then
-    DLOG_JAR=$BUILT_JAR
-fi
-
-dbench_help() {
+usage() {
     cat <<EOF
 Usage: dlog <command>
 where command is one of:
@@ -89,67 +43,13 @@
 EOF
 }
 
-add_maven_deps_to_classpath() {
-    MVN="mvn"
-    if [ "$MAVEN_HOME" != "" ]; then
-	MVN=${MAVEN_HOME}/bin/mvn
-    fi
-
-    # Need to generate classpath from maven pom. This is costly so generate it
-    # and cache it. Save the file into our target dir so a mvn clean will get
-    # clean it up and force us create a new one.
-    f="${DLOG_HOME}/target/cached_classpath.txt"
-    if [ ! -f "${f}" ]
-    then
-	${MVN} -f "${DLOG_HOME}/pom.xml" dependency:build-classpath -Dmdep.outputFile="${f}" &> /dev/null
-    fi
-    DLOG_CLASSPATH=${CLASSPATH}:`cat "${f}"`
-}
-
-if [ -d "$DLOG_HOME/lib" ]; then
-    for i in $DLOG_HOME/lib/*.jar; do
-	DLOG_CLASSPATH=$DLOG_CLASSPATH:$i
-    done
-else
-    add_maven_deps_to_classpath
-fi
-
-# if no args specified, show usage
-if [ $# = 0 ]; then
-    dbench_help;
-    exit 1;
-fi
+cd "${DLOG_ROOT}"
+source ./scripts/common.sh
 
 # get arguments
 COMMAND=$1
 shift
 
-if [ -z "$DLOG_LOG_CONF" ]; then
-    DLOG_LOG_CONF=$DEFAULT_LOG_CONF
-fi
-
-DLOG_CLASSPATH="$DLOG_JAR:$DLOG_CLASSPATH:$DLOG_EXTRA_CLASSPATH"
-if [ "$DLOG_LOG_CONF" != "" ]; then
-    DLOG_CLASSPATH="`dirname $DLOG_LOG_CONF`:$DLOG_CLASSPATH"
-    OPTS="$OPTS -Dlog4j.configuration=`basename $DLOG_LOG_CONF`"
-fi
-OPTS="-cp $DLOG_CLASSPATH $OPTS $DLOG_EXTRA_OPTS"
-
-OPTS="$OPTS $DLOG_EXTRA_OPTS"
-
-# Disable ipv6 as it can cause issues
-OPTS="$OPTS -Djava.net.preferIPv4Stack=true"
-
-# log directory & file
-DLOG_ROOT_LOGGER=${DLOG_ROOT_LOGGER:-"INFO,R"}
-DLOG_LOG_DIR=${DLOG_LOG_DIR:-"$DLOG_HOME/logs"}
-DLOG_LOG_FILE=${DLOG_LOG_FILE:-"dbench.log"}
-
-#Configure log configuration system properties
-OPTS="$OPTS -Ddlog.root.logger=$DLOG_ROOT_LOGGER"
-OPTS="$OPTS -Ddlog.log.dir=$DLOG_LOG_DIR"
-OPTS="$OPTS -Ddlog.log.file=$DLOG_LOG_FILE"
-
 BENCH_ARGS="""
   --provider ${STATS_PROVIDER} \\
   --conf ${BENCH_CONF_FILE:-"${DLOG_HOME}/conf/benchmark.conf"} \\
@@ -165,7 +65,9 @@
 
 #Change to DLOG_HOME to support relative paths
 cd "$DLOG_HOME"
-if [ $COMMAND == "bkwrite" ]; then
+
+case "${COMMAND}" in
+  bkwrite)
     BENCH_WRITE_ARGS="""
     --messagesize ${MSG_SIZE} \\
     --rate ${INITIAL_RATE} \\
@@ -175,7 +77,8 @@
     """
     BENCH_ARGS="${BENCH_ARGS} \\ ${BENCH_WRITE_ARGS} \\ --mode dlwrite \\"
     exec java $OPTS $JMX_ARGS com.twitter.distributedlog.benchmark.Benchmarker $BENCH_ARGS $@
-elif [ $COMMAND == "write" ]; then
+    ;;
+  write)
     BENCH_WRITE_ARGS="""
     --messagesize ${MSG_SIZE} \\
     --rate ${INITIAL_RATE} \\
@@ -185,7 +88,8 @@
     """
     BENCH_ARGS="${BENCH_ARGS} \\ ${BENCH_WRITE_ARGS} \\ --mode write \\"
     exec java $OPTS $JMX_ARGS com.twitter.distributedlog.benchmark.Benchmarker $BENCH_ARGS $@
-elif [ $COMMAND == "read" ]; then
+    ;;
+  read)
     BENCH_READ_ARGS="""
     --readers-per-stream ${NUM_READERS_PER_STREAM} \\
     --max-stream-id ${MAX_STREAM_ID} \\
@@ -193,10 +97,12 @@
     """
     BENCH_ARGS="${BENCH_ARGS} \\ ${BENCH_READ_ARGS} \\ --mode read \\"
     exec java $OPTS $JMX_ARGS com.twitter.distributedlog.benchmark.Benchmarker $BENCH_ARGS $@
-elif [ $COMMAND == "help" ]; then
-    dbench_help;
-else
+    ;;
+  help)
+    usage
+    ;;
+  *)
     exec java $OPTS $COMMAND $@
-fi
-
+    ;;
+esac
 
diff --git a/distributedlog-core/bin/dlog b/distributedlog-core/bin/dlog
index 169d5d9..c4f9ed2 100755
--- a/distributedlog-core/bin/dlog
+++ b/distributedlog-core/bin/dlog
@@ -18,154 +18,58 @@
 # * limitations under the License.
 # */
 
-# check if net.ipv6.bindv6only is set to 1
-bindv6only=$(/sbin/sysctl -n net.ipv6.bindv6only 2> /dev/null)
-if [ -n "$bindv6only" ] && [ "$bindv6only" -eq "1" ]
-then
-  echo "Error: \"net.ipv6.bindv6only\" is set to 1 - Java networking could be broken"
-  echo "For more info (the following page also applies to dlog): http://wiki.apache.org/hadoop/HadoopIPv6"
-  exit 1
-fi
+set -e
 
-# See the following page for extensive details on setting
-# up the JVM to accept JMX remote management:
-# http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
-# by default we allow local JMX connections
-if [ "x$JMXLOCALONLY" = "x" ]
-then
-    JMXLOCALONLY=false
-fi
+DLOG_ROOT=$(git rev-parse --show-toplevel)
+DLOG_HOME="${DLOG_ROOT}"
 
-if [ "x$JMXDISABLE" = "x" ]
-then
-    echo "JMX enabled by default" >&2
-    # for some reason these two options are necessary on jdk6 on Ubuntu
-    #   accord to the docs they are not necessary, but otw jconsole cannot
-    #   do a local attach
-    JMX_ARGS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY"
-else
-    echo "JMX disabled by user request" >&2
-fi
-
-BINDIR=`dirname "$0"`
-DLOG_HOME=`cd $BINDIR/.. > /dev/null;pwd`
-
-DEFAULT_LOG_CONF=$DLOG_HOME/conf/log4j.properties
-
-source $DLOG_HOME/conf/dlogenv.sh
-
-# exclude tests jar
-RELEASE_JAR=`ls $DLOG_HOME/distributedlog-*.jar 2> /dev/null | egrep -v 'tests|javadoc|sources' | tail -1`
-if [ $? == 0 ]; then
-    DLOG_JAR=$RELEASE_JAR
-fi
-
-# exclude tests jar
-BUILT_JAR=`ls $DLOG_HOME/target/distributedlog-*.jar 2> /dev/null | egrep -v 'tests|javadoc|sources' | tail -1`
-if [ $? != 0 ] && [ ! -e "$DLOG_JAR" ]; then
-    echo "\nCouldn't find dlog jar.";
-    echo "Make sure you've run 'mvn package'\n";
-    exit 1;
-elif [ -e "$BUILT_JAR" ]; then
-    DLOG_JAR=$BUILT_JAR
-fi
-
-dlog_help() {
-    cat <<EOF
-Usage: dlog <command>
+usage() {
+  cat <<EOF
+Usage: runner <command>
 where command is one of:
-    local               Run distributedlog sandbox
-    example             Run distributedlog example
-    tool                Run distributedlog tool
-    proxy_tool          Run distributedlog proxy tool to interact with proxies
-    balancer            Run distributedlog balancer
-    admin               Run distributedlog admin tool
-    help                This help message
+  local               Run distributedlog sandbox
+  example             Run distributedlog example
+  tool                Run distributedlog tool
+  proxy_tool          Run distributedlog proxy tool to interact with proxies
+  balancer            Run distributedlog balancer
+  admin               Run distributedlog admin tool
+  help                This help message
 
 or command is the full name of a class with a defined main() method.
 
 Environment variables:
-   DLOG_LOG_CONF        Log4j configuration file (default $DEFAULT_LOG_CONF)
-   DLOG_EXTRA_OPTS      Extra options to be passed to the jvm
-   DLOG_EXTRA_CLASSPATH Add extra paths to the dlog classpath
+  DLOG_LOG_CONF        Log4j configuration file (default $DEFAULT_LOG_CONF)
+  DLOG_EXTRA_OPTS      Extra options to be passed to the jvm
+  DLOG_EXTRA_CLASSPATH Add extra paths to the dlog classpath
 
 These variable can also be set in conf/dlogenv.sh
 EOF
 }
 
-add_maven_deps_to_classpath() {
-    MVN="mvn"
-    if [ "$MAVEN_HOME" != "" ]; then
-	MVN=${MAVEN_HOME}/bin/mvn
-    fi
-
-    # Need to generate classpath from maven pom. This is costly so generate it
-    # and cache it. Save the file into our target dir so a mvn clean will get
-    # clean it up and force us create a new one.
-    f="${DLOG_HOME}/target/cached_classpath.txt"
-    if [ ! -f "${f}" ]
-    then
-	${MVN} -f "${DLOG_HOME}/pom.xml" dependency:build-classpath -Dmdep.outputFile="${f}" &> /dev/null
-    fi
-    DLOG_CLASSPATH=${CLASSPATH}:`cat "${f}"`
-}
-
-if [ -d "$DLOG_HOME/lib" ]; then
-    for i in $DLOG_HOME/lib/*.jar; do
-	DLOG_CLASSPATH=$DLOG_CLASSPATH:$i
-    done
-else
-    add_maven_deps_to_classpath
-fi
-
-# if no args specified, show usage
-if [ $# = 0 ]; then
-    dlog_help;
-    exit 1;
-fi
+cd "${DLOG_ROOT}"
+source ./scripts/common.sh
 
 # get arguments
 COMMAND=$1
 shift
 
-if [ -z "$DLOG_LOG_CONF" ]; then
-    DLOG_LOG_CONF=$DEFAULT_LOG_CONF
-fi
-
-DLOG_CLASSPATH="$DLOG_JAR:$DLOG_CLASSPATH:$DLOG_EXTRA_CLASSPATH"
-if [ "$DLOG_LOG_CONF" != "" ]; then
-    DLOG_CLASSPATH="`dirname $DLOG_LOG_CONF`:$DLOG_CLASSPATH"
-    OPTS="$OPTS -Dlog4j.configuration=`basename $DLOG_LOG_CONF`"
-fi
-OPTS="-cp $DLOG_CLASSPATH $OPTS $DLOG_EXTRA_OPTS"
-
-OPTS="$OPTS $DLOG_EXTRA_OPTS"
-
-# Disable ipv6 as it can cause issues
-OPTS="$OPTS -Djava.net.preferIPv4Stack=true"
-
-# log directory & file
-DLOG_ROOT_LOGGER=${DLOG_ROOT_LOGGER:-"INFO,R"}
-DLOG_LOG_DIR=${DLOG_LOG_DIR:-"$DLOG_HOME/logs"}
-DLOG_LOG_FILE=${DLOG_LOG_FILE:-"dlog.log"}
-
-#Configure log configuration system properties
-OPTS="$OPTS -Ddlog.root.logger=$DLOG_ROOT_LOGGER"
-OPTS="$OPTS -Ddlog.log.dir=$DLOG_LOG_DIR"
-OPTS="$OPTS -Ddlog.log.file=$DLOG_LOG_FILE"
-
 #Change to DLOG_HOME to support relative paths
 cd "$DLOG_HOME"
-if [ $COMMAND == "local" ]; then
+
+case "${COMMAND}" in
+  local)
     exec java $OPTS $JMX_ARGS com.twitter.distributedlog.LocalDLMEmulator $@
-elif [ $COMMAND == "tool" ]; then
+    ;;
+  tool)
     exec java $OPTS com.twitter.distributedlog.tools.Tool com.twitter.distributedlog.tools.DistributedLogTool $@
-elif [ $COMMAND == "admin" ]; then
+    ;;
+  admin)
     exec java $OPTS com.twitter.distributedlog.tools.Tool com.twitter.distributedlog.admin.DistributedLogAdmin $@
-elif [ $COMMAND == "help" ]; then
-    dlog_help;
-else
+    ;;
+  help)
+    usage
+    ;;
+  *)
     exec java $OPTS $COMMAND $@
-fi
-
-
+    ;;
+esac
diff --git a/distributedlog-service/bin/bundle b/distributedlog-service/bin/bundle
index 3ad94fb..bd5b1a0 100755
--- a/distributedlog-service/bin/bundle
+++ b/distributedlog-service/bin/bundle
@@ -18,19 +18,8 @@
 # * limitations under the License.
 # */
 
-BASEDIR=$(dirname "$0")
-DISTRIBUTEDLOG_ROOT="${BASEDIR}/../.."
-
 set -e
-shopt -s dotglob
 
-cd ${DISTRIBUTEDLOG_ROOT}
-rm -rf distributedlog-service/lib
-rm -rf dist/distributedlog-service*
-mkdir -p dist/distributedlog-service/{conf,lib}
-mvn clean install -pl distributedlog-service -am -DskipTests
-cp -r distributedlog-service/conf/* dist/distributedlog-service/conf
-cp -r distributedlog-service/lib/* dist/distributedlog-service/lib
-cp distributedlog-service/target/distributedlog-service-*.jar dist/distributedlog-service
-cd dist
-zip -r distributedlog-service.zip distributedlog-service >/dev/null
+DLOG_ROOT=$(git rev-parse --show-toplevel)
+
+bash "${DLOG_ROOT}"/scripts/bundle service
diff --git a/distributedlog-service/bin/dlog b/distributedlog-service/bin/dlog
index 07bc047..b9a01e1 100755
--- a/distributedlog-service/bin/dlog
+++ b/distributedlog-service/bin/dlog
@@ -18,171 +18,76 @@
 # * limitations under the License.
 # */
 
-# check if net.ipv6.bindv6only is set to 1
-bindv6only=$(/sbin/sysctl -n net.ipv6.bindv6only 2> /dev/null)
-if [ -n "$bindv6only" ] && [ "$bindv6only" -eq "1" ]
-then
-  echo "Error: \"net.ipv6.bindv6only\" is set to 1 - Java networking could be broken"
-  echo "For more info (the following page also applies to dlog): http://wiki.apache.org/hadoop/HadoopIPv6"
-  exit 1
-fi
+set -e
 
-# See the following page for extensive details on setting
-# up the JVM to accept JMX remote management:
-# http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
-# by default we allow local JMX connections
-if [ "x$JMXLOCALONLY" = "x" ]
-then
-    JMXLOCALONLY=false
-fi
+DLOG_ROOT=$(git rev-parse --show-toplevel)
 
-if [ "x$JMXDISABLE" = "x" ]
-then
-    echo "JMX enabled by default" >&2
-    # for some reason these two options are necessary on jdk6 on Ubuntu
-    #   accord to the docs they are not necessary, but otw jconsole cannot
-    #   do a local attach
-    JMX_ARGS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY"
-else
-    echo "JMX disabled by user request" >&2
-fi
+DLOG_HOME="${DLOG_ROOT}"
 
-BINDIR=`dirname "$0"`
-DLOG_HOME=`cd $BINDIR/.. > /dev/null;pwd`
-
-DEFAULT_BK_CONF=$DLOG_HOME/conf/bookie.conf
-DEFAULT_LOG_CONF=$DLOG_HOME/conf/log4j.properties
-
-source $DLOG_HOME/conf/dlogenv.sh
-
-# exclude tests jar
-RELEASE_JAR=`ls $DLOG_HOME/distributedlog-*.jar 2> /dev/null | egrep -v 'tests|javadoc|sources' | tail -1`
-if [ $? == 0 ]; then
-    DLOG_JAR=$RELEASE_JAR
-fi
-
-# exclude tests jar
-BUILT_JAR=`ls $DLOG_HOME/target/distributedlog-*.jar 2> /dev/null | egrep -v 'tests|javadoc|sources' | tail -1`
-if [ $? != 0 ] && [ ! -e "$DLOG_JAR" ]; then
-    echo "\nCouldn't find dlog jar.";
-    echo "Make sure you've run 'mvn package'\n";
-    exit 1;
-elif [ -e "$BUILT_JAR" ]; then
-    DLOG_JAR=$BUILT_JAR
-fi
-
-dlog_help() {
-    cat <<EOF
-Usage: dlog <command>
+usage() {
+  cat <<EOF
+Usage: runner <command>
 where command is one of:
-    local               Run distributedlog sandbox
-    example             Run distributedlog example
-    tool                Run distributedlog tool
-    proxy_tool          Run distributedlog proxy tool to interact with proxies
-    balancer            Run distributedlog balancer
-    admin               Run distributedlog admin tool
-    zkshell             Run zookeeper shell
-    bkshell             Run bookkeeper shell
-    help                This help message
+  local               Run distributedlog sandbox
+  example             Run distributedlog example
+  tool                Run distributedlog tool
+  proxy_tool          Run distributedlog proxy tool to interact with proxies
+  balancer            Run distributedlog balancer
+  admin               Run distributedlog admin tool
+  zkshell             Run zookeeper shell
+  bkshell             Run bookkeeper shell
+  help                This help message
 
 or command is the full name of a class with a defined main() method.
 
 Environment variables:
-   DLOG_LOG_CONF        Log4j configuration file (default $DEFAULT_LOG_CONF)
-   DLOG_EXTRA_OPTS      Extra options to be passed to the jvm
-   DLOG_EXTRA_CLASSPATH Add extra paths to the dlog classpath
-   BOOKIE_CONF          Bookie Configuration file (default: $DEFAULT_BK_CONF)
+  DLOG_LOG_CONF        Log4j configuration file (default $DEFAULT_LOG_CONF)
+  DLOG_EXTRA_OPTS      Extra options to be passed to the jvm
+  DLOG_EXTRA_CLASSPATH Add extra paths to the dlog classpath
 
 These variable can also be set in conf/dlogenv.sh
 EOF
 }
 
-add_maven_deps_to_classpath() {
-    MVN="mvn"
-    if [ "$MAVEN_HOME" != "" ]; then
-	MVN=${MAVEN_HOME}/bin/mvn
-    fi
-
-    # Need to generate classpath from maven pom. This is costly so generate it
-    # and cache it. Save the file into our target dir so a mvn clean will get
-    # clean it up and force us create a new one.
-    f="${DLOG_HOME}/target/cached_classpath.txt"
-    if [ ! -f "${f}" ]
-    then
-	${MVN} -f "${DLOG_HOME}/pom.xml" dependency:build-classpath -Dmdep.outputFile="${f}" &> /dev/null
-    fi
-    DLOG_CLASSPATH=${CLASSPATH}:`cat "${f}"`
-}
-
-if [ -d "$DLOG_HOME/lib" ]; then
-    for i in $DLOG_HOME/lib/*.jar; do
-	DLOG_CLASSPATH=$DLOG_CLASSPATH:$i
-    done
-else
-    add_maven_deps_to_classpath
-fi
-
-# if no args specified, show usage
-if [ $# = 0 ]; then
-    dlog_help;
-    exit 1;
-fi
+cd "${DLOG_ROOT}"
+source ./scripts/common.sh
 
 # get arguments
 COMMAND=$1
 shift
 
-if [ -z "$DLOG_LOG_CONF" ]; then
-    DLOG_LOG_CONF=$DEFAULT_LOG_CONF
-fi
-
-if [ -z "$BOOKIE_CONF" ]; then
-    BOOKIE_CONF=$DEFAULT_BK_CONF
-fi
-
-DLOG_CLASSPATH="$DLOG_JAR:$DLOG_CLASSPATH:$DLOG_EXTRA_CLASSPATH"
-if [ "$DLOG_LOG_CONF" != "" ]; then
-    DLOG_CLASSPATH="`dirname $DLOG_LOG_CONF`:$DLOG_CLASSPATH"
-    OPTS="$OPTS -Dlog4j.configuration=`basename $DLOG_LOG_CONF`"
-fi
-OPTS="-cp $DLOG_CLASSPATH $OPTS $DLOG_EXTRA_OPTS"
-
-OPTS="$OPTS $DLOG_EXTRA_OPTS"
-
-# Disable ipv6 as it can cause issues
-OPTS="$OPTS -Djava.net.preferIPv4Stack=true"
-
-# log directory & file
-DLOG_ROOT_LOGGER=${DLOG_ROOT_LOGGER:-"INFO,R"}
-DLOG_LOG_DIR=${DLOG_LOG_DIR:-"$DLOG_HOME/logs"}
-DLOG_LOG_FILE=${DLOG_LOG_FILE:-"dlog.log"}
-
-#Configure log configuration system properties
-OPTS="$OPTS -Ddlog.root.logger=$DLOG_ROOT_LOGGER"
-OPTS="$OPTS -Ddlog.log.dir=$DLOG_LOG_DIR"
-OPTS="$OPTS -Ddlog.log.file=$DLOG_LOG_FILE"
-
 #Change to DLOG_HOME to support relative paths
 cd "$DLOG_HOME"
-if [ $COMMAND == "local" ]; then
+
+case "${COMMAND}" in
+  local)
     exec java $OPTS $JMX_ARGS com.twitter.distributedlog.LocalDLMEmulator $@
-elif [ $COMMAND == "tool" ]; then
+    ;;
+  tool)
     exec java $OPTS com.twitter.distributedlog.tools.Tool com.twitter.distributedlog.tools.DistributedLogTool $@
-elif [ $COMMAND == "proxy_tool" ]; then
+    ;;
+  proxy_tool)
     exec java $OPTS com.twitter.distributedlog.tools.Tool com.twitter.distributedlog.service.tools.ProxyTool $@
-elif [ $COMMAND == "balancer" ]; then
+    ;;
+  balancer)
     exec java $OPTS com.twitter.distributedlog.tools.Tool com.twitter.distributedlog.service.balancer.BalancerTool $@
-elif [ $COMMAND == "admin" ]; then
+    ;;
+  admin)
     exec java $OPTS com.twitter.distributedlog.tools.Tool com.twitter.distributedlog.admin.DistributedLogAdmin $@
-elif [ $COMMAND == "zkshell" ]; then
+    ;;
+  zkshell)
     exec java $OPTS org.apache.zookeeper.ZooKeeperMain -server $@
-elif [ $COMMAND == "bkshell" ]; then
+    ;;
+  bkshell)
     ENTRY_FORMATTER_ARG="-DentryFormatterClass=${ENTRY_FORMATTER_CLASS:-org.apache.bookkeeper.util.StringEntryFormatter}"
     exec java $OPTS $ENTRY_FORMATTER_ARG org.apache.bookkeeper.bookie.BookieShell -conf $BOOKIE_CONF $@
-elif [ $COMMAND == "help" ]; then
-    dlog_help;
-else
+    ;;
+  help)
+    usage
+    ;;
+  *)
     exec java $OPTS $COMMAND $@
-fi
+    ;;
+esac
 
 
diff --git a/scripts/bundle b/scripts/bundle
new file mode 100755
index 0000000..a0c8a3a
--- /dev/null
+++ b/scripts/bundle
@@ -0,0 +1,45 @@
+#!/bin/bash
+#
+#/**
+# * Licensed to the Apache Software Foundation (ASF) under one
+# * or more contributor license agreements.  See the NOTICE file
+# * distributed with this work for additional information
+# * regarding copyright ownership.  The ASF licenses this file
+# * to you under the Apache License, Version 2.0 (the
+# * "License"); you may not use this file except in compliance
+# * with the License.  You may obtain a copy of the License at
+# *
+# *     http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# */
+
+set -e
+shopt -s dotglob
+
+COMPONENT=$1
+if [[ -z "${COMPONENT}" ]]; then
+  echo "You need to specify the component" 2>&1
+  exit 1
+fi
+
+cd "${DLOG_ROOT}"
+
+rm -rf "distributedlog-${COMPONENT}/lib"
+rm -rf "dist/distributedlog-${COMPONENT}*"
+
+mkdir -p "dist/distributedlog-${COMPONENT}"/{conf,lib}
+
+mvn install -Ptwitter-ostrich-provider -pl "distributedlog-${COMPONENT}" -am -DskipTests
+
+cp -rf distributedlog-"${COMPONENT}"/conf/* "dist/distributedlog-${COMPONENT}/conf/"
+cp -rf "distributedlog-${COMPONENT}"/lib/* "dist/distributedlog-${COMPONENT}/lib"
+cp -rf "distributedlog-${COMPONENT}"/target/distributedlog-"${COMPONENT}"-*.jar "dist/distributedlog-${COMPONENT}"
+
+cd dist
+
+zip -r "distributedlog-${COMPONENT}.zip" "distributedlog-${COMPONENT}" >/dev/null
diff --git a/scripts/common.sh b/scripts/common.sh
new file mode 100755
index 0000000..433f93b
--- /dev/null
+++ b/scripts/common.sh
@@ -0,0 +1,126 @@
+#!/usr/bin/env bash
+#
+#/**
+# * Copyright 2007 The Apache Software Foundation
+# *
+# * Licensed to the Apache Software Foundation (ASF) under one
+# * or more contributor license agreements.  See the NOTICE file
+# * distributed with this work for additional information
+# * regarding copyright ownership.  The ASF licenses this file
+# * to you under the Apache License, Version 2.0 (the
+# * "License"); you may not use this file except in compliance
+# * with the License.  You may obtain a copy of the License at
+# *
+# *     http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# */
+
+if [ $(uname) == "Linux" ]; then
+  # check if net.ipv6.bindv6only is set to 1
+  bindv6only=$(/sbin/sysctl -n net.ipv6.bindv6only 2> /dev/null)
+  if [ -n "${bindv6only}" ] && [ "${bindv6only}" -eq "1" ]; then
+    echo "Error: \"net.ipv6.bindv6only\" is set to 1 - Java networking could be broken"
+    echo "For more info (the following page also applies to DistributedLog): http://wiki.apache.org/hadoop/HadoopIPv6"
+    exit 1
+  fi
+fi
+
+# See the following page for extensive details on setting
+# up the JVM to accept JMX remote management:
+# http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
+# by default we allow local JMX connections
+if [ -z "${JMXLOCALONLY}" ]; then
+  JMXLOCALONLY=false
+fi
+
+if [ -z "${JMXDISABLE}" ]; then
+  echo "JMX enabled by default" >&2
+  # for some reason these two options are necessary on jdk6 on Ubuntu
+  # accord to the docs they are not necessary, but otw jconsole cannot
+  # do a local attach
+  JMX_ARGS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=${JMXLOCALONLY}"
+else
+  echo "JMX disabled by user request" >&2
+fi
+
+DEFAULT_LOG_CONF="${DLOG_HOME}/conf/log4j.properties"
+
+[ -f "${DLOG_HOME}/conf/dlogenv.sh" ] && source "${DLOG_HOME}/conf/dlogenv.sh"
+
+# exclude tests jar
+RELEASE_JAR=$(ls "${DLOG_HOME}/distributedlog-*.jar" 2> /dev/null | egrep -v 'tests|javadoc|sources' | tail -1)
+if [ $? == 0 ]; then
+  DLOG_JAR="${RELEASE_JAR}"
+fi
+
+# exclude tests jar
+BUILT_JAR=$(ls "${DLOG_HOME}/target/distributedlog-*.jar" 2> /dev/null | egrep -v 'tests|javadoc|sources' | tail -1)
+
+if [ -e "${BUILD_JAR}" ] && [ -e "${DLOG_JAR}" ]; then
+  echo "\nCouldn't find dlog jar.";
+  echo "Make sure you've run 'mvn package'\n";
+  exit 1;
+elif [ -e "${BUILT_JAR}" ]; then
+  DLOG_JAR="${BUILT_JAR}"
+fi
+
+add_maven_deps_to_classpath() {
+  MVN="mvn"
+  if [ -n "${MAVEN_HOME}" ]; then
+    MVN="${MAVEN_HOME}/bin/mvn"
+  fi
+
+  # Need to generate classpath from maven pom. This is costly so generate it
+  # and cache it. Save the file into our target dir so a mvn clean will get
+  # clean it up and force us create a new one.
+  f="${DLOG_HOME}/target/cached_classpath.txt"
+  if [ ! -f "${f}" ]; then
+    "${MVN}" -f "${DLOG_HOME}/pom.xml" dependency:build-classpath -Dmdep.outputFile="${f}" &> /dev/null
+  fi
+  DLOG_CLASSPATH="${CLASSPATH}":$(cat "${f}")
+}
+
+if [ -d "${DLOG_HOME}/lib" ]; then
+  for i in ${DLOG_HOME}/lib/*.jar; do
+    DLOG_CLASSPATH="${DLOG_CLASSPATH}:${i}"
+  done
+else
+  add_maven_deps_to_classpath
+fi
+
+# if no args specified, show usage
+if [ $# = 0 ]; then
+  usage
+  exit 1
+fi
+
+if [ -z "${DLOG_LOG_CONF}" ]; then
+  DLOG_LOG_CONF="${DEFAULT_LOG_CONF}"
+fi
+
+DLOG_CLASSPATH="${DLOG_JAR}:${DLOG_CLASSPATH}:${DLOG_EXTRA_CLASSPATH}"
+if [ -n "${DLOG_LOG_CONF}" ]; then
+  DLOG_CLASSPATH="$(dirname ${DLOG_LOG_CONF}):${DLOG_CLASSPATH}"
+  OPTS="${OPTS} -Dlog4j.configuration=$(basename ${DLOG_LOG_CONF})"
+fi
+OPTS="-cp ${DLOG_CLASSPATH} ${OPTS} ${DLOG_EXTRA_OPTS}"
+
+OPTS="${OPTS} ${DLOG_EXTRA_OPTS}"
+
+# Disable ipv6 as it can cause issues
+OPTS="${OPTS} -Djava.net.preferIPv4Stack=true"
+
+# log directory & file
+DLOG_ROOT_LOGGER=${DLOG_ROOT_LOGGER:-"INFO,R"}
+DLOG_LOG_DIR=${DLOG_LOG_DIR:-"$DLOG_HOME/logs"}
+DLOG_LOG_FILE=${DLOG_LOG_FILE:-"dlog.log"}
+
+#Configure log configuration system properties
+OPTS="$OPTS -Ddlog.root.logger=${DLOG_ROOT_LOGGER}"
+OPTS="$OPTS -Ddlog.log.dir=${DLOG_LOG_DIR}"
+OPTS="$OPTS -Ddlog.log.file=${DLOG_LOG_FILE}"
diff --git a/scripts/runner b/scripts/runner
index 7780f1a..cc05946 100755
--- a/scripts/runner
+++ b/scripts/runner
@@ -20,143 +20,49 @@
 # * limitations under the License.
 # */
 
-# check if net.ipv6.bindv6only is set to 1
-bindv6only=$(/sbin/sysctl -n net.ipv6.bindv6only 2> /dev/null)
-if [ -n "$bindv6only" ] && [ "$bindv6only" -eq "1" ]
-then
-  echo "Error: \"net.ipv6.bindv6only\" is set to 1 - Java networking could be broken"
-  echo "For more info (the following page also applies to dlog): http://wiki.apache.org/hadoop/HadoopIPv6"
-  exit 1
-fi
+set -e
 
-# See the following page for extensive details on setting
-# up the JVM to accept JMX remote management:
-# http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
-# by default we allow local JMX connections
-if [ "x$JMXLOCALONLY" = "x" ]
-then
-    JMXLOCALONLY=false
-fi
+DLOG_ROOT=$(git rev-parse --show-toplevel)
 
-if [ "x$JMXDISABLE" = "x" ]
-then
-    echo "JMX enabled by default" >&2
-    # for some reason these two options are necessary on jdk6 on Ubuntu
-    #   accord to the docs they are not necessary, but otw jconsole cannot
-    #   do a local attach
-    JMX_ARGS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY"
-else
-    echo "JMX disabled by user request" >&2
-fi
+DLOG_HOME="${DLOG_ROOT}/distributedlog-service"
 
-BINDIR=`dirname "$0"`
-DLOG_HOME=`cd $BINDIR/.. > /dev/null;pwd`
-
-DEFAULT_LOG_CONF=$DLOG_HOME/conf/log4j.properties
-
-source $DLOG_HOME/conf/dlogenv.sh
-
-# exclude tests jar
-RELEASE_JAR=`ls $DLOG_HOME/distributedlog-*.jar 2> /dev/null | egrep -v 'tests|javadoc|sources' | tail -1`
-if [ $? == 0 ]; then
-    DLOG_JAR=$RELEASE_JAR
-fi
-
-# exclude tests jar
-BUILT_JAR=`ls $DLOG_HOME/target/distributedlog-*.jar 2> /dev/null | egrep -v 'tests|javadoc|sources' | tail -1`
-if [ $? != 0 ] && [ ! -e "$DLOG_JAR" ]; then
-    echo "\nCouldn't find dlog jar.";
-    echo "Make sure you've run 'mvn package'\n";
-    exit 1;
-elif [ -e "$BUILT_JAR" ]; then
-    DLOG_JAR=$BUILT_JAR
-fi
-
-dlog_help() {
-    cat <<EOF
+usage() {
+  cat <<EOF
 Usage: runner <command>
 where command is one of:
-    run                 Run distributedlog example
-    help                This help message
+  run                 Run distributedlog example
+  help                This help message
 
 or command is the full name of a class with a defined main() method.
 
 Environment variables:
-   DLOG_LOG_CONF        Log4j configuration file (default $DEFAULT_LOG_CONF)
-   DLOG_EXTRA_OPTS      Extra options to be passed to the jvm
-   DLOG_EXTRA_CLASSPATH Add extra paths to the dlog classpath
+  DLOG_LOG_CONF        Log4j configuration file (default $DEFAULT_LOG_CONF)
+  DLOG_EXTRA_OPTS      Extra options to be passed to the jvm
+  DLOG_EXTRA_CLASSPATH Add extra paths to the dlog classpath
 
 These variable can also be set in conf/dlogenv.sh
 EOF
 }
 
-add_maven_deps_to_classpath() {
-    MVN="mvn"
-    if [ "$MAVEN_HOME" != "" ]; then
-	MVN=${MAVEN_HOME}/bin/mvn
-    fi
-
-    # Need to generate classpath from maven pom. This is costly so generate it
-    # and cache it. Save the file into our target dir so a mvn clean will get
-    # clean it up and force us create a new one.
-    f="${DLOG_HOME}/target/cached_classpath.txt"
-    if [ ! -f "${f}" ]
-    then
-	${MVN} -f "${DLOG_HOME}/pom.xml" dependency:build-classpath -Dmdep.outputFile="${f}" &> /dev/null
-    fi
-    DLOG_CLASSPATH=${CLASSPATH}:`cat "${f}"`
-}
-
-if [ -d "$DLOG_HOME/lib" ]; then
-    for i in $DLOG_HOME/lib/*.jar; do
-	DLOG_CLASSPATH=$DLOG_CLASSPATH:$i
-    done
-else
-    add_maven_deps_to_classpath
-fi
-
-# if no args specified, show usage
-if [ $# = 0 ]; then
-    dlog_help;
-    exit 1;
-fi
+cd "${DLOG_ROOT}"
+source ./scripts/common.sh
 
 # get arguments
-COMMAND=$1
+COMMAND="${1}"
 shift
 
-if [ -z "$DLOG_LOG_CONF" ]; then
-    DLOG_LOG_CONF=$DEFAULT_LOG_CONF
-fi
-
-DLOG_CLASSPATH="$DLOG_JAR:$DLOG_CLASSPATH:$DLOG_EXTRA_CLASSPATH"
-if [ "$DLOG_LOG_CONF" != "" ]; then
-    DLOG_CLASSPATH="`dirname $DLOG_LOG_CONF`:$DLOG_CLASSPATH"
-    OPTS="$OPTS -Dlog4j.configuration=`basename $DLOG_LOG_CONF`"
-fi
-OPTS="-cp $DLOG_CLASSPATH $OPTS $DLOG_EXTRA_OPTS"
-
-OPTS="$OPTS $DLOG_EXTRA_OPTS"
-
-# Disable ipv6 as it can cause issues
-OPTS="$OPTS -Djava.net.preferIPv4Stack=true"
-
-# log directory & file
-DLOG_ROOT_LOGGER=${DLOG_ROOT_LOGGER:-"INFO,R"}
-DLOG_LOG_DIR=${DLOG_LOG_DIR:-"$DLOG_HOME/logs"}
-DLOG_LOG_FILE=${DLOG_LOG_FILE:-"dlog.log"}
-
-#Configure log configuration system properties
-OPTS="$OPTS -Ddlog.root.logger=$DLOG_ROOT_LOGGER"
-OPTS="$OPTS -Ddlog.log.dir=$DLOG_LOG_DIR"
-OPTS="$OPTS -Ddlog.log.file=$DLOG_LOG_FILE"
-
 #Change to DLOG_HOME to support relative paths
-cd "$DLOG_HOME"
-if [ $COMMAND == "run" ]; then
-    exec java $OPTS $@
-elif [ $COMMAND == "help" ]; then
-    dlog_help;
-else
-    dlog_help;
-fi
+cd "${DLOG_HOME}"
+
+case "${COMMAND}" in
+  run)
+    java ${OPTS} $@
+    ;;
+  help)
+    usage
+    ;;
+  *)
+    usage
+    exit 1
+    ;;
+esac
diff --git a/scripts/snapshot b/scripts/snapshot
index 081f307..2c9e285 100755
--- a/scripts/snapshot
+++ b/scripts/snapshot
@@ -20,15 +20,11 @@
 # * limitations under the License.
 # */
 
-BASEDIR=$(dirname "$0")
-DISTRIBUTEDLOG_ROOT="${BASEDIR}/.."
-
 set -e
 shopt -s dotglob
 
-cd ${DISTRIBUTEDLOG_ROOT}
-
-gitsha=`git rev-parse HEAD`
+DISTRIBUTEDLOG_ROOT=$(git rev-parse --show-toplevel)
+GITSHA=$(git rev-parse HEAD)
 
 # clean the dist
 find . -name lib | xargs rm -r
@@ -36,7 +32,7 @@
 
 # create the layout
 for module in distributedlog-service distributedlog-benchmark distributedlog-tutorials/distributedlog-basic distributedlog-tutorials/distributedlog-messaging; do
-    mkdir -p dist/release/${module}/{bin,conf,lib}
+    mkdir -p "dist/release/${module}/{bin,conf,lib}"
 done
 
 # build the package
@@ -69,7 +65,7 @@
 
 # release
 cd dist/release
-zip -r distributedlog-all-${gitsha}.zip distributedlog-service distributedlog-benchmark distributedlog-tutorials > /dev/null
-zip -r distributedlog-service-${gitsha}.zip distributedlog-service >/dev/null
-zip -r distributedlog-benchmark-${gitsha}.zip distributedlog-benchmark >/dev/null
-zip -r distributedlog-tutorials-${gitsha}.zip distributedlog-tutorials >/dev/null
+zip -r "distributedlog-all-${GITSHA}.zip" distributedlog-service distributedlog-benchmark distributedlog-tutorials > /dev/null
+zip -r "distributedlog-service-${GITSHA}.zip" distributedlog-service >/dev/null
+zip -r "distributedlog-benchmark-${GITSHA}.zip" distributedlog-benchmark >/dev/null
+zip -r "distributedlog-tutorials-${GITSHA}.zip" distributedlog-tutorials >/dev/null