diff --git a/msa/js-executor/docker/Dockerfile b/msa/js-executor/docker/Dockerfile
index ede28aa4f4..92b2229e79 100644
--- a/msa/js-executor/docker/Dockerfile
+++ b/msa/js-executor/docker/Dockerfile
@@ -16,13 +16,19 @@
FROM thingsboard/base
-COPY start-js-executor.sh ${pkg.name}.deb /tmp/
+ARG TARGETPLATFORM
+
+COPY start-js-executor.sh ${pkg.name}.deb ${pkg.name}-arm64.deb /tmp/
RUN chmod a+x /tmp/*.sh \
&& mv /tmp/start-js-executor.sh /usr/bin
-RUN yes | dpkg -i /tmp/${pkg.name}.deb
+RUN if [ "$TARGETPLATFORM" = "linux/arm64" ]; \
+ then yes | dpkg -i /tmp/${pkg.name}-arm64.deb; \
+ else yes | dpkg -i /tmp/${pkg.name}.deb; \
+ fi
RUN rm /tmp/${pkg.name}.deb
+RUN rm /tmp/${pkg.name}-arm64.deb
RUN systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || :
diff --git a/msa/js-executor/install.js b/msa/js-executor/install.js
index d180a5247a..9fe911e7b2 100644
--- a/msa/js-executor/install.js
+++ b/msa/js-executor/install.js
@@ -21,10 +21,13 @@ let _projectRoot = null;
(async() => {
- await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-linux'),
+ await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-linux-x64'),
path.join(targetPackageDir('linux'), 'bin', 'tb-js-executor'),
{overwrite: true});
- await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-win.exe'),
+ await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-linux-arm64'),
+ path.join(targetPackageDir('linux'), 'bin-arm64', 'tb-js-executor'),
+ {overwrite: true});
+ await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-win-x64.exe'),
path.join(targetPackageDir('windows'), 'bin', 'tb-js-executor.exe'),
{overwrite: true});
})();
diff --git a/msa/js-executor/package.json b/msa/js-executor/package.json
index 9fe84ffa9f..0e2cee6e54 100644
--- a/msa/js-executor/package.json
+++ b/msa/js-executor/package.json
@@ -6,7 +6,7 @@
"main": "server.js",
"bin": "server.js",
"scripts": {
- "install": "pkg -t node12-linux-x64,node12-win-x64 --out-path ./target . && node install.js",
+ "install": "pkg -t node12-linux-x64,node12-linux-arm64,node12-win-x64 --out-path ./target . && node install.js",
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon server.js",
"start-prod": "NODE_ENV=production nodemon server.js"
diff --git a/msa/js-executor/pom.xml b/msa/js-executor/pom.xml
index 5cabaed58a..16f1f0293b 100644
--- a/msa/js-executor/pom.xml
+++ b/msa/js-executor/pom.xml
@@ -42,6 +42,7 @@
package
${project.build.directory}/package/linux
${project.build.directory}/package/windows
+ pre-integration-test
diff --git a/msa/pom.xml b/msa/pom.xml
index 024607378c..f5dd65b3e0 100644
--- a/msa/pom.xml
+++ b/msa/pom.xml
@@ -35,6 +35,7 @@
true
true
1.4.13
+ none
@@ -58,8 +59,67 @@
black-box-tests
+
+ push-docker-amd-arm-images
+
+
+ push-docker-amd-arm-images
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ push-latest-docker-amd-arm-images
+ ${docker.push-arm-amd-image.phase}
+
+ exec
+
+
+ docker
+ ${project.build.directory}
+
+ buildx
+ build
+ -t
+ ${docker.repo}/${docker.name}:latest
+ --platform=linux/amd64,linux/arm64
+ -o
+ type=registry
+ .
+
+
+
+
+ push-version-docker-amd-arm-images
+ ${docker.push-arm-amd-image.phase}
+
+ exec
+
+
+ docker
+ ${project.build.directory}
+
+ buildx
+ build
+ -t
+ ${docker.repo}/${docker.name}:${project.version}
+ --platform=linux/amd64,linux/arm64
+ -o
+ type=registry
+ .
+
+
+
+
+
+
+
+
-
@@ -78,5 +138,4 @@
-
diff --git a/msa/tb-node/pom.xml b/msa/tb-node/pom.xml
index 9cf97b4906..d7d1b41907 100644
--- a/msa/tb-node/pom.xml
+++ b/msa/tb-node/pom.xml
@@ -38,6 +38,7 @@
tb-node
/var/log/${pkg.name}
/usr/share/${pkg.name}
+ pre-integration-test
diff --git a/msa/tb/pom.xml b/msa/tb/pom.xml
index 841a4edbdf..df00aa3a72 100644
--- a/msa/tb/pom.xml
+++ b/msa/tb/pom.xml
@@ -355,6 +355,150 @@
+
+ push-docker-amd-arm-images
+
+
+ push-docker-amd-arm-images
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ push-latest-docker-amd-arm-tb-images
+ pre-integration-test
+
+ exec
+
+
+ docker
+ ${project.build.directory}/docker-tb
+
+ buildx
+ build
+ -t
+ ${docker.repo}/${tb.docker.name}:latest
+ --platform=linux/amd64,linux/arm64
+ -o
+ type=registry
+ .
+
+
+
+
+ push-version-docker-amd-arm-tb-images
+ pre-integration-test
+
+ exec
+
+
+ docker
+ ${project.build.directory}/docker-tb
+
+ buildx
+ build
+ -t
+ ${docker.repo}/${tb.docker.name}:${project.version}
+ --platform=linux/amd64,linux/arm64
+ -o
+ type=registry
+ .
+
+
+
+
+ push-latest-docker-amd-arm-tb-postgres-images
+ pre-integration-test
+
+ exec
+
+
+ docker
+ ${project.build.directory}/docker-postgres
+
+ buildx
+ build
+ -t
+ ${docker.repo}/${tb-postgres.docker.name}:latest
+ --platform=linux/amd64,linux/arm64
+ -o
+ type=registry
+ .
+
+
+
+
+ push-version-docker-amd-arm-tb-postgres-images
+ pre-integration-test
+
+ exec
+
+
+ docker
+ ${project.build.directory}/docker-postgres
+
+ buildx
+ build
+ -t
+ ${docker.repo}/${tb-postgres.docker.name}:${project.version}
+ --platform=linux/amd64,linux/arm64
+ -o
+ type=registry
+ .
+
+
+
+
+ push-latest-docker-amd-arm-tb-cassandra-images
+ pre-integration-test
+
+ exec
+
+
+ docker
+ ${project.build.directory}/docker-cassandra
+
+ buildx
+ build
+ -t
+ ${docker.repo}/${tb-cassandra.docker.name}:latest
+ --platform=linux/amd64,linux/arm64
+ -o
+ type=registry
+ .
+
+
+
+
+ push-version-docker-amd-arm-tb-cassandra-images
+ pre-integration-test
+
+ exec
+
+
+ docker
+ ${project.build.directory}/docker-cassandra
+
+ buildx
+ build
+ -t
+ ${docker.repo}/${tb-cassandra.docker.name}:${project.version}
+ --platform=linux/amd64,linux/arm64
+ -o
+ type=registry
+ .
+
+
+
+
+
+
+
+
diff --git a/msa/transport/coap/pom.xml b/msa/transport/coap/pom.xml
index 34b37c6334..155ceb3af8 100644
--- a/msa/transport/coap/pom.xml
+++ b/msa/transport/coap/pom.xml
@@ -38,6 +38,7 @@
tb-coap-transport
/var/log/${pkg.name}
/usr/share/${pkg.name}
+ pre-integration-test
diff --git a/msa/transport/http/pom.xml b/msa/transport/http/pom.xml
index 0cc5320250..9af7cc5907 100644
--- a/msa/transport/http/pom.xml
+++ b/msa/transport/http/pom.xml
@@ -38,6 +38,7 @@
tb-http-transport
/var/log/${pkg.name}
/usr/share/${pkg.name}
+ pre-integration-test
diff --git a/msa/transport/lwm2m/pom.xml b/msa/transport/lwm2m/pom.xml
index 2dd44c4386..a1c3689af5 100644
--- a/msa/transport/lwm2m/pom.xml
+++ b/msa/transport/lwm2m/pom.xml
@@ -38,6 +38,7 @@
tb-lwm2m-transport
/var/log/${pkg.name}
/usr/share/${pkg.name}
+ pre-integration-test
diff --git a/msa/transport/mqtt/pom.xml b/msa/transport/mqtt/pom.xml
index d483ef42eb..97f6cc4e62 100644
--- a/msa/transport/mqtt/pom.xml
+++ b/msa/transport/mqtt/pom.xml
@@ -38,6 +38,7 @@
tb-mqtt-transport
/var/log/${pkg.name}
/usr/share/${pkg.name}
+ pre-integration-test
diff --git a/msa/transport/snmp/pom.xml b/msa/transport/snmp/pom.xml
index a30942fe4c..f3776fb8c3 100644
--- a/msa/transport/snmp/pom.xml
+++ b/msa/transport/snmp/pom.xml
@@ -39,6 +39,7 @@
tb-snmp-transport
/var/log/${pkg.name}
/usr/share/${pkg.name}
+ pre-integration-test
diff --git a/msa/web-ui/docker/Dockerfile b/msa/web-ui/docker/Dockerfile
index 90fbb8d34e..5b4acf9eb3 100644
--- a/msa/web-ui/docker/Dockerfile
+++ b/msa/web-ui/docker/Dockerfile
@@ -16,13 +16,19 @@
FROM thingsboard/base
-COPY start-web-ui.sh ${pkg.name}.deb /tmp/
+ARG TARGETPLATFORM
+
+COPY start-web-ui.sh ${pkg.name}.deb ${pkg.name}-arm64.deb /tmp/
RUN chmod a+x /tmp/*.sh \
&& mv /tmp/start-web-ui.sh /usr/bin
-RUN yes | dpkg -i /tmp/${pkg.name}.deb
+RUN if [ "$TARGETPLATFORM" = "linux/arm64" ]; \
+ then yes | dpkg -i /tmp/${pkg.name}-arm64.deb; \
+ else yes | dpkg -i /tmp/${pkg.name}.deb; \
+ fi
RUN rm /tmp/${pkg.name}.deb
+RUN rm /tmp/${pkg.name}-arm64.deb
RUN systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || :
diff --git a/msa/web-ui/install.js b/msa/web-ui/install.js
index 36b2311bb0..f0021d64f7 100644
--- a/msa/web-ui/install.js
+++ b/msa/web-ui/install.js
@@ -21,10 +21,13 @@ let _projectRoot = null;
(async() => {
- await fse.move(path.join(projectRoot(), 'target', 'thingsboard-web-ui-linux'),
+ await fse.move(path.join(projectRoot(), 'target', 'thingsboard-web-ui-linux-x64'),
path.join(targetPackageDir('linux'), 'bin', 'tb-web-ui'),
{overwrite: true});
- await fse.move(path.join(projectRoot(), 'target', 'thingsboard-web-ui-win.exe'),
+ await fse.move(path.join(projectRoot(), 'target', 'thingsboard-web-ui-linux-arm64'),
+ path.join(targetPackageDir('linux'), 'bin-arm64', 'tb-web-ui'),
+ {overwrite: true});
+ await fse.move(path.join(projectRoot(), 'target', 'thingsboard-web-ui-win-x64.exe'),
path.join(targetPackageDir('windows'), 'bin', 'tb-web-ui.exe'),
{overwrite: true});
})();
diff --git a/msa/web-ui/package.json b/msa/web-ui/package.json
index cc98e5f457..9e2075010a 100644
--- a/msa/web-ui/package.json
+++ b/msa/web-ui/package.json
@@ -6,7 +6,7 @@
"main": "server.js",
"bin": "server.js",
"scripts": {
- "install": "pkg -t node12-linux-x64,node12-win-x64 --out-path ./target . && node install.js",
+ "install": "pkg -t node12-linux-x64,node12-linux-arm64,node12-win-x64 --out-path ./target . && node install.js",
"test": "echo \"Error: no test specified\" && exit 1",
"start": "WEB_FOLDER=./target/web nodemon server.js",
"start-prod": "NODE_ENV=production nodemon server.js"
diff --git a/msa/web-ui/pom.xml b/msa/web-ui/pom.xml
index 2b973afaba..bf311df492 100644
--- a/msa/web-ui/pom.xml
+++ b/msa/web-ui/pom.xml
@@ -44,6 +44,7 @@
package
${project.build.directory}/package/linux
${project.build.directory}/package/windows
+ pre-integration-test
diff --git a/packaging/js/build.gradle b/packaging/js/build.gradle
index 929b7ed9d7..df9d86dde7 100644
--- a/packaging/js/build.gradle
+++ b/packaging/js/build.gradle
@@ -36,12 +36,6 @@ ospackage {
user pkgUser
permissionGroup pkgUser
- // Copy the executable file
- from("${buildDir}/package/linux/bin/${pkgName}") {
- fileMode 0500
- into "bin"
- }
-
// Copy the init file
from("${buildDir}/package/linux/init/template") {
fileMode 0500
@@ -78,9 +72,17 @@ buildRpm {
preUninstall file("${buildDir}/control/rpm/prerm")
postUninstall file("${buildDir}/control/rpm/postrm")
+ into pkgInstallFolder
+
user pkgUser
permissionGroup pkgUser
+ // Copy the executable file
+ from("${buildDir}/package/linux/bin/${pkgName}") {
+ fileMode 0500
+ into "bin"
+ }
+
// Copy the system unit files
from("${buildDir}/control/template.service") {
addParentDirs = false
@@ -111,9 +113,17 @@ buildDeb {
preUninstall file("${buildDir}/control/deb/prerm")
postUninstall file("${buildDir}/control/deb/postrm")
+ into pkgInstallFolder
+
user pkgUser
permissionGroup pkgUser
+ // Copy the executable file
+ from("${buildDir}/package/linux/bin/${pkgName}") {
+ fileMode 0500
+ into "bin"
+ }
+
// Copy the system unit files
from("${buildDir}/control/template.service") {
addParentDirs = false
@@ -126,3 +136,46 @@ buildDeb {
link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf")
}
+
+// Same as the buildRpm task
+task buildDebArm64(type: Deb) {
+
+ arch = "arm64"
+
+ archiveFileName = "${pkgName}-arm64.deb"
+
+ configurationFile("${pkgInstallFolder}/conf/${pkgName}.conf")
+ configurationFile("${pkgInstallFolder}/conf/custom-environment-variables.yml")
+ configurationFile("${pkgInstallFolder}/conf/default.yml")
+ configurationFile("${pkgInstallFolder}/conf/logger.js")
+
+ preInstall file("${buildDir}/control/deb/preinst")
+ postInstall file("${buildDir}/control/deb/postinst")
+ preUninstall file("${buildDir}/control/deb/prerm")
+ postUninstall file("${buildDir}/control/deb/postrm")
+
+ into pkgInstallFolder
+
+ user pkgUser
+ permissionGroup pkgUser
+
+ // Copy the executable file
+ from("${buildDir}/package/linux/bin-arm64/${pkgName}") {
+ fileMode 0500
+ into "bin"
+ }
+
+ // Copy the system unit files
+ from("${buildDir}/control/template.service") {
+ addParentDirs = false
+ fileMode 0644
+ into "/lib/systemd/system"
+ rename { String filename ->
+ "${pkgName}.service"
+ }
+ }
+
+ link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf")
+}
+
+buildDeb.finalizedBy buildDebArm64
diff --git a/pom.xml b/pom.xml
index 8730be5bee..af4180baab 100755
--- a/pom.xml
+++ b/pom.xml
@@ -684,6 +684,11 @@
maven-deploy-plugin
3.0.0-M1
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.0.0
+
org.apache.maven.plugins
maven-dependency-plugin