From 004a951580ea25c9d6ad498c0fa766b074895c8b Mon Sep 17 00:00:00 2001 From: pvizeli Date: Tue, 27 Jun 2017 17:59:51 +0200 Subject: [PATCH 1/5] Add mariadb addon --- mariadb/Dockerfile | 13 +++++++++++++ mariadb/config.json | 19 +++++++++++++++++++ mariadb/run.sh | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 mariadb/Dockerfile create mode 100644 mariadb/config.json create mode 100644 mariadb/run.sh diff --git a/mariadb/Dockerfile b/mariadb/Dockerfile new file mode 100644 index 0000000..712a98f --- /dev/null +++ b/mariadb/Dockerfile @@ -0,0 +1,13 @@ +FROM %%BASE_IMAGE%% + +# Add env +ENV LANG C.UTF-8 + +# Setup base +RUN apk add --no-cache jq mariadb mariadb-client + +# Copy data +COPY run.sh / +RUN chmod a+x /run.sh + +CMD [ "/run.sh" ] diff --git a/mariadb/config.json b/mariadb/config.json new file mode 100644 index 0000000..96eefb9 --- /dev/null +++ b/mariadb/config.json @@ -0,0 +1,19 @@ +{ + "name": "MariaDB", + "version": "0.1", + "slug": "mariadb", + "description": "MariaDB Server is one of the most popular database servers in the world.", + "url": "https://home-assistant.io/addons/mariadb/", + "startup": "before", + "boot": "auto", + "network": { + "tcp/3306": 3306 + }, + "options": { + "databases": ["homeassistant"] + }, + "schema": { + "databases": ["str"] + }, + "image": "homeassistant/{arch}-addon-mariadb" +} diff --git a/mariadb/run.sh b/mariadb/run.sh new file mode 100644 index 0000000..53390c0 --- /dev/null +++ b/mariadb/run.sh @@ -0,0 +1,32 @@ +#!/bin/bash +set -e + +CONFIG_PATH=/data/options.json +MARIADB_DATA=/data/databases + +DATABASES=$(jq --raw-output ".databases[]" $CONFIG_PATH) + +# Init mariadb +if [ ! -d "$MARIADB_DATA" ]; then + echo "[INFO] Create a new mariadb initial system" + mysql_install_db --user=root --datadir="$MARIADB_DATA" > /dev/null +else + echo "[INFO] Use exists mariadb initial system" +fi + +# Start mariadb +echo "[INFO] Start MariaDB" +mysqld_safe --datadir="$MARIADB_DATA" --user=root < /dev/null & +MARIADB_PID=$! + +# Wait until DB is running +while ! mysql -e 2> /dev/null; do + sleep 1 +done + +# Init databases +for line in $DATABASES; do + mysql -e "CREATE DATABASE $line;" 2> /dev/null || true +done + +wait "$MARIADB_PID" From 828f821afdc6726ad6ea440d34c6cde4a703a8ad Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 27 Jun 2017 21:44:25 +0200 Subject: [PATCH 2/5] Finish addon --- mariadb/config.json | 16 ++++++++++++++-- mariadb/run.sh | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/mariadb/config.json b/mariadb/config.json index 96eefb9..f1fa367 100644 --- a/mariadb/config.json +++ b/mariadb/config.json @@ -10,10 +10,22 @@ "tcp/3306": 3306 }, "options": { - "databases": ["homeassistant"] + "databases": ["homeassistant"], + "logins": [ + {"username": "hass", "host": "localhost", "password": null} + ], + "rights": [ + {"username": "hass", "host": "localhost", "database": "homeassistant", "grant": "ALL PRIVILEGES ON"} + ] }, "schema": { - "databases": ["str"] + "databases": ["str"], + "logins": [ + {"username": "str", "host": "str", "password": "str"} + ], + "rights": [ + {"username": "str", "host": "str", "database": "str", "grant": "str"} + ] }, "image": "homeassistant/{arch}-addon-mariadb" } diff --git a/mariadb/run.sh b/mariadb/run.sh index 53390c0..cc079f0 100644 --- a/mariadb/run.sh +++ b/mariadb/run.sh @@ -5,6 +5,8 @@ CONFIG_PATH=/data/options.json MARIADB_DATA=/data/databases DATABASES=$(jq --raw-output ".databases[]" $CONFIG_PATH) +LOGINS=$(jq --raw-output '.logins | length' $CONFIG_PATH) +RIGHTS=$(jq --raw-output '.rights | length' $CONFIG_PATH) # Init mariadb if [ ! -d "$MARIADB_DATA" ]; then @@ -20,13 +22,42 @@ mysqld_safe --datadir="$MARIADB_DATA" --user=root < /dev/null & MARIADB_PID=$! # Wait until DB is running -while ! mysql -e 2> /dev/null; do +while ! mysql -e "" 2> /dev/null; do sleep 1 done # Init databases +echo "[INFO] Init custom database" for line in $DATABASES; do + echo "[INFO] Create database $line" mysql -e "CREATE DATABASE $line;" 2> /dev/null || true done +# Init logins +echo "[INFO] Init/Update users" +for (( i=0; i < "$LOGINS"; i++ )); do + USERNAME=$(jq --raw-output ".logins[$i].username" $CONFIG_PATH) + PASSWORD=$(jq --raw-output ".logins[$i].password" $CONFIG_PATH) + HOST=$(jq --raw-output ".logins[$i].host" $CONFIG_PATH) + + if mysql -e "SET PASSWORD FOR '$USERNAME'@'$HOST' = PASSWORD('$PASSWORD');" 2>; then + echo "[INFO] Update user $USERNAME" + else + echo "[INFO] Create user $USERNAME" + mysql -e "CREATE USER '$USERNAME'@'$HOST' IDENTIFIED BY '$PASSWORD';" 2> /dev/null || true + fi +done + +# Init rights +echo "[INFO] Init/Update rights" +for (( i=0; i < "$RIGHTS"; i++ )); do + USERNAME=$(jq --raw-output ".rights[$i].username" $CONFIG_PATH) + HOST=$(jq --raw-output ".rights[$i].host" $CONFIG_PATH) + DATABASE=$(jq --raw-output ".rights[$i].database" $CONFIG_PATH) + GRANT=$(jq --raw-output ".rights[$i].grant" $CONFIG_PATH) + + echo "[INFO] Alter rights for $USERNAME@$HOST - $DATABSE" + mysql -e "GRANT $GRANT $DATABSE.* TO '$USERNAME'@'$HOST';" 2> /dev/null || true +done + wait "$MARIADB_PID" From a7fe23e3b2d0d73f432aff6f66fe35ef49b5c653 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 27 Jun 2017 22:06:27 +0200 Subject: [PATCH 3/5] fix lint --- mariadb/run.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mariadb/run.sh b/mariadb/run.sh index cc079f0..efcd1de 100644 --- a/mariadb/run.sh +++ b/mariadb/run.sh @@ -40,7 +40,7 @@ for (( i=0; i < "$LOGINS"; i++ )); do PASSWORD=$(jq --raw-output ".logins[$i].password" $CONFIG_PATH) HOST=$(jq --raw-output ".logins[$i].host" $CONFIG_PATH) - if mysql -e "SET PASSWORD FOR '$USERNAME'@'$HOST' = PASSWORD('$PASSWORD');" 2>; then + if mysql -e "SET PASSWORD FOR '$USERNAME'@'$HOST' = PASSWORD('$PASSWORD');" 2> /dev/null; then echo "[INFO] Update user $USERNAME" else echo "[INFO] Create user $USERNAME" @@ -56,8 +56,8 @@ for (( i=0; i < "$RIGHTS"; i++ )); do DATABASE=$(jq --raw-output ".rights[$i].database" $CONFIG_PATH) GRANT=$(jq --raw-output ".rights[$i].grant" $CONFIG_PATH) - echo "[INFO] Alter rights for $USERNAME@$HOST - $DATABSE" - mysql -e "GRANT $GRANT $DATABSE.* TO '$USERNAME'@'$HOST';" 2> /dev/null || true + echo "[INFO] Alter rights for $USERNAME@$HOST - $DATABASE" + mysql -e "GRANT $GRANT $DATABASE.* TO '$USERNAME'@'$HOST';" 2> /dev/null || true done wait "$MARIADB_PID" From 0a280923a3c956578fef204dd20497be4cdd74af Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 27 Jun 2017 22:26:16 +0200 Subject: [PATCH 4/5] fix config --- mariadb/config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mariadb/config.json b/mariadb/config.json index f1fa367..d5523bc 100644 --- a/mariadb/config.json +++ b/mariadb/config.json @@ -6,8 +6,8 @@ "url": "https://home-assistant.io/addons/mariadb/", "startup": "before", "boot": "auto", - "network": { - "tcp/3306": 3306 + "ports": { + "3306/tcp": 3306 }, "options": { "databases": ["homeassistant"], From ddf62eee56e5addfb744cd62844ffc239b5637d3 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 27 Jun 2017 22:51:55 +0200 Subject: [PATCH 5/5] Shutdown DB --- mariadb/run.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mariadb/run.sh b/mariadb/run.sh index efcd1de..d8dee8d 100644 --- a/mariadb/run.sh +++ b/mariadb/run.sh @@ -60,4 +60,10 @@ for (( i=0; i < "$RIGHTS"; i++ )); do mysql -e "GRANT $GRANT $DATABASE.* TO '$USERNAME'@'$HOST';" 2> /dev/null || true done +# Register stop +function stop_mariadb() { + mysqladmin shutdown +} +trap "stop_mariadb" SIGTERM SIGHUP + wait "$MARIADB_PID"