Files
packages/utils/mariadb/files/mysqld.init
Sebastian Kemper 39db22ec95 mariadb: use default umask for rundir
rundir needs to be accessible for clients, hence o= is not the proper
permission for rundir. This commit breaks out rundir from the awk script
and sets it up with default umask.

This also removes chmod call and instead tells mkdir to create the
directories with the proper permissions directly.

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
2020-05-24 10:41:11 +02:00

161 lines
3.0 KiB
Bash

#!/bin/sh /etc/rc.common
# Copyright (C) 2010-2018 OpenWrt.org
START=95
STOP=10
USE_PROCD=1
#PROCD_DEBUG=1
NAME=mysqld
LOGGER="/usr/bin/logger -p user.err -s -t $NAME --"
COMMAND=/usr/bin/$NAME
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 dir
local user
local group
local logfile
local datadir
local logdir=/var/log/mysql
local rundir=/var/run/mysqld
local tmpdir
local enabled
local log_stderr
local log_stdout
local options
local hint="please fix your server configuration in /etc/mysql/"
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)
logfile=$(mysqld_get_param general_log_file)
tmpdir=$(mysqld_get_param tmpdir)
user=$(mysqld_get_param user)
if [ -z "$datadir" ]; then
$LOGGER datadir is not set
$LOGGER $hint
exit 1
fi
if [ -z "$tmpdir" ]; then
$LOGGER tmpdir is not set
$LOGGER $hint
exit 1
fi
if [ -z "$user" ]; then
$LOGGER user is not set
$LOGGER $hint
exit 1
fi
user_exists "$user" || {
$LOGGER user \""$user"\" does not exist
$LOGGER $hint
exit 1
}
group=$(id -g -n "$user")
group_exists "$group" || {
$LOGGER group \""$group"\" does not exist
$LOGGER user \""$user"\" not configured correctly
exit 1
}
[ -n "$logfile" ] && logdir=$(dirname "$logfile")
# do not touch directories that already exist
# posix shell does not support arrays, hence using awk
awk \
-v user="$user" \
-v group="$group" \
-v a="$datadir" \
-v b="$logdir" \
-v c="$tmpdir" \
'
BEGIN {
dir[0]=a
dir[1]=b
dir[2]=c
for (x in dir) {
if (system("test ! -e \"" dir[x] "\"" )) {
delete dir[x]
}
}
for (x in dir) {
system("mkdir -p -m 0750 \"" dir[x] "\"" )
system("chown \"" user "\":\"" group "\" \"" dir[x] "\"" )
}
}
'
if ! [ -e "$rundir" ]; then
# $rundir needs to be accessible for
# clients
mkdir -p "$rundir"
[ -d "$rundir" ] && chown "$user":"$group" "$rundir"
fi
if [ ! -f "$datadir/mysql/tables_priv.MYD" ]; then
local args="--force"
local basedir=$(mysqld_get_param basedir)
[ -n "$basedir" ] && args="$args --basedir=$basedir"
$LOGGER Cannot detect privileges table. You might need to run
$LOGGER \'mysql_install_db $args\'
$LOGGER to initialize the system tables.
exit 1
fi
procd_open_instance
procd_set_param command $COMMAND $options
# forward stderr to logd
procd_set_param stderr $log_stderr
# same for stdout
procd_set_param stdout $log_stdout
procd_close_instance
}