1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-33750: Sync maintainer scripts etc with latest downstream 10.11.5 in Debian

Fix a large amount of minor fixes to maintainer scripts and other done
downstream in the official Debian packaging.

Changes include:

38198d0b9e
> Limit check of running mysqld/mariadbd to system users (Closes: #1032047)
>
> If a random user has their own copy of mysqld/mariadbd running, the
> dpkg maintainer script should not care about it.

8116354d22
> Make error more helpful in case server restart fails (Related: #1033234)
>
> Bugs such as https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1033234
> and https://bugs.launchpad.net/ubuntu/+source/mariadb-10.6/+bug/2011293
> show that currently dpkg stopping on service stop/start does not have
> a very helpful error message.

8675e97202
> Complement upstream commits with more complete mysql->mariadb conversion
>
> The upstream commit 952af4a1 missed some places where 'mysql' or
> 'MySQL' can and should be converted to use 'mariadb' or 'MariaDB'.

c983613300
> Fix indentation in Debian post and pre scripts
>
> There is several misindentation inside Debian post and pre
> installation scripts. False indentation with space as indent space
> should be 2 and indentation with tabs.
>
> Adopt upstream commit 7cbb45d1 in Debian by conserving customizations
> in:
> - debian/mariadb-server.postinst
> - debian/mariadb-server.postrm
> - debian/mariadb-server.preinst

d0bcab443f
> Ensure spaces are used everywhere instead of tabs for indentation

0300a9157c
> Complement previous upstream commits to fix Shellcheck issues
>
> - Unify if/then and while/do on separate lines
> - Fix indentation to be consistent
> - Use "$()" instead of backticks for subshells
> - Exit code cannot be -1, must be 0-255
> - Remove unused variables MYCHECK and MYCHECK_PARAMS
> - Rewrite messy command-line database calls to an easier to read form
>   that does exactly the same
> - Use 'command -v' test instead of 'which'
>
> With this commit, all of debian/* is Shellcheck clean.

Also
* Update mariadb.conf.d template to tell users where to create logdir
  if they are not using journald
* Remove use of work 'slave'
* Add minor workaround for Debian Bug #1022994 if TMPDIR is empty
* Make start/stop in maintainer scripts correctly check mariadbd
  ownership and only start/stop processes owned by root or 'mysql'
* Remove obsolete 'NO_UPDATE_BUILD_VERSION=1' as it did not affect the
  RocksDB build reproducibility as previously assumed
* Run 'wrap-and-sort -av'
This commit is contained in:
Otto Kekäläinen
2023-10-07 19:42:31 -07:00
committed by Daniel Black
parent 5000d1ba6e
commit 2adaf5c261
16 changed files with 215 additions and 128 deletions

View File

@@ -8,7 +8,7 @@
# Should-Stop: $network $named $time
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop the mysql database server daemon
# Short-Description: Start and stop the MariaDB database server daemon
# Description: Controls the main MariaDB database server daemon "mariadbd"
# and its wrapper script "mysqld_safe".
### END INIT INFO
@@ -19,9 +19,10 @@ ${DEBIAN_SCRIPT_DEBUG:+ set -v -x}
test -x /usr/sbin/mariadbd || exit 0
# shellcheck source=/dev/null
. /lib/lsb/init-functions
SELF=$(cd "$(dirname $0)"; pwd -P)/$(basename $0)
SELF="$(cd "$(dirname "$0")"; pwd -P)/$(basename "$0")"
if [ -f /usr/bin/mariadb-admin ]
then
@@ -31,26 +32,30 @@ then
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
else
log_failure_msg "Command mariadb-admin/mysqladmin not found! This SysV init script depends on it."
exit -1
exit 1
fi
if [ ! -x /usr/bin/mariadbd-safe ]
then
log_failure_msg "/usr/bin/mariadbd-safe not found or executable! This SysV init script depends on it."
exit -1
exit 1
fi
# priority can be overridden and "-s" adds output to stderr
ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mariadb -i"
if [ -f /etc/default/mysql ]; then
if [ -f /etc/default/mysql ]
then
# shellcheck source=/dev/null
. /etc/default/mysql
fi
# Also source default/mariadb in case the installation was upgraded from
# packages originally installed from MariaDB.org repositories, which have
# had support for reading /etc/default/mariadb since March 2016.
if [ -f /etc/default/mariadb ]; then
if [ -f /etc/default/mariadb ]
then
# shellcheck source=/dev/null
. /etc/default/mariadb
fi
@@ -77,13 +82,14 @@ mariadbd_get_param() {
## Do some sanity checks before even trying to start mariadbd.
sanity_checks() {
# check for config file
if [ ! -r /etc/mysql/my.cnf ]; then
if [ ! -r /etc/mysql/my.cnf ]
then
log_warning_msg "$0: WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz"
echo "WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz" | $ERR_LOGGER
fi
# check for diskspace shortage
datadir=`mariadbd_get_param datadir`
datadir="$(mariadbd_get_param datadir)"
# If datadir location is not changed int configuration
# then it's not printed with /usr/sbin/mariadbd --print-defaults
@@ -105,7 +111,8 @@ sanity_checks() {
# As preset blocksize of GNU df is 1024 then available bytes is $df_available_blocks * 1024
# 4096 blocks is then lower than 4 MB
df_available_blocks="$(LC_ALL=C BLOCKSIZE='' df --output=avail "$datadir" | tail -n 1)"
if [ "$df_available_blocks" -lt "4096" ]; then
if [ "$df_available_blocks" -lt "4096" ]
then
log_failure_msg "$0: ERROR: The partition with $datadir is too full!"
echo "ERROR: The partition with $datadir is too full!" | $ERR_LOGGER
exit 1
@@ -119,17 +126,30 @@ sanity_checks() {
#
# Usage: boolean mariadbd_status [check_alive|check_dead] [warn|nowarn]
mariadbd_status () {
ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? ))
ping_output="$($MYADMIN ping 2>&1)"
# The whole mariadbd_status function should be rewritten in clean shell script,
# so ignore minor Shellcheck nag for now as fixing it would be half of the
# rewrite
# shellcheck disable=SC2181
ping_alive="$(( ! $? ))"
ps_alive=0
pidfile=`mariadbd_get_param pid-file`
if [ -f "$pidfile" ] && ps `cat $pidfile` >/dev/null 2>&1; then ps_alive=1; fi
pidfile="$(mariadbd_get_param pid-file)"
if [ -f "$pidfile" ] && ps "$(cat "$pidfile")" >/dev/null 2>&1
then
ps_alive=1
fi
# Using '-a' is unstandard, but it works and might be needed for the grouping
# of the if-else, so keep it and just ignore in Shellcheck
# shellcheck disable=SC2166
if [ "$1" = "check_alive" -a $ping_alive = 1 ] ||
[ "$1" = "check_dead" -a $ping_alive = 0 -a $ps_alive = 0 ]; then
[ "$1" = "check_dead" -a $ping_alive = 0 -a $ps_alive = 0 ]
then
return 0 # EXIT_SUCCESS
else
if [ "$2" = "warn" ]; then
if [ "$2" = "warn" ]
then
echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug
fi
return 1 # EXIT_FAILURE
@@ -146,7 +166,8 @@ case "${1:-''}" in
sanity_checks;
# Start daemon
log_daemon_msg "Starting MariaDB database server" "mariadbd"
if mariadbd_status check_alive nowarn; then
if mariadbd_status check_alive nowarn
then
log_progress_msg "already running"
log_end_msg 0
else
@@ -156,16 +177,22 @@ case "${1:-''}" in
# Start MariaDB!
/usr/bin/mariadbd-safe "${@:2}" 2>&1 >/dev/null | $ERR_LOGGER &
for i in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-30}"); do
for _ in $(seq 1 "${MYSQLD_STARTUP_TIMEOUT:-30}")
do
sleep 1
if mariadbd_status check_alive nowarn ; then break; fi
if mariadbd_status check_alive nowarn
then
break
fi
log_progress_msg "."
done
if mariadbd_status check_alive warn; then
if mariadbd_status check_alive warn
then
log_end_msg 0
# Now start mysqlcheck or whatever the admin wants.
output=$(/etc/mysql/debian-start)
if [ -n "$output" ]; then
if [ -n "$output" ]
then
log_action_msg "$output"
fi
else
@@ -181,28 +208,40 @@ case "${1:-''}" in
# to specify it explicit as e.g. sudo environments points to the normal
# users home and not /root)
log_daemon_msg "Stopping MariaDB database server" "mariadbd"
if ! mariadbd_status check_dead nowarn; then
if ! mariadbd_status check_dead nowarn
then
set +e
shutdown_out=`$MYADMIN shutdown 2>&1`; r=$?
shutdown_out="$($MYADMIN shutdown 2>&1)"
r=$?
set -e
if [ "$r" -ne 0 ]; then
if [ "$r" -ne 0 ]
then
log_end_msg 1
[ "$VERBOSE" != "no" ] && log_failure_msg "Error: $shutdown_out"
log_daemon_msg "Killing MariaDB database server by signal" "mariadbd"
killall -15 mariadbd
server_down=
for i in `seq 1 600`; do
for _ in {1..600}
do
sleep 1
if mariadbd_status check_dead nowarn; then server_down=1; break; fi
if mariadbd_status check_dead nowarn
then
server_down=1
break
fi
done
if test -z "$server_down"; then killall -9 mariadbd; fi
if test -z "$server_down"
then
killall -9 mariadbd
fi
fi
fi
if ! mariadbd_status check_dead warn; then
if ! mariadbd_status check_dead warn
then
log_end_msg 1
log_failure_msg "Please stop MariaDB manually and read /usr/share/doc/mariadb-server/README.Debian.gz!"
exit -1
exit 1
else
log_end_msg 0
fi
@@ -221,7 +260,8 @@ case "${1:-''}" in
;;
'status')
if mariadbd_status check_alive nowarn; then
if mariadbd_status check_alive nowarn
then
log_action_msg "$($MYADMIN version)"
else
log_action_msg "MariaDB is stopped."
@@ -230,11 +270,11 @@ case "${1:-''}" in
;;
'bootstrap')
# Bootstrap the cluster, start the first node
# that initiates the cluster
log_daemon_msg "Bootstrapping the cluster" "mariadbd"
$SELF start "${@:2}" --wsrep-new-cluster
;;
# Bootstrap the cluster, start the first node
# that initiates the cluster
log_daemon_msg "Bootstrapping the cluster" "mariadbd"
$SELF start "${@:2}" --wsrep-new-cluster
;;
*)
echo "Usage: $SELF start|stop|restart|reload|force-reload|status"