diff --git a/application/build.gradle b/application/build.gradle
index 25ad51d129..1d8a526fd1 100644
--- a/application/build.gradle
+++ b/application/build.gradle
@@ -57,6 +57,21 @@ ospackage {
into "bin"
}
+ // Copy the install files
+ from("target/bin/install/install.sh") {
+ fileMode 0775
+ into "bin/install"
+ }
+
+ from("target/bin/install/upgrade.sh") {
+ fileMode 0775
+ into "bin/install"
+ }
+
+ from("target/bin/install/logback.xml") {
+ into "bin/install"
+ }
+
// Copy the config files
from("target/conf") {
exclude "${pkgName}.conf"
diff --git a/application/pom.xml b/application/pom.xml
index 7465109feb..4241b66634 100644
--- a/application/pom.xml
+++ b/application/pom.xml
@@ -375,6 +375,29 @@
+
+ copy-install
+ process-resources
+
+ copy-resources
+
+
+ ${project.build.directory}/bin/install
+
+
+ src/main/scripts/install
+
+ **/*.sh
+ **/*.xml
+
+ true
+
+
+
+ src/main/filters/unix.properties
+
+
+
copy-windows-control
process-resources
@@ -395,7 +418,7 @@
- copy-data-cql
+ copy-data
process-resources
copy-resources
@@ -403,10 +426,14 @@
${project.build.directory}/data
+
+ src/main/data
+
../dao/src/main/resources
**/*.cql
+ **/*.sql
false
diff --git a/application/src/main/data/upgrade/1.3.0/schema_update.cql b/application/src/main/data/upgrade/1.3.0/schema_update.cql
index 4e595772a2..40706142e5 100644
--- a/application/src/main/data/upgrade/1.3.0/schema_update.cql
+++ b/application/src/main/data/upgrade/1.3.0/schema_update.cql
@@ -1,3 +1,19 @@
+--
+-- Copyright © 2016-2017 The Thingsboard Authors
+--
+-- Licensed 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.
+--
+
DROP MATERIALIZED VIEW IF EXISTS thingsboard.device_by_tenant_and_name;
DROP MATERIALIZED VIEW IF EXISTS thingsboard.device_by_tenant_and_search_text;
DROP MATERIALIZED VIEW IF EXISTS thingsboard.device_by_tenant_by_type_and_search_text;
diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
index 52d59985fa..61b3e8a8e3 100644
--- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
+++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
@@ -39,7 +39,7 @@ public class ThingsboardInstallService {
@Value("${install.upgrade:false}")
private Boolean isUpgrade;
- @Value("${install.upgrade.form_version:1.2.3}")
+ @Value("${install.upgrade.from_version:1.2.3}")
private String upgradeFromVersion;
@Value("${install.data_dir}")
diff --git a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java
index ea18b9280d..eaef0e4d15 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java
@@ -35,6 +35,7 @@ import java.util.List;
@Slf4j
public class CassandraDatabaseSchemaService implements DatabaseSchemaService {
+ private static final String CASSANDRA_DIR = "cassandra";
private static final String SCHEMA_CQL = "schema.cql";
@Value("${install.data_dir}")
@@ -47,7 +48,7 @@ public class CassandraDatabaseSchemaService implements DatabaseSchemaService {
public void createDatabaseSchema() throws Exception {
log.info("Installing Cassandra DataBase schema...");
- Path schemaFile = Paths.get(this.dataDir, SCHEMA_CQL);
+ Path schemaFile = Paths.get(this.dataDir, CASSANDRA_DIR, SCHEMA_CQL);
loadCql(schemaFile);
}
diff --git a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java
index fc92de81ea..9d22776996 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java
@@ -22,20 +22,44 @@ import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import org.thingsboard.server.dao.util.SqlDao;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.sql.Connection;
+import java.sql.DriverManager;
+
@Service
@Profile("install")
@Slf4j
@SqlDao
public class SqlDatabaseSchemaService implements DatabaseSchemaService {
+ private static final String SQL_DIR = "sql";
+ private static final String SCHEMA_SQL = "schema.sql";
+
@Value("${install.data_dir}")
private String dataDir;
+ @Value("${spring.datasource.url}")
+ private String dbUrl;
+
+ @Value("${spring.datasource.username}")
+ private String dbUserName;
+
+ @Value("${spring.datasource.password}")
+ private String dbPassword;
+
@Override
public void createDatabaseSchema() throws Exception {
log.info("Installing SQL DataBase schema...");
- //TODO:
+
+ Path schemaFile = Paths.get(this.dataDir, SQL_DIR, SCHEMA_SQL);
+ try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) {
+ String sql = new String(Files.readAllBytes(schemaFile), Charset.forName("UTF-8"));
+ conn.createStatement().execute(sql);
+ }
}
diff --git a/application/src/main/scripts/install/install.sh b/application/src/main/scripts/install/install.sh
new file mode 100755
index 0000000000..be96363742
--- /dev/null
+++ b/application/src/main/scripts/install/install.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+#
+# Copyright © 2016-2017 The Thingsboard Authors
+#
+# Licensed 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.
+#
+
+while [[ $# -gt 0 ]]
+do
+key="$1"
+
+case $key in
+ --loadDemo)
+ LOAD_DEMO=true
+ shift # past argument
+ ;;
+ *)
+ # unknown option
+ ;;
+esac
+shift # past argument or value
+done
+
+if [ "$LOAD_DEMO" == "true" ]; then
+ loadDemo=true
+else
+ loadDemo=false
+fi
+
+CONF_FOLDER=${pkg.installFolder}/conf
+configfile=${pkg.name}.conf
+jarfile=${pkg.installFolder}/bin/${pkg.name}.jar
+installDir=${pkg.installFolder}/data
+
+source "${CONF_FOLDER}/${configfile}"
+
+run_user=${pkg.name}
+
+su -s /bin/sh -c "java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication \
+ -Dinstall.data_dir=${installDir} \
+ -Dinstall.load_demo=${loadDemo} \
+ -Dspring.jpa.hibernate.ddl-auto=none \
+ -Dinstall.upgrade=false \
+ -Dlogging.config=${pkg.installFolder}/bin/install/logback.xml \
+ org.springframework.boot.loader.PropertiesLauncher" "$run_user"
+
+if [ $? -ne 0 ]; then
+ echo "ThingsBoard installation failed!"
+else
+ echo "ThingsBoard installed successfully!"
+fi
+
+exit $?
diff --git a/application/src/main/scripts/install/logback.xml b/application/src/main/scripts/install/logback.xml
new file mode 100644
index 0000000000..aadd92fcc3
--- /dev/null
+++ b/application/src/main/scripts/install/logback.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+ ${pkg.logFolder}/install.log
+
+ ${pkg.logFolder}/install.%d{yyyy-MM-dd}.%i.log
+ 100MB
+ 30
+ 3GB
+
+
+ %d{ISO8601} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+ %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/application/src/main/scripts/install/upgrade.sh b/application/src/main/scripts/install/upgrade.sh
new file mode 100755
index 0000000000..b40c3bb497
--- /dev/null
+++ b/application/src/main/scripts/install/upgrade.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+#
+# Copyright © 2016-2017 The Thingsboard Authors
+#
+# Licensed 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.
+#
+
+for i in "$@"
+do
+case $i in
+ --fromVersion=*)
+ FROM_VERSION="${i#*=}"
+ shift
+ ;;
+ *)
+ # unknown option
+ ;;
+esac
+done
+
+if [[ -z "${FROM_VERSION// }" ]]; then
+ echo "--fromVersion parameter is invalid or unspecified!"
+ echo "Usage: upgrade.sh --fromVersion={VERSION}"
+ exit 1
+else
+ fromVersion="${FROM_VERSION// }"
+fi
+
+CONF_FOLDER=${pkg.installFolder}/conf
+configfile=${pkg.name}.conf
+jarfile=${pkg.installFolder}/bin/${pkg.name}.jar
+installDir=${pkg.installFolder}/data
+
+source "${CONF_FOLDER}/${configfile}"
+
+run_user=${pkg.name}
+
+su -s /bin/sh -c "java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication \
+ -Dinstall.data_dir=${installDir} \
+ -Dspring.jpa.hibernate.ddl-auto=none \
+ -Dinstall.upgrade=true \
+ -Dinstall.upgrade.from_version=${fromVersion} \
+ -Dlogging.config=${pkg.installFolder}/bin/install/logback.xml \
+ org.springframework.boot.loader.PropertiesLauncher" "$run_user"
+
+if [ $? -ne 0 ]; then
+ echo "ThingsBoard upgrade failed!"
+else
+ echo "ThingsBoard upgraded successfully!"
+fi
+
+exit $?