You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@predictionio.apache.org by do...@apache.org on 2017/03/30 22:25:13 UTC

[1/2] incubator-predictionio git commit: [PIO-57] Add SBT Native Packager

Repository: incubator-predictionio
Updated Branches:
  refs/heads/develop dfb01e327 -> f8795ca49


[PIO-57] Add SBT Native Packager

Closes #359


Project: http://git-wip-us.apache.org/repos/asf/incubator-predictionio/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-predictionio/commit/d0d2570b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-predictionio/tree/d0d2570b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-predictionio/diff/d0d2570b

Branch: refs/heads/develop
Commit: d0d2570b3ec602d1abaad544b5759c016432b733
Parents: dfb01e3
Author: Shinsuke Sugaya <sh...@yahoo.co.jp>
Authored: Thu Mar 30 15:11:01 2017 -0700
Committer: Donald Szeto <do...@apache.org>
Committed: Thu Mar 30 15:11:01 2017 -0700

----------------------------------------------------------------------
 .gitignore                                      |  7 +-
 assembly/build.sbt                              | 93 ++++++++++++++++++
 assembly/src/debian/DEBIAN/postrm               | 43 +++++++++
 assembly/src/debian/DEBIAN/preinst              | 36 +++++++
 assembly/src/rpm/scriptlets/postun              | 41 ++++++++
 assembly/src/rpm/scriptlets/preinst             | 35 +++++++
 bin/compute-classpath.sh                        |  2 +-
 bin/pio                                         | 44 +++++----
 bin/pio-class                                   | 17 +++-
 bin/pio-daemon                                  | 35 ++++++-
 bin/pio-shell                                   | 34 ++++++-
 bin/pio-start-all                               | 99 +++++++++++---------
 bin/pio-stop-all                                | 50 ++++++----
 build.sbt                                       |  3 +
 conf/log4j.properties                           |  2 +-
 make-distribution.sh                            | 22 ++++-
 project/plugins.sbt                             |  2 +
 storage/elasticsearch/build.sbt                 |  3 +-
 storage/elasticsearch1/build.sbt                |  3 +-
 storage/hbase/build.sbt                         |  3 +-
 storage/hdfs/build.sbt                          |  3 +-
 storage/jdbc/build.sbt                          |  3 +-
 storage/localfs/build.sbt                       |  3 +-
 tests/build_docker.sh                           |  3 +-
 tools/build.sbt                                 |  5 +-
 .../org/apache/predictionio/tools/Runner.scala  |  2 +
 .../predictionio/tools/commands/Engine.scala    |  2 +
 27 files changed, 496 insertions(+), 99 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 68ad5c4..d6dfe21 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,7 +12,6 @@ core/data
 examples/data/ml-*
 fs/
 supervisord.conf
-assembly/
 /dist
 pio.log
 *.tar.gz
@@ -20,6 +19,10 @@ pio.log
 # Ignore source files whose name prefixed with "Private"
 Private*.scala
 quickstartapp/
+# Eclipse
+.project
+.classpath
+.settings/
 # IntelliJ
 *.iml
 .idea/
@@ -31,3 +34,5 @@ apache-rat-0.11.jar
 tests/dist
 tests/docker-files/*.jar
 tests/docker-files/*.tgz
+assembly/*.jar
+assembly/src/universal/

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/assembly/build.sbt
----------------------------------------------------------------------
diff --git a/assembly/build.sbt b/assembly/build.sbt
new file mode 100644
index 0000000..79fc3ab
--- /dev/null
+++ b/assembly/build.sbt
@@ -0,0 +1,93 @@
+/*
+ * 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.
+ */
+
+import NativePackagerHelper._
+import RpmConstants._
+import com.typesafe.sbt.packager.linux.LinuxSymlink
+
+enablePlugins(RpmPlugin, DebianPlugin)
+
+name := "predictionio"
+
+maintainer in Linux := "Apache Software Foundation"
+packageSummary in Linux := "Apache PredictionIO"
+packageDescription := "Apache PredictionIO is an open source Machine Learning Server " +
+  "built on top of state-of-the-art open source stack for developers " +
+  "and data scientists create predictive engines for any machine learning task."
+
+version in Rpm := version.value.replace("-", "_")
+rpmRelease := "1"
+rpmVendor := "apache"
+rpmGroup := Some("Applications/System")
+rpmUrl := Some("http://predictionio.incubator.apache.org/")
+rpmLicense := Some("Apache License Version 2.0")
+
+maintainerScripts in Rpm := maintainerScriptsAppendFromFile((maintainerScripts in Rpm).value)(
+   Pre -> (sourceDirectory.value / "rpm" / "scriptlets" / "preinst"),
+   Postun -> (sourceDirectory.value / "rpm" / "scriptlets" / "postun")
+)
+
+mappings in Universal ++= {
+  val releaseFile = baseDirectory.value / ".." / "RELEASE.md"
+  val buildPropFile = baseDirectory.value / ".." / "project" / "build.properties"
+  val sbtFile = baseDirectory.value / ".." / "sbt" / "sbt"
+  Seq(releaseFile -> "RELEASE",
+      buildPropFile -> "project/build.properties",
+      sbtFile -> "sbt/sbt")
+}
+
+mappings in Universal ++= {
+  val files = IO.listFiles(baseDirectory.value / ".." / "conf")
+  files filterNot { f => f.getName.endsWith(".travis") } map {
+    case f if f.getName equals "pio-env.sh.template" => f -> "conf/pio-env.sh"
+    case f => f -> s"conf/${f.getName}"
+  } toSeq
+}
+
+mappings in Universal ++= {
+  val files = IO.listFiles(baseDirectory.value / ".." / "bin")
+  files map { f => f -> s"bin/${f.getName}" } toSeq
+}
+
+linuxPackageMappings := {
+    val mappings = linuxPackageMappings.value
+    mappings map {  linuxPackage =>
+        val linuxFileMappings = linuxPackage.mappings map {
+            case (f, n) if f.getName equals "conf" => f -> s"/etc/${name.value}"
+            case (f, n) if f.getName equals "pio-env.sh.template" => f -> s"/etc/${name.value}/pio-env.sh"
+            case (f, n) if f.getParent endsWith "conf" => f -> s"/etc/${name.value}/${f.getName}"
+            case (f, n) if f.getName equals "log" => f -> s"/var/log/${name.value}"
+            case (f, n) if f.getName equals "pio.log" => f -> s"/var/log/${name.value}/pio.log"
+            case (f, n) => f -> n
+        }
+
+        val fileData = linuxPackage.fileData.copy(
+            user = s"${name.value}",
+            group = s"${name.value}"
+        )
+
+        linuxPackage.copy(
+            mappings = linuxFileMappings,
+            fileData = fileData
+        )
+    }
+}
+
+linuxPackageSymlinks := {
+  Seq(LinuxSymlink("/usr/bin/pio", s"/usr/share/${name.value}/bin/pio"),
+      LinuxSymlink("/usr/bin/pio-daemon", s"/usr/share/${name.value}/bin/pio-daemon"))
+}

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/assembly/src/debian/DEBIAN/postrm
----------------------------------------------------------------------
diff --git a/assembly/src/debian/DEBIAN/postrm b/assembly/src/debian/DEBIAN/postrm
new file mode 100644
index 0000000..ed9d71c
--- /dev/null
+++ b/assembly/src/debian/DEBIAN/postrm
@@ -0,0 +1,43 @@
+#
+# 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.
+#
+
+REMOVE_USER_AND_GROUP=false
+
+case "$1" in
+    remove)
+    ;;
+    purge)
+        REMOVE_USER_AND_GROUP=true
+    ;;
+    failed-upgrade|abort-install|abort-upgrade|disappear|upgrade|disappear)
+    ;;
+    *)
+        echo "post remove script called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+if [ "$REMOVE_USER_AND_GROUP" = "true" ]; then
+    if id "predictionio" > /dev/null 2>&1 ; then
+        userdel "predictionio"
+    fi
+
+    if getent group "predictionio" > /dev/null 2>&1 ; then
+        groupdel "predictionio"
+    fi
+fi
+

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/assembly/src/debian/DEBIAN/preinst
----------------------------------------------------------------------
diff --git a/assembly/src/debian/DEBIAN/preinst b/assembly/src/debian/DEBIAN/preinst
new file mode 100644
index 0000000..da60ce3
--- /dev/null
+++ b/assembly/src/debian/DEBIAN/preinst
@@ -0,0 +1,36 @@
+#
+# 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 ! getent group "predictionio" > /dev/null 2>&1 ; then
+  echo -n "Creating predictionio group..."
+  addgroup --quiet --system "predictionio"
+  echo " OK"
+fi
+
+if ! id predictionio > /dev/null 2>&1 ; then
+  echo -n "Creating predictionio user..."
+  adduser --quiet \
+    --system \
+    --no-create-home \
+    --ingroup "predictionio" \
+    --disabled-password \
+    --shell /bin/false \
+    --home "/usr/share/predictionio"  \
+    "predictionio"
+  echo " OK"
+fi
+

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/assembly/src/rpm/scriptlets/postun
----------------------------------------------------------------------
diff --git a/assembly/src/rpm/scriptlets/postun b/assembly/src/rpm/scriptlets/postun
new file mode 100644
index 0000000..206fb86
--- /dev/null
+++ b/assembly/src/rpm/scriptlets/postun
@@ -0,0 +1,41 @@
+#
+# 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.
+#
+
+REMOVE_USER_AND_GROUP=false
+
+case "$1" in
+    0)
+        REMOVE_USER_AND_GROUP=true
+    ;;
+    1)
+    ;;
+    *)
+        echo "post remove script called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+if [ "$REMOVE_USER_AND_GROUP" = "true" ]; then
+    if id "predictionio" > /dev/null 2>&1 ; then
+        userdel "predictionio"
+    fi
+
+    if getent group "predictionio" > /dev/null 2>&1 ; then
+        groupdel "predictionio"
+    fi
+fi
+

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/assembly/src/rpm/scriptlets/preinst
----------------------------------------------------------------------
diff --git a/assembly/src/rpm/scriptlets/preinst b/assembly/src/rpm/scriptlets/preinst
new file mode 100644
index 0000000..cb66b46
--- /dev/null
+++ b/assembly/src/rpm/scriptlets/preinst
@@ -0,0 +1,35 @@
+#
+# 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 ! getent group "predictionio" > /dev/null 2>&1 ; then
+  echo -n "Creating predictionio group..."
+  groupadd -r "predictionio"
+  echo " OK"
+fi
+
+if ! id predictionio > /dev/null 2>&1 ; then
+  echo -n "Creating predictionio user..."
+  useradd --system \
+    -M \
+    --gid "predictionio" \
+    --shell /sbin/nologin \
+    --comment "fess user" \
+    -d "/usr/share/predictionio"  \
+    "predictionio"
+  echo " OK"
+fi
+

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/bin/compute-classpath.sh
----------------------------------------------------------------------
diff --git a/bin/compute-classpath.sh b/bin/compute-classpath.sh
index 69cbb25..032d111 100755
--- a/bin/compute-classpath.sh
+++ b/bin/compute-classpath.sh
@@ -25,7 +25,7 @@ FWDIR="$(cd `dirname $0`/..; pwd)"
 . ${FWDIR}/bin/load-pio-env.sh
 
 # Build up classpath
-CLASSPATH="${FWDIR}/conf"
+CLASSPATH="${PIO_CONF_DIR}"
 
 CLASSPATH="$CLASSPATH:${FWDIR}/plugins/*:${FWDIR}/lib/spark/*"
 

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/bin/pio
----------------------------------------------------------------------
diff --git a/bin/pio b/bin/pio
index fca48f6..01e73ea 100755
--- a/bin/pio
+++ b/bin/pio
@@ -32,28 +32,38 @@ search() {
   echo ${i}
 }
 
-PIO_FILE=$(readlink -f $0 2>/dev/null)
-if [ $? = 0 ] ; then 
-  export PIO_HOME="$(cd $(dirname $PIO_FILE)/..; pwd)"
-else
-  CURRENT_DIR=`pwd`
-  TARGET_FILE="$0"
-  cd "$(dirname "$TARGET_FILE")"
-  TARGET_FILE=$(basename "$TARGET_FILE")
-
-  while [ -L "$TARGET_FILE" ]
-  do
-    TARGET_FILE=$(readlink "$TARGET_FILE")
+if [ -z $PIO_HOME ] ; then
+  PIO_FILE=$(readlink -f $0 2>/dev/null)
+  if [ $? = 0 ] ; then
+    export PIO_HOME="$(cd $(dirname $PIO_FILE)/..; pwd)"
+  else
+    CURRENT_DIR=`pwd`
+    TARGET_FILE="$0"
     cd "$(dirname "$TARGET_FILE")"
     TARGET_FILE=$(basename "$TARGET_FILE")
-  done
 
-  export PIO_HOME="$(cd $(dirname "$TARGET_FILE")/..; pwd -P)"
-  cd "$CURRENT_DIR"
-fi
+    while [ -L "$TARGET_FILE" ]
+    do
+      TARGET_FILE=$(readlink "$TARGET_FILE")
+      cd "$(dirname "$TARGET_FILE")"
+      TARGET_FILE=$(basename "$TARGET_FILE")
+    done
 
+    export PIO_HOME="$(cd $(dirname "$TARGET_FILE")/..; pwd -P)"
+    cd "$CURRENT_DIR"
+  fi
+fi
 
-export PIO_CONF_DIR="${PIO_HOME}/conf"
+if [ -z $PIO_CONF_DIR ] ; then
+  export PIO_CONF_DIR="${PIO_HOME}/conf"
+  if [ ! -d $PIO_CONF_DIR ] ; then
+    export PIO_CONF_DIR="/etc/predictionio"
+    if [ ! -d $PIO_CONF_DIR ] ; then
+      echo "PIO_CONF_DIR is not found."
+      exit 1
+    fi
+  fi
+fi
 
 FIRST_SEP=$(search "--" $@)
 

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/bin/pio-class
----------------------------------------------------------------------
diff --git a/bin/pio-class b/bin/pio-class
index 002da5c..8bde407 100755
--- a/bin/pio-class
+++ b/bin/pio-class
@@ -40,8 +40,8 @@ if [ -z "$1" ]; then
 fi
 
 # Warn if log4j.properties is not present
-if [ ! -f "$FWDIR/conf/log4j.properties" ]; then
-  echo -e "\033[0;35mWarning: log4j.properties is missing from $FWDIR/conf\033[0m"
+if [ ! -f "$PIO_CONF_DIR/log4j.properties" ]; then
+  echo -e "\033[0;35mWarning: log4j.properties is missing from $PIO_CONF_DIR\033[0m"
 fi
 
 # Make sure the Apache Spark version meets the prerequisite if it is a binary
@@ -84,6 +84,19 @@ else
   CLASSPATH=${classpath_output}
 fi
 
+if [ -z $PIO_LOG_DIR ] ; then
+  PIO_LOG_DIR=$PIO_HOME/log
+  touch $PIO_LOG_DIR/pio.log > /dev/null 2>&1
+  if [ $? != 0 ] ; then
+    PIO_LOG_DIR=/var/log/predictionio
+    touch $PIO_LOG_DIR/pio.log > /dev/null 2>&1
+    if [ $? != 0 ] ; then
+      PIO_LOG_DIR=$HOME
+    fi
+  fi
+fi
+
 export CLASSPATH
+export JAVA_OPTS="$JAVA_OPTS -Dpio.log.dir=$PIO_LOG_DIR"
 
 exec "$RUNNER" -cp "$CLASSPATH" $JAVA_OPTS "$@"

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/bin/pio-daemon
----------------------------------------------------------------------
diff --git a/bin/pio-daemon b/bin/pio-daemon
index 62704e1..630b087 100755
--- a/bin/pio-daemon
+++ b/bin/pio-daemon
@@ -22,7 +22,7 @@ search() {
   local needle=$1;
   shift
   for str in $@; do
-    if [ "$str" = "$needle" ]; then
+    if [ "${str}" = "$needle" ]; then
       echo ${i}
       return
     else
@@ -32,9 +32,38 @@ search() {
   echo ${i}
 }
 
-export PIO_HOME="$(cd `dirname $0`/..; pwd)"
+if [ -z $PIO_HOME ] ; then
+  PIO_FILE=$(readlink -f $0 2>/dev/null)
+  if [ $? = 0 ] ; then
+    export PIO_HOME="$(cd $(dirname $PIO_FILE)/..; pwd)"
+  else
+    CURRENT_DIR=`pwd`
+    TARGET_FILE="$0"
+    cd "$(dirname "$TARGET_FILE")"
+    TARGET_FILE=$(basename "$TARGET_FILE")
 
-export PIO_CONF_DIR="$PIO_HOME/conf"
+    while [ -L "$TARGET_FILE" ]
+    do
+      TARGET_FILE=$(readlink "$TARGET_FILE")
+      cd "$(dirname "$TARGET_FILE")"
+      TARGET_FILE=$(basename "$TARGET_FILE")
+    done
+
+    export PIO_HOME="$(cd $(dirname "$TARGET_FILE")/..; pwd -P)"
+    cd "$CURRENT_DIR"
+  fi
+fi
+
+if [ -z $PIO_CONF_DIR ] ; then
+  export PIO_CONF_DIR="${PIO_HOME}/conf"
+  if [ ! -d $PIO_CONF_DIR ] ; then
+    export PIO_CONF_DIR="/etc/predictionio"
+    if [ ! -d $PIO_CONF_DIR ] ; then
+      echo "PIO_CONF_DIR is not found."
+      exit 1
+    fi
+  fi
+fi
 
 PIDFILE=$1
 

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/bin/pio-shell
----------------------------------------------------------------------
diff --git a/bin/pio-shell b/bin/pio-shell
index bb57ddb..d47008f 100755
--- a/bin/pio-shell
+++ b/bin/pio-shell
@@ -17,7 +17,39 @@
 # limitations under the License.
 #
 
-export PIO_HOME="$(cd `dirname $0`/..; pwd)"
+if [ -z $PIO_HOME ] ; then
+  PIO_FILE=$(readlink -f $0 2>/dev/null)
+  if [ $? = 0 ] ; then
+    export PIO_HOME="$(cd $(dirname $PIO_FILE)/..; pwd)"
+  else
+    CURRENT_DIR=`pwd`
+    TARGET_FILE="$0"
+    cd "$(dirname "$TARGET_FILE")"
+    TARGET_FILE=$(basename "$TARGET_FILE")
+
+    while [ -L "$TARGET_FILE" ]
+    do
+      TARGET_FILE=$(readlink "$TARGET_FILE")
+      cd "$(dirname "$TARGET_FILE")"
+      TARGET_FILE=$(basename "$TARGET_FILE")
+    done
+
+    export PIO_HOME="$(cd $(dirname "$TARGET_FILE")/..; pwd -P)"
+    cd "$CURRENT_DIR"
+  fi
+fi
+
+if [ -z $PIO_CONF_DIR ] ; then
+  export PIO_CONF_DIR="${PIO_HOME}/conf"
+  if [ ! -d $PIO_CONF_DIR ] ; then
+    export PIO_CONF_DIR="/etc/predictionio"
+    if [ ! -d $PIO_CONF_DIR ] ; then
+      echo "PIO_CONF_DIR is not found."
+      exit 1
+    fi
+  fi
+fi
+
 . ${PIO_HOME}/bin/load-pio-env.sh
 
 if [[ "$1" == "--with-spark" ]]

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/bin/pio-start-all
----------------------------------------------------------------------
diff --git a/bin/pio-start-all b/bin/pio-start-all
index a78b0d2..15ac1a6 100755
--- a/bin/pio-start-all
+++ b/bin/pio-start-all
@@ -25,63 +25,78 @@ export PIO_HOME="$(cd `dirname $0`/..; pwd)"
 
 . ${PIO_HOME}/bin/load-pio-env.sh
 
+SOURCE_TYPE=$PIO_STORAGE_REPOSITORIES_METADATA_SOURCE
+SOURCE_TYPE=$SOURCE_TYPE$PIO_STORAGE_REPOSITORIES_EVENTDATA_SOURCE
+SOURCE_TYPE=$SOURCE_TYPE$PIO_STORAGE_REPOSITORIES_MODELDATA_SOURCE
+
 # Elasticsearch
-echo "Starting Elasticsearch..."
-if [ -n "$PIO_STORAGE_SOURCES_ELASTICSEARCH_HOME" ]; then
-  if [ -n "$JAVA_HOME" ]; then
-    JPS=`$JAVA_HOME/bin/jps`
-  else
-    JPS=`jps`
+if [ `echo $SOURCE_TYPE | grep -i elasticsearch | wc -l` != 0 ] ; then
+  echo "Starting Elasticsearch..."
+  if [ -n "$PIO_STORAGE_SOURCES_ELASTICSEARCH_HOME" ]; then
+    ELASTICSEARCH_HOME=$PIO_STORAGE_SOURCES_ELASTICSEARCH_HOME
+  elif [ -n "$PIO_STORAGE_SOURCES_ELASTICSEARCH5_HOME" ]; then
+    ELASTICSEARCH_HOME=$PIO_STORAGE_SOURCES_ELASTICSEARCH5_HOME
   fi
-  if [[ ${JPS} =~ "Elasticsearch" ]]; then
-    echo -e "\033[0;31mElasticsearch is already running. Please use pio-stop-all to try stopping it first.\033[0m"
-    echo -e "\033[0;31mNote: If you started Elasticsearch manually, you will need to kill it manually.\033[0m"
-    echo -e "\033[0;31mAborting...\033[0m"
-    exit 1
+  if [ -n "$ELASTICSEARCH_HOME" ]; then
+    if [ -n "$JAVA_HOME" ]; then
+      JPS=`$JAVA_HOME/bin/jps`
+    else
+      JPS=`jps`
+    fi
+    if [[ ${JPS} =~ "Elasticsearch" ]]; then
+      echo -e "\033[0;31mElasticsearch is already running. Please use pio-stop-all to try stopping it first.\033[0m"
+      echo -e "\033[0;31mNote: If you started Elasticsearch manually, you will need to kill it manually.\033[0m"
+      echo -e "\033[0;31mAborting...\033[0m"
+      exit 1
+    else
+      $ELASTICSEARCH_HOME/bin/elasticsearch -d -p $PIO_HOME/es.pid
+    fi
   else
-    $PIO_STORAGE_SOURCES_ELASTICSEARCH_HOME/bin/elasticsearch -d -p $PIO_HOME/es.pid
+    echo -e "\033[0;31mPlease set PIO_STORAGE_SOURCES_ELASTICSEARCH_HOME in conf/pio-env.sh, or in your environment.\033[0m"
+    echo -e "\033[0;31mCannot start Elasticsearch. Aborting...\033[0m"
+    exit 1
   fi
-else
-  echo -e "\033[0;31mPlease set PIO_STORAGE_SOURCES_ELASTICSEARCH_HOME in conf/pio-env.sh, or in your environment.\033[0m"
-  echo -e "\033[0;31mCannot start Elasticsearch. Aborting...\033[0m"
-  exit 1
 fi
 
 # HBase
-echo "Starting HBase..."
-if [ -n "$PIO_STORAGE_SOURCES_HBASE_HOME" ]; then
-  $PIO_STORAGE_SOURCES_HBASE_HOME/bin/start-hbase.sh
-else
-  echo -e "\033[0;31mPlease set PIO_STORAGE_SOURCES_HBASE_HOME in conf/pio-env.sh, or in your environment.\033[0m"
-  # Kill everything for cleanliness
-  echo -e "\033[0;31mCannot start HBase. Aborting...\033[0m"
-  sleep 3
-  ${PIO_HOME}/bin/pio-stop-all
-  exit 1
+if [ `echo $SOURCE_TYPE | grep -i hbase | wc -l` != 0 ] ; then
+  echo "Starting HBase..."
+  if [ -n "$PIO_STORAGE_SOURCES_HBASE_HOME" ]; then
+    $PIO_STORAGE_SOURCES_HBASE_HOME/bin/start-hbase.sh
+  else
+    echo -e "\033[0;31mPlease set PIO_STORAGE_SOURCES_HBASE_HOME in conf/pio-env.sh, or in your environment.\033[0m"
+    # Kill everything for cleanliness
+    echo -e "\033[0;31mCannot start HBase. Aborting...\033[0m"
+    sleep 3
+    ${PIO_HOME}/bin/pio-stop-all
+    exit 1
+  fi
 fi
 
 #PGSQL
-pgsqlStatus="$(ps auxwww | grep postgres | wc -l)"
-if [[ "$pgsqlStatus" < 5 ]]; then
-  # Detect OS
-  OS=`uname`
-  if [[ "$OS" = "Darwin" ]]; then
-    pg_cmd=`which pg_ctl`
-    if [[ "$pg_cmd" != "" ]]; then
-      pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
+if [ `echo $SOURCE_TYPE | grep -i pgsql | wc -l` != 0 ] ; then
+  pgsqlStatus="$(ps auxwww | grep postgres | wc -l)"
+  if [[ "$pgsqlStatus" < 5 ]]; then
+    # Detect OS
+    OS=`uname`
+    if [[ "$OS" = "Darwin" ]]; then
+      pg_cmd=`which pg_ctl`
+      if [[ "$pg_cmd" != "" ]]; then
+        pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
+      fi
+    elif [[ "$OS" = "Linux" ]]; then
+      sudo service postgresql start
+    else
+      echo -e "\033[1;31mYour OS $OS is not yet supported for automatic postgresql startup:(\033[0m"
+      echo -e "\033[1;31mPlease do a manual startup!\033[0m"
+      ${PIO_HOME}/bin/pio-stop-all
+      exit 1
     fi
-  elif [[ "$OS" = "Linux" ]]; then
-    sudo service postgresql start
-  else
-    echo -e "\033[1;31mYour OS $OS is not yet supported for automatic postgresql startup:(\033[0m"
-    echo -e "\033[1;31mPlease do a manual startup!\033[0m"
-    ${PIO_HOME}/bin/pio-stop-all
-    exit 1
   fi
 fi
 
 # PredictionIO Event Server
-echo "Waiting 10 seconds for HBase to fully initialize..."
+echo "Waiting 10 seconds for Storage Repositories to fully initialize..."
 sleep 10
 echo "Starting PredictionIO Event Server..."
 ${PIO_HOME}/bin/pio-daemon ${PIO_HOME}/eventserver.pid eventserver --ip 0.0.0.0

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/bin/pio-stop-all
----------------------------------------------------------------------
diff --git a/bin/pio-stop-all b/bin/pio-stop-all
index 4aab5a3..dabad5d 100755
--- a/bin/pio-stop-all
+++ b/bin/pio-stop-all
@@ -25,6 +25,10 @@ export PIO_HOME="$(cd `dirname $0`/..; pwd)"
 
 . ${PIO_HOME}/bin/load-pio-env.sh
 
+SOURCE_TYPE=$PIO_STORAGE_REPOSITORIES_METADATA_SOURCE
+SOURCE_TYPE=$SOURCE_TYPE$PIO_STORAGE_REPOSITORIES_EVENTDATA_SOURCE
+SOURCE_TYPE=$SOURCE_TYPE$PIO_STORAGE_REPOSITORIES_MODELDATA_SOURCE
+
 # PredictionIO Event Server
 echo "Stopping PredictionIO Event Server..."
 PIDFILE=${PIO_HOME}/eventserver.pid
@@ -34,30 +38,38 @@ if [ -e ${PIDFILE} ]; then
 fi
 
 # HBase
-echo "Stopping HBase..."
-if [ -n "$PIO_STORAGE_SOURCES_HBASE_HOME" ]; then
-  $PIO_STORAGE_SOURCES_HBASE_HOME/bin/stop-hbase.sh
+if [ `echo $SOURCE_TYPE | grep -i hbase | wc -l` != 0 ] ; then
+  echo "Stopping HBase..."
+  if [ -n "$PIO_STORAGE_SOURCES_HBASE_HOME" ]; then
+    $PIO_STORAGE_SOURCES_HBASE_HOME/bin/stop-hbase.sh
+  fi
 fi
 
 # Elasticsearch
-echo "Stopping Elasticsearch..."
-PIDFILE=${PIO_HOME}/es.pid
-if [ -e ${PIDFILE} ]; then
-  cat ${PIDFILE} | xargs kill
-  rm ${PIDFILE}
+if [ `echo $SOURCE_TYPE | grep -i elasticsearch | wc -l` != 0 ] ; then
+  echo "Stopping Elasticsearch..."
+  PIDFILE=${PIO_HOME}/es.pid
+  if [ -e ${PIDFILE} ]; then
+    cat ${PIDFILE} | xargs kill
+    rm ${PIDFILE}
+  fi
 fi
 
 #PGSQL
-OS=`uname`
-if [[ "$OS" = "Darwin" ]]; then
-  pg_cmd=`which pg_ctl`
-  if [[ "$pg_cmd" != "" ]]; then
-    pg_ctl -D /usr/local/var/postgres stop -s -m fast
+if [ `echo $SOURCE_TYPE | grep -i pgsql | wc -l` != 0 ] ; then
+  if [ -n "$PIO_STORAGE_SOURCES_PGSQL_TYPE" ]; then
+    OS=`uname`
+    if [[ "$OS" = "Darwin" ]]; then
+      pg_cmd=`which pg_ctl`
+      if [[ "$pg_cmd" != "" ]]; then
+        pg_ctl -D /usr/local/var/postgres stop -s -m fast
+      fi
+    elif [[ "$OS" = "Linux" ]]; then
+      sudo service postgresql stop
+    else
+      echo -e "\033[1;31mYour OS $OS is not yet supported for automatic postgresql startup:(\033[0m"
+      echo -e "\033[1;31mPlease do a manual shutdown!\033[0m"
+      exit 1
+    fi
   fi
-elif [[ "$OS" = "Linux" ]]; then
-  sudo service postgresql stop
-else
-  echo -e "\033[1;31mYour OS $OS is not yet supported for automatic postgresql startup:(\033[0m"
-  echo -e "\033[1;31mPlease do a manual shutdown!\033[0m"
-  exit 1
 fi

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 6c4cb7c..06030cb 100644
--- a/build.sbt
+++ b/build.sbt
@@ -185,6 +185,9 @@ val storage = (project in file("storage"))
   .aggregate(storageSubprojects map Project.projectToRef: _*)
   .disablePlugins(sbtassembly.AssemblyPlugin)
 
+val assembly = (project in file("assembly")).
+  settings(commonSettings: _*)
+
 val root = (project in file(".")).
   settings(commonSettings: _*).
   enablePlugins(ScalaUnidocPlugin).

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/conf/log4j.properties
----------------------------------------------------------------------
diff --git a/conf/log4j.properties b/conf/log4j.properties
index a9e9d8e..77a7c60 100644
--- a/conf/log4j.properties
+++ b/conf/log4j.properties
@@ -25,7 +25,7 @@ log4j.appender.console.layout.ConversionPattern=[%p] [%c{1}] %m%n%throwable{0}
 
 # file appender
 log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=./pio.log
+log4j.appender.file.File=${pio.log.dir}/pio.log
 log4j.appender.file.layout=org.apache.log4j.EnhancedPatternLayout
 log4j.appender.file.layout.ConversionPattern=%d %-5p %c [%t] - %m%n
 

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/make-distribution.sh
----------------------------------------------------------------------
diff --git a/make-distribution.sh b/make-distribution.sh
index e92178f..03c15e8 100755
--- a/make-distribution.sh
+++ b/make-distribution.sh
@@ -24,6 +24,9 @@ usage ()
     echo "Usage: $0 [-h|--help]"
     echo ""
     echo "  -h|--help    Show usage"
+    echo ""
+    echo "  --with-rpm   Build distribution for RPM package"
+    echo "  --with-deb   Build distribution for DEB package"
 }
 
 JAVA_PROPS=()
@@ -40,6 +43,14 @@ case $i in
     JAVA_PROPS+=("$i")
     shift
     ;;
+    --with-rpm)
+    RPM_BUILD=true
+    shift
+    ;;
+    --with-deb)
+    DEB_BUILD=true
+    shift
+    ;;
     *)
     usage
     exit 1
@@ -59,6 +70,13 @@ set -x
 sbt/sbt "${JAVA_PROPS[@]}" clean
 sbt/sbt "${JAVA_PROPS[@]}" printBuildInfo
 sbt/sbt "${JAVA_PROPS[@]}" publishLocal assembly storage/assembly
+sbt/sbt "${JAVA_PROPS[@]}" assembly/clean assembly/universal:packageBin assembly/universal:packageZipTarball
+if [ x$RPM_BUILD = "xtrue" ] ; then
+    sbt/sbt "${JAVA_PROPS[@]}" assembly/rpm:packageBin
+fi
+if [ x$DEB_BUILD = "xtrue" ] ; then
+    sbt/sbt "${JAVA_PROPS[@]}" assembly/debian:packageBin
+fi
 set +x
 
 cd ${FWDIR}
@@ -75,8 +93,8 @@ cp ${FWDIR}/bin/* ${DISTDIR}/bin || :
 cp ${FWDIR}/conf/* ${DISTDIR}/conf
 cp ${FWDIR}/project/build.properties ${DISTDIR}/project
 cp ${FWDIR}/sbt/sbt ${DISTDIR}/sbt
-cp ${FWDIR}/assembly/*assembly*jar ${DISTDIR}/lib
-cp ${FWDIR}/assembly/spark/*jar ${DISTDIR}/lib/spark
+cp ${FWDIR}/assembly/src/universal/lib/*assembly*jar ${DISTDIR}/lib
+cp ${FWDIR}/assembly/src/universal/lib/spark/*jar ${DISTDIR}/lib/spark
 
 rm -f ${DISTDIR}/lib/*javadoc.jar
 rm -f ${DISTDIR}/lib/*sources.jar

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/project/plugins.sbt
----------------------------------------------------------------------
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 2f21e00..f13cafd 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -11,3 +11,5 @@ addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "0.8.0")
 resolvers += "sonatype-releases" at "https://oss.sonatype.org/content/repositories/releases/"
 
 addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.3.5")
+
+addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.2.0-M8")

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/storage/elasticsearch/build.sbt
----------------------------------------------------------------------
diff --git a/storage/elasticsearch/build.sbt b/storage/elasticsearch/build.sbt
index 091b354..50292c5 100644
--- a/storage/elasticsearch/build.sbt
+++ b/storage/elasticsearch/build.sbt
@@ -44,4 +44,5 @@ assemblyShadeRules in assembly := Seq(
 test in assembly := {}
 
 assemblyOutputPath in assembly := baseDirectory.value.getAbsoluteFile.getParentFile.getParentFile /
-  "assembly" / "spark" / s"pio-data-elasticsearch-assembly-${version.value}.jar"
+  "assembly" / "src" / "universal" / "lib" / "spark" /
+  s"pio-data-elasticsearch-assembly-${version.value}.jar"

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/storage/elasticsearch1/build.sbt
----------------------------------------------------------------------
diff --git a/storage/elasticsearch1/build.sbt b/storage/elasticsearch1/build.sbt
index 6ed4df0..5e72f91 100644
--- a/storage/elasticsearch1/build.sbt
+++ b/storage/elasticsearch1/build.sbt
@@ -34,4 +34,5 @@ assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeSca
 test in assembly := {}
 
 assemblyOutputPath in assembly := baseDirectory.value.getAbsoluteFile.getParentFile.getParentFile /
-  "assembly" / "spark" / s"pio-data-elasticsearch1-assembly-${version.value}.jar"
+  "assembly" / "src" / "universal" / "lib" / "spark" /
+  s"pio-data-elasticsearch1-assembly-${version.value}.jar"

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/storage/hbase/build.sbt
----------------------------------------------------------------------
diff --git a/storage/hbase/build.sbt b/storage/hbase/build.sbt
index c33db2d..1e904fa 100644
--- a/storage/hbase/build.sbt
+++ b/storage/hbase/build.sbt
@@ -45,4 +45,5 @@ assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeSca
 test in assembly := {}
 
 assemblyOutputPath in assembly := baseDirectory.value.getAbsoluteFile.getParentFile.getParentFile /
-  "assembly" / "spark" / s"pio-data-hbase-assembly-${version.value}.jar"
+  "assembly" / "src" / "universal" / "lib" / "spark" /
+  s"pio-data-hbase-assembly-${version.value}.jar"

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/storage/hdfs/build.sbt
----------------------------------------------------------------------
diff --git a/storage/hdfs/build.sbt b/storage/hdfs/build.sbt
index f8a2bd5..26a3122 100644
--- a/storage/hdfs/build.sbt
+++ b/storage/hdfs/build.sbt
@@ -35,4 +35,5 @@ assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeSca
 test in assembly := {}
 
 assemblyOutputPath in assembly := baseDirectory.value.getAbsoluteFile.getParentFile.getParentFile /
-  "assembly" / "spark" / ("pio-data-hdfs-assembly-" + version.value + ".jar")
+  "assembly" / "src" / "universal" / "lib" / "spark" /
+  ("pio-data-hdfs-assembly-" + version.value + ".jar")

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/storage/jdbc/build.sbt
----------------------------------------------------------------------
diff --git a/storage/jdbc/build.sbt b/storage/jdbc/build.sbt
index 3c5026a..c5bcb12 100644
--- a/storage/jdbc/build.sbt
+++ b/storage/jdbc/build.sbt
@@ -36,4 +36,5 @@ assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeSca
 test in assembly := {}
 
 assemblyOutputPath in assembly := baseDirectory.value.getAbsoluteFile.getParentFile.getParentFile /
-  "assembly" / "spark" / s"pio-data-jdbc-assembly-${version.value}.jar"
+  "assembly" / "src" / "universal" / "lib" / "spark" /
+  s"pio-data-jdbc-assembly-${version.value}.jar"

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/storage/localfs/build.sbt
----------------------------------------------------------------------
diff --git a/storage/localfs/build.sbt b/storage/localfs/build.sbt
index 3413e97..2306d24 100644
--- a/storage/localfs/build.sbt
+++ b/storage/localfs/build.sbt
@@ -33,4 +33,5 @@ assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeSca
 test in assembly := {}
 
 assemblyOutputPath in assembly := baseDirectory.value.getAbsoluteFile.getParentFile.getParentFile /
-  "assembly" / "spark" / s"pio-data-localfs-assembly-${version.value}.jar"
+  "assembly" / "src" / "universal" / "lib" / "spark" /
+  s"pio-data-localfs-assembly-${version.value}.jar"

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/tests/build_docker.sh
----------------------------------------------------------------------
diff --git a/tests/build_docker.sh b/tests/build_docker.sh
index 27fb744..d467e97 100755
--- a/tests/build_docker.sh
+++ b/tests/build_docker.sh
@@ -38,8 +38,7 @@ fi
     -Dhadoop.version=$PIO_HADOOP_VERSION \
     -Delasticsearch.version=$PIO_ELASTICSEARCH_VERSION
 sbt/sbt clean storage/clean
-rm -rf assembly
-mkdir assembly
+rm -rf assembly/*.jar
 cp dist/lib/*.jar assembly/
 rm -rf lib/spark
 mkdir -p lib/spark

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/tools/build.sbt
----------------------------------------------------------------------
diff --git a/tools/build.sbt b/tools/build.sbt
index 23bb71a..86c4b6d 100644
--- a/tools/build.sbt
+++ b/tools/build.sbt
@@ -53,8 +53,9 @@ assemblyShadeRules in assembly := Seq(
 test in assembly := {}
 
 assemblyOutputPath in assembly := baseDirectory.value.getAbsoluteFile.getParentFile /
-  "assembly" / s"pio-assembly-${version.value}.jar"
+  "assembly" / "src" / "universal" / "lib" / s"pio-assembly-${version.value}.jar"
 
-cleanFiles <+= baseDirectory { base => base.getParentFile / "assembly" }
+cleanFiles <+= baseDirectory { base => base.getParentFile /
+  "assembly" / "src" / "universal" / "lib" }
 
 pomExtra := childrenPomExtra.value

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/tools/src/main/scala/org/apache/predictionio/tools/Runner.scala
----------------------------------------------------------------------
diff --git a/tools/src/main/scala/org/apache/predictionio/tools/Runner.scala b/tools/src/main/scala/org/apache/predictionio/tools/Runner.scala
index 662dbbf..70e3837 100644
--- a/tools/src/main/scala/org/apache/predictionio/tools/Runner.scala
+++ b/tools/src/main/scala/org/apache/predictionio/tools/Runner.scala
@@ -189,6 +189,7 @@ object Runner extends EitherLogging {
     }
 
     val verboseArg = if (verbose) Seq("--verbose") else Nil
+    val pioLogDir = Option(System.getProperty("pio.log.dir")).getOrElse(s"${pioHome}/log")
 
     val sparkSubmit = Seq(
       sparkSubmitCommand,
@@ -198,6 +199,7 @@ object Runner extends EitherLogging {
       sparkSubmitFiles,
       sparkSubmitExtraClasspaths,
       sparkSubmitKryo,
+      Seq("--driver-java-options", s"-Dpio.log.dir=${pioLogDir}"),
       Seq(mainJar),
       detectFilePaths(fs, sa.scratchUri, classArgs),
       Seq("--env", pioEnvVars),

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/d0d2570b/tools/src/main/scala/org/apache/predictionio/tools/commands/Engine.scala
----------------------------------------------------------------------
diff --git a/tools/src/main/scala/org/apache/predictionio/tools/commands/Engine.scala b/tools/src/main/scala/org/apache/predictionio/tools/commands/Engine.scala
index 3924117..e49c3fc 100644
--- a/tools/src/main/scala/org/apache/predictionio/tools/commands/Engine.scala
+++ b/tools/src/main/scala/org/apache/predictionio/tools/commands/Engine.scala
@@ -294,6 +294,7 @@ object Engine extends EitherLogging {
     val jarPluginFiles = jarFilesForSpark(pioHome)
     jarPluginFiles foreach { f => info(s"Found JAR: ${f.getName}") }
     val allJarFiles = jarFiles.map(_.getCanonicalPath) ++ jarPluginFiles.map(_.getCanonicalPath)
+    val pioLogDir = Option(System.getProperty("pio.log.dir")).getOrElse(s"${pioHome}/log")
 
     val cmd = s"${getSparkHome(sparkArgs.sparkHome)}/bin/spark-submit --jars " +
       s"${allJarFiles.mkString(",")} " +
@@ -302,6 +303,7 @@ object Engine extends EitherLogging {
       } else {
         ""
       }) +
+      "--driver-java-options -Dpio.log.dir=${pioLogDir} " +
       "--class " +
       s"${mainClass} ${sparkArgs.sparkPassThrough.mkString(" ")} " +
       coreAssembly(pioHome) + " " +



[2/2] incubator-predictionio git commit: Update release notes and publish storage JARs

Posted by do...@apache.org.
Update release notes and publish storage JARs


Project: http://git-wip-us.apache.org/repos/asf/incubator-predictionio/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-predictionio/commit/f8795ca4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-predictionio/tree/f8795ca4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-predictionio/diff/f8795ca4

Branch: refs/heads/develop
Commit: f8795ca499a2331302a0904e01c87d9e00944798
Parents: d0d2570
Author: Donald Szeto <do...@apache.org>
Authored: Thu Mar 30 15:24:34 2017 -0700
Committer: Donald Szeto <do...@apache.org>
Committed: Thu Mar 30 15:24:34 2017 -0700

----------------------------------------------------------------------
 RELEASE.md           |  5 ++++-
 build.sbt            | 19 +++++++------------
 make-distribution.sh |  2 +-
 3 files changed, 12 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/f8795ca4/RELEASE.md
----------------------------------------------------------------------
diff --git a/RELEASE.md b/RELEASE.md
index 3cc9259..db3549b 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -44,7 +44,10 @@ Apr ?, 2017
   parameter if you want to run `pio build`, `pio train`, or `pio deploy` outside
   of an engine directory. This is an interim solution before an engine registry
   feature becomes available in the future.
-- PIO-54: Generated access keys will no longer start with a `-` character.
+- PIO-49: PostgreSQL JDBC driver is no longer bundled with the core assembly. If
+  you are using PostgreSQL, you must download the JDBC driver and update your
+  configuration to point to the correct JDBC driver file.
+- PIO-54: New generated access keys will no longer start with a `-` character.
 
 #### Other Changes
 

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/f8795ca4/build.sbt
----------------------------------------------------------------------
diff --git a/build.sbt b/build.sbt
index 06030cb..a0a41dd 100644
--- a/build.sbt
+++ b/build.sbt
@@ -108,32 +108,26 @@ val commonTestSettings = Seq(
 
 val dataElasticsearch1 = (project in file("storage/elasticsearch1")).
   settings(commonSettings: _*).
-  enablePlugins(GenJavadocPlugin).
-  settings(publishArtifact := false)
+  enablePlugins(GenJavadocPlugin)
 
 val dataElasticsearch = (project in file("storage/elasticsearch")).
-  settings(commonSettings: _*).
-  settings(publishArtifact := false)
+  settings(commonSettings: _*)
 
 val dataHbase = (project in file("storage/hbase")).
   settings(commonSettings: _*).
-  enablePlugins(GenJavadocPlugin).
-  settings(publishArtifact := false)
+  enablePlugins(GenJavadocPlugin)
 
 val dataHdfs = (project in file("storage/hdfs")).
   settings(commonSettings: _*).
-  enablePlugins(GenJavadocPlugin).
-  settings(publishArtifact := false)
+  enablePlugins(GenJavadocPlugin)
 
 val dataJdbc = (project in file("storage/jdbc")).
   settings(commonSettings: _*).
-  enablePlugins(GenJavadocPlugin).
-  settings(publishArtifact := false)
+  enablePlugins(GenJavadocPlugin)
 
 val dataLocalfs = (project in file("storage/localfs")).
   settings(commonSettings: _*).
-  enablePlugins(GenJavadocPlugin).
-  settings(publishArtifact := false)
+  enablePlugins(GenJavadocPlugin)
 
 val common = (project in file("common")).
   settings(commonSettings: _*).
@@ -184,6 +178,7 @@ val storageSubprojects = Seq(
 val storage = (project in file("storage"))
   .aggregate(storageSubprojects map Project.projectToRef: _*)
   .disablePlugins(sbtassembly.AssemblyPlugin)
+  .settings(publishArtifact := false)
 
 val assembly = (project in file("assembly")).
   settings(commonSettings: _*)

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/f8795ca4/make-distribution.sh
----------------------------------------------------------------------
diff --git a/make-distribution.sh b/make-distribution.sh
index 03c15e8..09025ee 100755
--- a/make-distribution.sh
+++ b/make-distribution.sh
@@ -69,7 +69,7 @@ cd ${FWDIR}
 set -x
 sbt/sbt "${JAVA_PROPS[@]}" clean
 sbt/sbt "${JAVA_PROPS[@]}" printBuildInfo
-sbt/sbt "${JAVA_PROPS[@]}" publishLocal assembly storage/assembly
+sbt/sbt "${JAVA_PROPS[@]}" publishLocal assembly storage/publishLocal storage/assembly
 sbt/sbt "${JAVA_PROPS[@]}" assembly/clean assembly/universal:packageBin assembly/universal:packageZipTarball
 if [ x$RPM_BUILD = "xtrue" ] ; then
     sbt/sbt "${JAVA_PROPS[@]}" assembly/rpm:packageBin