2018-10-24 19:56:25 +03:00
#!/bin/bash
#
2025-02-25 09:39:16 +02:00
# Copyright © 2016-2025 The Thingsboard Authors
2018-10-24 19:56:25 +03:00
#
# 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.
#
function additionalComposeArgs( ) {
source .env
ADDITIONAL_COMPOSE_ARGS = ""
case $DATABASE in
postgres)
ADDITIONAL_COMPOSE_ARGS = "-f docker-compose.postgres.yml"
; ;
2020-02-27 19:09:32 +02:00
hybrid)
ADDITIONAL_COMPOSE_ARGS = "-f docker-compose.hybrid.yml"
2018-10-24 19:56:25 +03:00
; ;
*)
2022-06-23 19:49:27 +03:00
echo " Unknown DATABASE value specified in the .env file: ' ${ DATABASE } '. Should be either 'postgres' or 'hybrid'. " >& 2
2018-10-24 19:56:25 +03:00
exit 1
esac
echo $ADDITIONAL_COMPOSE_ARGS
}
2020-05-08 18:02:45 +03:00
function additionalComposeQueueArgs( ) {
source .env
ADDITIONAL_COMPOSE_QUEUE_ARGS = ""
case $TB_QUEUE_TYPE in
kafka)
ADDITIONAL_COMPOSE_QUEUE_ARGS = "-f docker-compose.kafka.yml"
; ;
2020-08-11 11:15:41 +03:00
confluent)
ADDITIONAL_COMPOSE_QUEUE_ARGS = "-f docker-compose.confluent.yml"
; ;
2020-05-08 18:02:45 +03:00
aws-sqs)
ADDITIONAL_COMPOSE_QUEUE_ARGS = "-f docker-compose.aws-sqs.yml"
; ;
pubsub)
ADDITIONAL_COMPOSE_QUEUE_ARGS = "-f docker-compose.pubsub.yml"
; ;
rabbitmq)
ADDITIONAL_COMPOSE_QUEUE_ARGS = "-f docker-compose.rabbitmq.yml"
; ;
service-bus)
ADDITIONAL_COMPOSE_QUEUE_ARGS = "-f docker-compose.service-bus.yml"
; ;
*)
2022-06-23 19:49:27 +03:00
echo " Unknown Queue service TB_QUEUE_TYPE value specified in the .env file: ' ${ TB_QUEUE_TYPE } '. Should be either 'kafka' or 'confluent' or 'aws-sqs' or 'pubsub' or 'rabbitmq' or 'service-bus'. " >& 2
2020-05-08 18:02:45 +03:00
exit 1
esac
echo $ADDITIONAL_COMPOSE_QUEUE_ARGS
}
2021-04-28 15:13:26 +03:00
function additionalComposeMonitoringArgs( ) {
source .env
if [ " $MONITORING_ENABLED " = true ]
then
ADDITIONAL_COMPOSE_MONITORING_ARGS = "-f docker-compose.prometheus-grafana.yml"
echo $ADDITIONAL_COMPOSE_MONITORING_ARGS
else
echo ""
fi
}
2022-06-22 23:24:05 +03:00
function additionalComposeCacheArgs( ) {
source .env
CACHE_COMPOSE_ARGS = ""
CACHE = " ${ CACHE :- redis } "
case $CACHE in
redis)
CACHE_COMPOSE_ARGS = "-f docker-compose.redis.yml"
; ;
redis-cluster)
CACHE_COMPOSE_ARGS = "-f docker-compose.redis-cluster.yml"
; ;
2023-06-01 14:47:47 +03:00
redis-sentinel)
CACHE_COMPOSE_ARGS = "-f docker-compose.redis-sentinel.yml"
; ;
2022-06-22 23:24:05 +03:00
*)
2023-06-01 14:47:47 +03:00
echo " Unknown CACHE value specified in the .env file: ' ${ CACHE } '. Should be either 'redis' or 'redis-cluster' or 'redis-sentinel'. " >& 2
2022-06-22 23:24:05 +03:00
exit 1
esac
echo $CACHE_COMPOSE_ARGS
}
2018-10-24 19:56:25 +03:00
function additionalStartupServices( ) {
source .env
ADDITIONAL_STARTUP_SERVICES = ""
case $DATABASE in
postgres)
2022-06-22 23:24:05 +03:00
ADDITIONAL_STARTUP_SERVICES = " $ADDITIONAL_STARTUP_SERVICES postgres "
2018-10-24 19:56:25 +03:00
; ;
2020-02-27 19:09:32 +02:00
hybrid)
2022-06-22 23:24:05 +03:00
ADDITIONAL_STARTUP_SERVICES = " $ADDITIONAL_STARTUP_SERVICES postgres cassandra "
2018-10-24 19:56:25 +03:00
; ;
*)
2022-06-23 19:49:27 +03:00
echo " Unknown DATABASE value specified in the .env file: ' ${ DATABASE } '. Should be either 'postgres' or 'hybrid'. " >& 2
2018-10-24 19:56:25 +03:00
exit 1
esac
2022-06-22 23:24:05 +03:00
CACHE = " ${ CACHE :- redis } "
case $CACHE in
redis)
ADDITIONAL_STARTUP_SERVICES = " $ADDITIONAL_STARTUP_SERVICES redis "
; ;
redis-cluster)
ADDITIONAL_STARTUP_SERVICES = " $ADDITIONAL_STARTUP_SERVICES redis-node-0 redis-node-1 redis-node-2 redis-node-3 redis-node-4 redis-node-5 "
; ;
2023-06-01 14:47:47 +03:00
redis-sentinel)
ADDITIONAL_STARTUP_SERVICES = " $ADDITIONAL_STARTUP_SERVICES redis-master redis-slave redis-sentinel "
; ;
2022-06-22 23:24:05 +03:00
*)
2023-06-01 14:47:47 +03:00
echo " Unknown CACHE value specified in the .env file: ' ${ CACHE } '. Should be either 'redis' or 'redis-cluster' or 'redis-sentinel'. " >& 2
2022-06-22 23:24:05 +03:00
exit 1
esac
2018-10-24 19:56:25 +03:00
echo $ADDITIONAL_STARTUP_SERVICES
}
2022-06-28 18:27:48 +03:00
function permissionList( ) {
PERMISSION_LIST = "
799 799 tb-node/log
799 799 tb-transports/coap/log
799 799 tb-transports/lwm2m/log
799 799 tb-transports/http/log
799 799 tb-transports/mqtt/log
799 799 tb-transports/snmp/log
799 799 tb-transports/coap/log
799 799 tb-vc-executor/log
999 999 tb-node/postgres
"
source .env
if [ " $DATABASE " = "hybrid" ] ; then
PERMISSION_LIST = " $PERMISSION_LIST
999 999 tb-node/cassandra
"
fi
CACHE = " ${ CACHE :- redis } "
case $CACHE in
redis)
PERMISSION_LIST = " $PERMISSION_LIST
1001 1001 tb-node/redis-data
"
; ;
redis-cluster)
PERMISSION_LIST = " $PERMISSION_LIST
1001 1001 tb-node/redis-cluster-data-0
1001 1001 tb-node/redis-cluster-data-1
1001 1001 tb-node/redis-cluster-data-2
1001 1001 tb-node/redis-cluster-data-3
1001 1001 tb-node/redis-cluster-data-4
1001 1001 tb-node/redis-cluster-data-5
"
; ;
2023-06-01 14:47:47 +03:00
redis-sentinel)
PERMISSION_LIST = " $PERMISSION_LIST
1001 1001 tb-node/redis-sentinel-data-master
1001 1001 tb-node/redis-sentinel-data-slave
1001 1001 tb-node/redis-sentinel-data-sentinel
"
; ;
2022-06-28 18:27:48 +03:00
*)
2023-06-01 14:47:47 +03:00
echo " Unknown CACHE value specified in the .env file: ' ${ CACHE } '. Should be either 'redis' or 'redis-cluster' or 'redis-sentinel'. " >& 2
2022-06-28 18:27:48 +03:00
exit 1
esac
echo " $PERMISSION_LIST "
}
function checkFolders( ) {
2025-02-26 18:31:18 +02:00
CREATE = false
SKIP_CHOWN = false
for i in " $@ "
do
case $i in
--create)
CREATE = true
shift
; ;
--skipChown)
SKIP_CHOWN = true
shift
; ;
*)
# unknown option
; ;
esac
done
2022-06-28 18:27:48 +03:00
EXIT_CODE = 0
PERMISSION_LIST = $( permissionList) || exit $?
set -e
while read -r USR GRP DIR
do
2025-02-26 18:31:18 +02:00
IS_EXIST_CHECK_PASSED = false
IS_OWNER_CHECK_PASSED = false
# skip empty lines
if [ -z " $DIR " ] ; then
2022-06-28 18:27:48 +03:00
continue
fi
2025-02-26 18:31:18 +02:00
# checks section
echo " Checking if dir ${ DIR } exists... "
if [ [ -d " $DIR " ] ] ; then
echo "> OK"
IS_EXIST_CHECK_PASSED = true
if [ " $SKIP_CHOWN " = false ] ; then
echo " Checking user ${ USR } group ${ GRP } ownership for dir ${ DIR } ... "
if [ [ $( ls -ldn " $DIR " | awk '{print $3}' ) -eq " $USR " ] ] && [ [ $( ls -ldn " $DIR " | awk '{print $4}' ) -eq " $GRP " ] ] ; then
echo "> OK"
IS_OWNER_CHECK_PASSED = true
else
echo "...ownership check failed"
if [ " $CREATE " = false ] ; then
EXIT_CODE = 1
fi
fi
fi
2022-06-28 18:27:48 +03:00
else
2025-02-26 18:31:18 +02:00
echo "...does not exist"
if [ " $CREATE " = false ] ; then
2022-06-28 18:27:48 +03:00
EXIT_CODE = 1
fi
fi
2025-02-26 18:31:18 +02:00
# create/chown section
if [ " $CREATE " = true ] ; then
if [ " $IS_EXIST_CHECK_PASSED " = false ] ; then
echo " ...will create dir ${ DIR } "
if [ " $SKIP_CHOWN " = false ] ; then
echo " ...will change ownership to user ${ USR } group ${ GRP } for dir ${ DIR } "
mkdir -p " $DIR " && sudo chown -R " $USR " :" $GRP " " $DIR " && echo "> OK"
else
mkdir -p " $DIR " && echo "> OK"
fi
elif [ " $IS_OWNER_CHECK_PASSED " = false ] && [ " $SKIP_CHOWN " = false ] ; then
echo " ...will change ownership to user ${ USR } group ${ GRP } for dir ${ DIR } "
sudo chown -R " $USR " :" $GRP " " $DIR " && echo "> OK"
fi
fi
2022-06-28 18:27:48 +03:00
done < <( echo " $PERMISSION_LIST " )
return $EXIT_CODE
}
2022-11-28 17:41:27 +02:00
function composeVersion( ) {
#Checking whether "set -e" shell option should be restored after Compose version check
FLAG_SET = false
if [ [ $SHELLOPTS = ~ errexit ] ] ; then
set +e
FLAG_SET = true
fi
#Checking Compose V1 availablity
docker-compose version >/dev/null 2>& 1
if [ $? -eq 0 ] ; then status_v1 = true; else status_v1 = false; fi
#Checking Compose V2 availablity
docker compose version >/dev/null 2>& 1
if [ $? -eq 0 ] ; then status_v2 = true; else status_v2 = false; fi
COMPOSE_VERSION = ""
if $status_v2 ; then
COMPOSE_VERSION = "V2"
elif $status_v1 ; then
COMPOSE_VERSION = "V1"
else
echo "Docker Compose plugin is not detected. Please check your environment." >& 2
exit 1
fi
echo $COMPOSE_VERSION
if $FLAG_SET ; then set -e; fi
}