mariadb: update init script to use uci 7673/head
authorSebastian Kemper <sebastian_ml@gmx.net>
Sat, 15 Dec 2018 16:17:21 +0000 (17:17 +0100)
committerSebastian Kemper <sebastian_ml@gmx.net>
Sat, 15 Dec 2018 16:17:24 +0000 (17:17 +0100)
Does away with /etc/default/mysqld, introduces uci configuration
instead. The init script receives some further brushing up, like a
function (copied from Debian) to get mysqld configuration parameters
easily and quickly.

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
utils/mariadb/Makefile
utils/mariadb/conf/mysqld.default [deleted file]
utils/mariadb/files/mysqld.config [new file with mode: 0644]
utils/mariadb/files/mysqld.init

index 515d211ca391504cb1a251240d1091ec21dff520..b499769fc783006c076129b15f24a6d6b7fd9a42 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mariadb
 PKG_VERSION:=10.2.19
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL := \
@@ -332,7 +332,7 @@ endef
 define Package/mariadb-server-base/conffiles
 $(CONF_DIR)/conf.d/50-server.cnf
 $(CONF_DIR)/conf.d/60-galera.cnf
-/etc/default/mysqld
+/etc/config/mysqld
 endef
 
 define Package/mariadb-server-base/description
@@ -554,13 +554,13 @@ define Package/mariadb-server-base/install
        $(INSTALL_DIR) $(1)$(CONF_DIR)/conf.d
        $(INSTALL_DIR) $(1)$(SHARE_DIR)/charsets
        $(INSTALL_DIR) $(1)$(SHARE_DIR)/english
-       $(INSTALL_DIR) $(1)/etc/default
+       $(INSTALL_DIR) $(1)/etc/config
        $(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) files/mysqld.init $(1)/etc/init.d/mysqld
        $(SED) '/^[a-z]/s/^/#/' $(PKG_INSTALL_DIR)$(SHARE_DIR)/wsrep.cnf
        $(INSTALL_CONF) $(PKG_INSTALL_DIR)$(SHARE_DIR)/wsrep.cnf $(1)$(CONF_DIR)/conf.d/60-galera.cnf
        $(INSTALL_CONF) conf/50-server.cnf $(1)$(CONF_DIR)/conf.d
-       $(INSTALL_CONF) conf/mysqld.default $(1)/etc/default/mysqld
+       $(INSTALL_CONF) files/mysqld.config $(1)/etc/config/mysqld
        $(INSTALL_DATA) $(PKG_INSTALL_DIR)$(SHARE_DIR)/charsets/* $(1)$(SHARE_DIR)/charsets
        $(INSTALL_DATA) $(PKG_INSTALL_DIR)$(SHARE_DIR)/english/errmsg.sys $(1)$(SHARE_DIR)/english
        $(INSTALL_DATA) $(PKG_INSTALL_DIR)$(SHARE_DIR)/fill_help_tables.sql $(1)$(SHARE_DIR)
diff --git a/utils/mariadb/conf/mysqld.default b/utils/mariadb/conf/mysqld.default
deleted file mode 100644 (file)
index fe9c698..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# The user and group that will run the MySQL server. The user mariadb is
-# automatically created by the mariadb-server package, hence that is the
-# default choice.
-
-#MY_USER=mariadb
-#MY_GROUP=mariadb
-
-# Additional arguments you want to pass to the MySQL server.
-
-#MY_ARGS=""
diff --git a/utils/mariadb/files/mysqld.config b/utils/mariadb/files/mysqld.config
new file mode 100644 (file)
index 0000000..1bfcde6
--- /dev/null
@@ -0,0 +1,7 @@
+
+config mysqld 'general'
+       option enabled '0'
+       option log_stderr '1'
+       option log_stdout '1'
+       option options ''
+
index abc99fc7a98bfa7c8775b7cc8ac47c4e973d0576..e55cfce706efa3dac748dc4b106450868429dce9 100644 (file)
@@ -8,46 +8,94 @@ USE_PROCD=1
 
 #PROCD_DEBUG=1
 
-MYSQLD=mysqld
+NAME=mysqld
 
-DEFAULT=/etc/default/$MYSQLD
-LOGGER="/usr/bin/logger -p user.err -s -t $MYSQLD"
-PROG=/usr/bin/$MYSQLD
+LOGGER="/usr/bin/logger -p user.err -s -t $NAME"
+COMMAND=/usr/bin/$NAME
 
-unset MY_ARGS MY_GROUP MY_USER
-
-[ -f $DEFAULT ] && . $DEFAULT
-
-my_user="${MY_USER:-mariadb}"
-my_group="${MY_GROUP:-mariadb}"
+mysqld_get_param() {
+       $COMMAND --print-defaults \
+               | tr " " "\n" \
+               | grep -- "--$1" \
+               | tail -n 1 \
+               | cut -d= -f2
+}
 
 start_service() {
-       local conf='/etc/mysql/my.cnf'
-       local datadir="$( sed -nE "s/^\s*datadir\s*=\s*('([^']*)'|\x22([^\x22]*)\x22|(.*\S))\s*$/\2\3\4/p" "$conf" )"
-
-       [ -d "$datadir" ] || {
-               $LOGGER "datadir '$datadir' in '$conf' does not exist"
-               return 1
-       }
-
-       [ -f "$datadir/mysql/tables_priv.MYD" ] || {
+       local conf=/etc/mysql/my.cnf
+       local dir
+       local user=mariadb
+
+       local datadir
+       local logdir=/var/log/mysql
+       local rundir=/var/run/mysqld
+       local tmpdir
+
+       local enabled
+       local log_stderr
+       local log_stdout
+       local options
+
+       if [ ! -x $COMMAND ]; then
+               $LOGGER $COMMAND is missing
+               exit 1
+       fi
+
+       if [ ! -r $conf ]; then
+               $LOGGER $conf cannot be read
+               exit 1
+       fi
+
+       config_load $NAME
+
+       config_get_bool enabled general enabled 0
+       if [ $enabled -eq 0 ]; then
+               $LOGGER service not enabled in /etc/config/$NAME
+               exit 1
+       fi
+
+       config_get_bool log_stderr general log_stderr 1
+       config_get_bool log_stdout general log_stdout 1
+
+       config_get options general options
+
+       datadir=$(mysqld_get_param datadir)
+       tmpdir=$(mysqld_get_param tmpdir)
+
+       if [ -z "$datadir" ]; then
+               $LOGGER datadir is not set
+               exit 1
+       fi
+
+       if [ -z "$tmpdir" ]; then
+               $LOGGER tmpdir is not set.
+               exit 1
+       fi
+
+       [ -e "$datadir" ] || mkdir -p "$datadir"
+
+       for dir in "$logdir" "$rundir" "$tmpdir"; do
+               if [ ! -e "$dir" ]; then
+                       mkdir -p "$dir"
+                       chown $user "$dir"
+               fi
+       done
+
+       if [ ! -f "$datadir/mysql/tables_priv.MYD" ]; then
                $LOGGER "cannot detect privileges table, you might need to"
                $LOGGER "run 'mysql_install_db --force' to initialize the system tables"
-               return 1
-       }
-
-       mkdir -p /var/lib/mysql
-       chown "$my_user":"$my_group" /var/lib/mysql
-
-       mkdir -p /var/run/mysqld
-       chown "$my_user":"$my_group" /var/run/mysqld
+               exit 1
+       fi
 
        procd_open_instance
 
-       procd_set_param command $PROG $MY_ARGS
-       procd_set_param pidfile /var/run/mysqld.pid
+       procd_set_param command $COMMAND $options
+
        # forward stderr to logd
-       procd_set_param stderr 1
+       procd_set_param stderr $log_stderr
+       # same for stdout
+       procd_set_param stdout $log_stdout
 
        procd_close_instance
 }
+