mirror of
https://github.com/openwrt/packages.git
synced 2025-12-23 03:44:31 +04:00
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>
161 lines
3.0 KiB
Bash
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
|
|
}
|
|
|