TB-65: Unix install/upgrade scripts.
This commit is contained in:
parent
517cf1323e
commit
f206b9f4e7
@ -57,6 +57,21 @@ ospackage {
|
|||||||
into "bin"
|
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
|
// Copy the config files
|
||||||
from("target/conf") {
|
from("target/conf") {
|
||||||
exclude "${pkgName}.conf"
|
exclude "${pkgName}.conf"
|
||||||
|
|||||||
@ -375,6 +375,29 @@
|
|||||||
</filters>
|
</filters>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>copy-install</id>
|
||||||
|
<phase>process-resources</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy-resources</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>${project.build.directory}/bin/install</outputDirectory>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/scripts/install</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.sh</include>
|
||||||
|
<include>**/*.xml</include>
|
||||||
|
</includes>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
<filters>
|
||||||
|
<filter>src/main/filters/unix.properties</filter>
|
||||||
|
</filters>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
<id>copy-windows-control</id>
|
<id>copy-windows-control</id>
|
||||||
<phase>process-resources</phase>
|
<phase>process-resources</phase>
|
||||||
@ -395,7 +418,7 @@
|
|||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
<execution>
|
<execution>
|
||||||
<id>copy-data-cql</id>
|
<id>copy-data</id>
|
||||||
<phase>process-resources</phase>
|
<phase>process-resources</phase>
|
||||||
<goals>
|
<goals>
|
||||||
<goal>copy-resources</goal>
|
<goal>copy-resources</goal>
|
||||||
@ -403,10 +426,14 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<outputDirectory>${project.build.directory}/data</outputDirectory>
|
<outputDirectory>${project.build.directory}/data</outputDirectory>
|
||||||
<resources>
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/data</directory>
|
||||||
|
</resource>
|
||||||
<resource>
|
<resource>
|
||||||
<directory>../dao/src/main/resources</directory>
|
<directory>../dao/src/main/resources</directory>
|
||||||
<includes>
|
<includes>
|
||||||
<include>**/*.cql</include>
|
<include>**/*.cql</include>
|
||||||
|
<include>**/*.sql</include>
|
||||||
</includes>
|
</includes>
|
||||||
<filtering>false</filtering>
|
<filtering>false</filtering>
|
||||||
</resource>
|
</resource>
|
||||||
|
|||||||
@ -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_name;
|
||||||
DROP MATERIALIZED VIEW IF EXISTS thingsboard.device_by_tenant_and_search_text;
|
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;
|
DROP MATERIALIZED VIEW IF EXISTS thingsboard.device_by_tenant_by_type_and_search_text;
|
||||||
|
|||||||
@ -39,7 +39,7 @@ public class ThingsboardInstallService {
|
|||||||
@Value("${install.upgrade:false}")
|
@Value("${install.upgrade:false}")
|
||||||
private Boolean isUpgrade;
|
private Boolean isUpgrade;
|
||||||
|
|
||||||
@Value("${install.upgrade.form_version:1.2.3}")
|
@Value("${install.upgrade.from_version:1.2.3}")
|
||||||
private String upgradeFromVersion;
|
private String upgradeFromVersion;
|
||||||
|
|
||||||
@Value("${install.data_dir}")
|
@Value("${install.data_dir}")
|
||||||
|
|||||||
@ -35,6 +35,7 @@ import java.util.List;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class CassandraDatabaseSchemaService implements DatabaseSchemaService {
|
public class CassandraDatabaseSchemaService implements DatabaseSchemaService {
|
||||||
|
|
||||||
|
private static final String CASSANDRA_DIR = "cassandra";
|
||||||
private static final String SCHEMA_CQL = "schema.cql";
|
private static final String SCHEMA_CQL = "schema.cql";
|
||||||
|
|
||||||
@Value("${install.data_dir}")
|
@Value("${install.data_dir}")
|
||||||
@ -47,7 +48,7 @@ public class CassandraDatabaseSchemaService implements DatabaseSchemaService {
|
|||||||
public void createDatabaseSchema() throws Exception {
|
public void createDatabaseSchema() throws Exception {
|
||||||
log.info("Installing Cassandra DataBase schema...");
|
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);
|
loadCql(schemaFile);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,20 +22,44 @@ import org.springframework.context.annotation.Profile;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.thingsboard.server.dao.util.SqlDao;
|
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
|
@Service
|
||||||
@Profile("install")
|
@Profile("install")
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@SqlDao
|
@SqlDao
|
||||||
public class SqlDatabaseSchemaService implements DatabaseSchemaService {
|
public class SqlDatabaseSchemaService implements DatabaseSchemaService {
|
||||||
|
|
||||||
|
private static final String SQL_DIR = "sql";
|
||||||
|
private static final String SCHEMA_SQL = "schema.sql";
|
||||||
|
|
||||||
@Value("${install.data_dir}")
|
@Value("${install.data_dir}")
|
||||||
private String dataDir;
|
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
|
@Override
|
||||||
public void createDatabaseSchema() throws Exception {
|
public void createDatabaseSchema() throws Exception {
|
||||||
|
|
||||||
log.info("Installing SQL DataBase schema...");
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
63
application/src/main/scripts/install/install.sh
Executable file
63
application/src/main/scripts/install/install.sh
Executable file
@ -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 $?
|
||||||
58
application/src/main/scripts/install/logback.xml
Normal file
58
application/src/main/scripts/install/logback.xml
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!--
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
-->
|
||||||
|
<!DOCTYPE configuration>
|
||||||
|
<configuration>
|
||||||
|
|
||||||
|
<appender name="fileLogAppender"
|
||||||
|
class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<file>${pkg.logFolder}/install.log</file>
|
||||||
|
<rollingPolicy
|
||||||
|
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
|
<fileNamePattern>${pkg.logFolder}/install.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||||
|
<maxFileSize>100MB</maxFileSize>
|
||||||
|
<maxHistory>30</maxHistory>
|
||||||
|
<totalSizeCap>3GB</totalSizeCap>
|
||||||
|
</rollingPolicy>
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<logger name="org.thingsboard.server.install" level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="org.thingsboard.server.service.install" level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<logger name="org.thingsboard.server" level="INFO" />
|
||||||
|
<logger name="akka" level="INFO" />
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="fileLogAppender"/>
|
||||||
|
</root>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
62
application/src/main/scripts/install/upgrade.sh
Executable file
62
application/src/main/scripts/install/upgrade.sh
Executable file
@ -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 $?
|
||||||
Loading…
x
Reference in New Issue
Block a user