Fix #128 Minimize setup output
diff --git a/bin/impl/setup-accumulo.sh b/bin/impl/setup-accumulo.sh
index 174f52b..0d5ea2f 100755
--- a/bin/impl/setup-accumulo.sh
+++ b/bin/impl/setup-accumulo.sh
@@ -21,8 +21,8 @@
 fi
 
 if [[ $1 != "--no-deps" ]]; then
-  "$UNO_HOME"/bin/impl/setup-hadoop.sh
-  "$UNO_HOME"/bin/impl/setup-zookeeper.sh
+  run_setup_script Hadoop
+  run_setup_script ZooKeeper
 fi
 
 pkill -f accumulo.start
@@ -30,7 +30,7 @@
 # stop if any command fails
 set -e
 
-echo "Setting up Apache Accumulo at $ACCUMULO_HOME"
+echo >&0 "Setting up Apache Accumulo at $ACCUMULO_HOME"
 
 rm -rf "$INSTALL"/accumulo-*
 rm -f "$ACCUMULO_LOG_DIR"/*
@@ -78,7 +78,7 @@
     echo "accumulo.sink.graphite.server_port=2004"
     echo "accumulo.sink.graphite.metrics_prefix=accumulo"
   } >> "$conf"/"$metrics_props"
-  "$UNO_HOME"/bin/impl/setup-metrics.sh
+  run_setup_script Metrics
 fi
 
 if [[ "$ACCUMULO_USE_NATIVE_MAP" == "true" ]]; then
@@ -98,4 +98,3 @@
   "$ACCUMULO_HOME"/bin/accumulo-cluster start
 fi
 
-echo "Apache Accumulo setup complete"
diff --git a/bin/impl/setup-fluo-yarn.sh b/bin/impl/setup-fluo-yarn.sh
index ae896d3..ddcbafb 100755
--- a/bin/impl/setup-fluo-yarn.sh
+++ b/bin/impl/setup-fluo-yarn.sh
@@ -24,11 +24,11 @@
 fi
 
 if [[ $1 != "--no-deps" ]]; then
-  "$UNO_HOME"/bin/impl/setup-fluo.sh
+  run_setup_script Fluo
 fi
 
 if [[ -f "$DOWNLOADS/$FLUO_YARN_TARBALL" ]]; then
-  echo "Setting up Apache Fluo YARN launcher at $FLUO_YARN_HOME"
+  echo >&0 "Setting up Apache Fluo YARN launcher at $FLUO_YARN_HOME"
   # Don't stop if pkills fail
   set +e
   pkill -f "fluo\.yarn"
@@ -51,10 +51,8 @@
 
   "$FLUO_YARN_HOME"/lib/fetch.sh
 
-  echo "Apache Fluo YARN launcher setup complete"
-
   stty sane
 else
-  echo "WARNING: Apache Fluo YARN launcher tarball '$FLUO_YARN_TARBALL' was not found in $DOWNLOADS."
-  echo "Apache Fluo YARN launcher will not be set up!"
+  echo >&0 "WARNING: Apache Fluo YARN launcher tarball '$FLUO_YARN_TARBALL' was not found in $DOWNLOADS."
+  echo >&0 "Apache Fluo YARN launcher will not be set up!"
 fi
diff --git a/bin/impl/setup-fluo.sh b/bin/impl/setup-fluo.sh
index b1ee442..424a74d 100755
--- a/bin/impl/setup-fluo.sh
+++ b/bin/impl/setup-fluo.sh
@@ -24,11 +24,11 @@
 fi
 
 if [[ $1 != "--no-deps" ]]; then
-  "$UNO_HOME"/bin/impl/setup-accumulo.sh
+  run_setup_script Accumulo
 fi
 
 if [[ -f "$DOWNLOADS/$FLUO_TARBALL" ]]; then
-  echo "Setting up Apache Fluo at $FLUO_HOME"
+  echo >&0 "Setting up Apache Fluo at $FLUO_HOME"
   # Don't stop if pkills fail
   set +e
   pkill -f fluo.yarn
@@ -70,10 +70,8 @@
 
   "$FLUO_HOME"/lib/fetch.sh extra
 
-  echo "Apache Fluo setup complete"
-
   stty sane
 else
-  echo "WARNING: Apache Fluo tarball '$FLUO_TARBALL' was not found in $DOWNLOADS."
-  echo "Apache Fluo will not be set up!"
+  echo >&0 "WARNING: Apache Fluo tarball '$FLUO_TARBALL' was not found in $DOWNLOADS."
+  echo >&0 "Apache Fluo will not be set up!"
 fi
diff --git a/bin/impl/setup-hadoop.sh b/bin/impl/setup-hadoop.sh
index d2bf0e0..d8a81ff 100755
--- a/bin/impl/setup-hadoop.sh
+++ b/bin/impl/setup-hadoop.sh
@@ -24,7 +24,7 @@
 # stop if any command fails
 set -e
 
-echo "Setting up Apache Hadoop at $HADOOP_PREFIX"
+echo >&0 "Setting up Apache Hadoop at $HADOOP_PREFIX"
 
 rm -rf "$INSTALL"/hadoop-*
 rm -f "$HADOOP_LOG_DIR"/*
@@ -51,4 +51,3 @@
 "$HADOOP_PREFIX"/sbin/start-dfs.sh
 "$HADOOP_PREFIX"/sbin/start-yarn.sh
 
-echo "Apache Hadoop setup complete"
diff --git a/bin/impl/setup-metrics.sh b/bin/impl/setup-metrics.sh
index f4b3c45..e045ca1 100755
--- a/bin/impl/setup-metrics.sh
+++ b/bin/impl/setup-metrics.sh
@@ -17,11 +17,11 @@
 source "$UNO_HOME"/bin/impl/util.sh
 
 if [[ "$OSTYPE" == "darwin"* ]]; then
-  echo "The metrics services (InfluxDB and Grafana) are not supported on Mac OS X at this time."
+  echo >&0 "The metrics services (InfluxDB and Grafana) are not supported on Mac OS X at this time."
   exit 1
 fi
 
-echo "Killing InfluxDB & Grafana (if running)"
+echo >&0 "Killing InfluxDB & Grafana (if running)"
 pkill -f influxdb
 pkill -f grafana-server
 
@@ -35,36 +35,36 @@
 INFLUXDB_TARBALL=influxdb-"$INFLUXDB_VERSION".tar.gz
 GRAFANA_TARBALL=grafana-"$GRAFANA_VERSION".tar.gz
 if [[ ! -f "$DOWNLOADS/build/$INFLUXDB_TARBALL" ]]; then
-  echo "InfluxDB tarball $INFLUXDB_TARBALL does not exists in downloads/build/"
+  echo >&0 "InfluxDB tarball $INFLUXDB_TARBALL does not exists in downloads/build/"
   exit 1
 fi
 if [[ ! -f "$DOWNLOADS/build/$GRAFANA_TARBALL" ]]; then
-  echo "Grafana tarball $GRAFANA_TARBALL does not exists in downloads/build"
+  echo >&0 "Grafana tarball $GRAFANA_TARBALL does not exists in downloads/build"
   exit 1
 fi
 
 if [[ ! -d "$FLUO_HOME" ]]; then
-  echo "Fluo must be installed before setting up metrics"
+  echo >&0 "Fluo must be installed before setting up metrics"
   exit 1
 fi
 
 # stop if any command fails
 set -e
 
-echo "Removing previous versions of InfluxDB & Grafana"
+echo >&0 "Removing previous versions of InfluxDB & Grafana"
 rm -rf "$INSTALL"/influxdb-*
 rm -rf "$INSTALL"/grafana-*
 
-echo "Remove previous log and data dirs"
+echo >&0 "Remove previous log and data dirs"
 rm -f "$LOGS_DIR"/metrics/*
 rm -rf "$DATA_DIR"/influxdb
 mkdir -p "$LOGS_DIR"/metrics
 
-echo "Setting up metrics (influxdb + grafana)..."
+echo >&0 "Setting up metrics (influxdb + grafana)..."
 tar xzf "$DOWNLOADS/build/$INFLUXDB_TARBALL" -C "$INSTALL"
 "$INFLUXDB_HOME"/bin/influxd config -config "$UNO_HOME"/conf/influxdb/influxdb.conf > "$INFLUXDB_HOME"/influxdb.conf
 if [[ ! -f "$INFLUXDB_HOME"/influxdb.conf ]]; then
-  echo "Failed to create $INFLUXDB_HOME/influxdb.conf"
+  echo >&0 "Failed to create $INFLUXDB_HOME/influxdb.conf"
   exit 1
 fi
 $SED "s#DATA_DIR#$DATA_DIR#g" "$INFLUXDB_HOME"/influxdb.conf
@@ -79,7 +79,7 @@
 cp "$UNO_HOME"/conf/grafana/accumulo-dashboard.json "$GRAFANA_HOME"/dashboards/
 "$GRAFANA_HOME"/bin/grafana-server -homepath="$GRAFANA_HOME" 2> /dev/null &
 
-echo "Configuring Fluo to send metrics to InfluxDB"
+echo >&0 "Configuring Fluo to send metrics to InfluxDB"
 if [[ $FLUO_VERSION =~ ^1\.[0-1].*$ ]]; then
   FLUO_PROPS=$FLUO_HOME/conf/fluo.properties
 else
@@ -94,14 +94,14 @@
   echo "fluo.metrics.reporter.graphite.frequency=30"
 } >> "$FLUO_PROPS"
 
-echo "Configuring InfluxDB..."
+echo >&0 "Configuring InfluxDB..."
 sleep 10
 "$INFLUXDB_HOME"/bin/influx -import -path "$FLUO_HOME"/contrib/influxdb/fluo_metrics_setup.txt
 
 # allow commands to fail
 set +e
 
-echo "Configuring Grafana..."
+echo >&0 "Configuring Grafana..."
 
 sleep 5
 
@@ -112,11 +112,11 @@
       --data-binary "$1"
     retcode=$?
     if [[ $retcode != 0 ]]; then
-      echo "Failed to add Grafana data source. Retrying in 5 sec.."
+      echo >&0 "Failed to add Grafana data source. Retrying in 5 sec.."
       sleep 5
     fi
   done
-  echo ""
+  echo >&0 ""
 }
 
 accumulo_data='{"name":"accumulo_metrics","type":"influxdb","url":"http://'
diff --git a/bin/impl/setup-spark.sh b/bin/impl/setup-spark.sh
index c7688c4..3f015f9 100755
--- a/bin/impl/setup-spark.sh
+++ b/bin/impl/setup-spark.sh
@@ -19,11 +19,11 @@
 verify_exist_hash "$SPARK_TARBALL" "$SPARK_HASH"
 
 if [[ ! -d "$HADOOP_PREFIX" ]]; then
-  echo "Apache Hadoop needs to be setup before Apache Spark can be setup."
+  echo >&0 "Apache Hadoop needs to be setup before Apache Spark can be setup."
   exit 1
 fi
 
-echo "Setting up Apache Spark at $SPARK_HOME"
+echo >&0 "Setting up Apache Spark at $SPARK_HOME"
 
 pkill -f org.apache.spark.deploy.history.HistoryServer
 
@@ -45,4 +45,3 @@
 export SPARK_LOG_DIR=$LOGS_DIR/spark
 "$SPARK_HOME"/sbin/start-history-server.sh
 
-echo "Apache Spark setup complete"
diff --git a/bin/impl/setup-zookeeper.sh b/bin/impl/setup-zookeeper.sh
index dfd9d62..9a6ef37 100755
--- a/bin/impl/setup-zookeeper.sh
+++ b/bin/impl/setup-zookeeper.sh
@@ -23,7 +23,7 @@
 # stop if any command fails
 set -e
 
-echo "Setting up Apache ZooKeeper at $ZOOKEEPER_HOME"
+echo >&0 "Setting up Apache ZooKeeper at $ZOOKEEPER_HOME"
 rm -rf "$INSTALL"/zookeeper-*
 rm -f "$ZOO_LOG_DIR"/*
 mkdir -p "$ZOO_LOG_DIR"
@@ -36,4 +36,3 @@
 rm -rf "$DATA_DIR"/zookeeper
 "$ZOOKEEPER_HOME"/bin/zkServer.sh start
 
-echo "Apache ZooKeeper setup complete"
diff --git a/bin/impl/util.sh b/bin/impl/util.sh
index 14bbe7c..ac1a4fa 100755
--- a/bin/impl/util.sh
+++ b/bin/impl/util.sh
@@ -19,7 +19,7 @@
   expected_hash=$(echo "${2// /}" | tr '[:upper:]' '[:lower:]')
 
   if [[ ! -f "$DOWNLOADS/$tarball" ]]; then
-    echo "The tarball $tarball does not exist in downloads/"
+    echo >&0 "The tarball $tarball does not exist in downloads/"
     exit 1
   fi
 
@@ -30,14 +30,14 @@
     64) HASH_CMD='shasum -a 256' ;;
     128) HASH_CMD='shasum -a 512' ;;
     *)
-      echo "Expected checksum ($expected_hash) of $tarball is not an MD5, SHA1, SHA256, or SHA512 sum"
+      echo >&0 "Expected checksum ($expected_hash) of $tarball is not an MD5, SHA1, SHA256, or SHA512 sum"
       exit 1
       ;;
   esac
   actual_hash=$($HASH_CMD "$DOWNLOADS/$tarball" | awk '{print $1}')
 
   if [[ "$actual_hash" != "$expected_hash" ]]; then
-    echo "The actual checksum ($actual_hash) of $tarball does not match the expected checksum ($expected_hash)"
+    echo >&0 "The actual checksum ($actual_hash) of $tarball does not match the expected checksum ($expected_hash)"
     exit 1
   fi
 }
@@ -46,8 +46,16 @@
 function check_dirs() {
   for arg in "$@"; do
     if [[ ! -d "${!arg}" ]]; then
-      echo "$arg=${!arg} is not a valid directory. Please make sure it exists"
+      echo >&0 "$arg=${!arg} is not a valid directory. Please make sure it exists"
       exit 1
     fi
   done
 }
+
+function run_setup_script() {
+  local SCRIP; SCRIP=$(echo "$1" | tr '[:upper:] ' '[:lower:]-')
+  local L_DIR; L_DIR="$LOGS_DIR/setup"
+  mkdir -p "$L_DIR"
+  shift
+  "$UNO_HOME/bin/impl/setup-$SCRIP.sh" "$@" 1>"$L_DIR/$SCRIP.stdout" 2>"$L_DIR/$SCRIP.stderr"
+}
diff --git a/bin/uno b/bin/uno
index 2dc8406..94c74ab 100755
--- a/bin/uno
+++ b/bin/uno
@@ -40,26 +40,28 @@
   fi
 	;;
 setup)
+  [[ -n $LOGS_DIR ]] && rm -f "$LOGS_DIR"/setup/*.std{out,err}
+  echo "Beginning setup (detailed logs in $LOGS_DIR/setup)..."
   case "$2" in
     all)
-      "$bin"/impl/setup-fluo.sh
-      "$bin"/impl/setup-spark.sh
-      "$bin"/impl/setup-metrics.sh
+      run_setup_script Fluo
+      run_setup_script Spark
+      run_setup_script Metrics
       ;;
     accumulo)
-      "$bin"/impl/setup-accumulo.sh "$3"
+      run_setup_script Accumulo "$3"
       ;;
     fluo)
-      "$bin"/impl/setup-fluo.sh "$3"
+      run_setup_script Fluo "$3"
       ;;
     fluo-yarn)
-      "$bin"/impl/setup-fluo-yarn.sh "$3"
+      run_setup_script "Fluo Yarn" "$3"
       ;;
     spark)
-      "$bin"/impl/setup-spark.sh
+      run_setup_script Spark
       ;;
     metrics)
-      "$bin"/impl/setup-metrics.sh
+      run_setup_script Metrics
       ;;
     *)
       echo "Usage: uno setup <component> [--no-deps]"
@@ -75,6 +77,12 @@
       exit 1
       ;;
   esac
+  if [[ "$?" == 0 ]]; then
+    echo "Setup complete."
+  else
+    echo "Setup failed!"
+    false
+  fi
   ;;
 kill)
   "$bin"/impl/kill.sh "${@:2}"