From 6d7aaaedee6c65d790a94987eeb1b00d346cb332 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Fri, 28 Feb 2020 00:44:30 +0100 Subject: [PATCH] :sparkles: Automatically use and discovery MySQL service --- traccar/Dockerfile | 2 + traccar/config.json | 1 + traccar/rootfs/etc/cont-init.d/mysql.sh | 53 +++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 traccar/rootfs/etc/cont-init.d/mysql.sh diff --git a/traccar/Dockerfile b/traccar/Dockerfile index 42d6c9b..3fe1bcb 100755 --- a/traccar/Dockerfile +++ b/traccar/Dockerfile @@ -14,9 +14,11 @@ WORKDIR /opt/traccar # Setup base RUN \ apk add --no-cache \ + mariadb-client=10.4.12-r0 \ nginx=1.16.1-r6 \ nss=3.48-r0 \ openjdk8-jre=8.242.08-r0 \ + xmlstarlet=1.6.1-r0 \ \ && curl -J -L -o /tmp/traccar.zip \ "https://github.com/traccar/traccar/releases/download/v4.8/traccar-other-4.8.zip" \ diff --git a/traccar/config.json b/traccar/config.json index 01a394f..3fa8452 100755 --- a/traccar/config.json +++ b/traccar/config.json @@ -21,6 +21,7 @@ "80/tcp": "Web interface (Not required for Ingress)" }, "map": ["config:rw", "ssl"], + "services": ["mysql:want"], "options": { "ssl": true, "certfile": "fullchain.pem", diff --git a/traccar/rootfs/etc/cont-init.d/mysql.sh b/traccar/rootfs/etc/cont-init.d/mysql.sh new file mode 100644 index 0000000..3bbf843 --- /dev/null +++ b/traccar/rootfs/etc/cont-init.d/mysql.sh @@ -0,0 +1,53 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Home Assistant Community Add-on: Traccar +# Pre-configures the MySQL clients, if the service is available +# ============================================================================== +readonly CONFIG="/etc/traccar/hassio.xml" +declare host +declare password +declare port +declare username +declare url + +if bashio::services.available "mysql"; then + host=$(bashio::services "mysql" "host") + password=$(bashio::services "mysql" "password") + port=$(bashio::services "mysql" "port") + username=$(bashio::services "mysql" "username") + + # Create database if not exists + echo "CREATE DATABASE IF NOT EXISTS traccar;" \ + | mysql -h "${host}" -P "${port}" -u "${username}" -p"${password}" + + # Update Traccar XML configuration for database + xmlstarlet ed -L -s /properties \ + -t elem -n entry_placeholder -v "com.mysql.jdbc.Driver" \ + -i //entry_placeholder -t attr -n "key" -v "database.driver" \ + -r //entry_placeholder -v entry \ + "${CONFIG}" + + url="jdbc:mysql://${host}:${port}/traccar?serverTimezone=UTC&useSSL=false&allowMultiQueries=true&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&sessionVariables=sql_mode=''" + xmlstarlet ed -L -s /properties \ + -t elem -n entry_placeholder -v "${url}" \ + -i //entry_placeholder -t attr -n "key" -v "database.url" \ + -r //entry_placeholder -v entry \ + "${CONFIG}" + + xmlstarlet ed -L -s /properties \ + -t elem -n entry_placeholder -v "${username}" \ + -i //entry_placeholder -t attr -n "key" -v "database.user" \ + -r //entry_placeholder -v entry \ + "${CONFIG}" + + xmlstarlet ed -L -s /properties \ + -t elem -n entry_placeholder -v "${password}" \ + -i //entry_placeholder -t attr -n "key" -v "database.password" \ + -r //entry_placeholder -v entry \ + "${CONFIG}" +else + bashio::log.warning "Traccar is using the internal H2 default database!" + bashio::log.warning "THIS IS NOT RECOMMENDED!!!" + bashio::log.warning "Please install the official MariaDB add-on, to ensure" + bashio::log.warning "you are using a solid database for Traccar." +fi