mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
69964c4425
These do now show up automatically due to init and systemd customizations, so the handiest fix is to add them manually. This has been the praxis in downstream MariaDB packaging for a couple years now, and works fine. - Ensure service is loaded and started after installation, (fixes service start issues in Debian/Ubuntu upgrades where otherwise service mysql status stayed stopped) - Ensure service stopped before removal/purge (fixes unstopped processes detected by piuparts) - Ensure systemd daemon is reloaded after removal/purge when service has been removed
96 lines
3.3 KiB
Bash
96 lines
3.3 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
. /usr/share/debconf/confmodule
|
|
|
|
# Automatically set version to ease maintenance of this file
|
|
MAJOR_VER="${DPKG_MAINTSCRIPT_PACKAGE#mariadb-server-}"
|
|
|
|
if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi
|
|
${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*" 1>&2 }
|
|
|
|
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
|
|
|
|
# Try to stop the server in a sane way. If it does not success let the admin
|
|
# do it himself. No database directories should be removed while the server
|
|
# is running! Another mysqld in e.g. a different chroot is fine for us.
|
|
stop_server() {
|
|
# Return immediately if there are no mysql processes running
|
|
# as there is no point in trying to shutdown in that case.
|
|
if ! pgrep -x mysqld > /dev/null; then return; fi
|
|
|
|
set +e
|
|
invoke-rc.d mariadb stop
|
|
errno=$?
|
|
set -e
|
|
|
|
# systemctl could emit exit code 100=no init script (fresh install)
|
|
if [ "$errno" != 0 -a "$errno" != 100 ]; then
|
|
echo "Attempt to stop MariaDB/MySQL server returned exitcode $errno" 1>&2
|
|
echo "There is a MariaDB/MySQL server running, but we failed in our attempts to stop it." 1>&2
|
|
echo "Stop it yourself and try again!" 1>&2
|
|
db_stop
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
case "$1" in
|
|
purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
|
|
if [ -n "`$MYADMIN ping 2>/dev/null`" ]; then
|
|
stop_server
|
|
sleep 2
|
|
fi
|
|
;;
|
|
*)
|
|
echo "postrm called with unknown argument '$1'" 1>&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# - Purge logs and data only if they are ours (#307473)
|
|
# - Remove the mysql user only after all his owned files are purged.
|
|
# - Cleanup the initscripts only if this was the last provider of them
|
|
#
|
|
if [ "$1" = "purge" ] && [ -f "/var/lib/mysql/debian-$MAJOR_VER.flag" ]; then
|
|
# we remove the mysql user only after all his owned files are purged
|
|
rm -f /var/log/mysql.{log,err}{,.0,.[1234567].gz}
|
|
rm -rf /var/log/mysql
|
|
|
|
db_input high "mariadb-server-$MAJOR_VER/postrm_remove_databases" || true
|
|
db_go || true
|
|
db_get "mariadb-server-$MAJOR_VER/postrm_remove_databases" || true
|
|
if [ "$RET" = "true" ]; then
|
|
# never remove the debian.cnf when the databases are still existing
|
|
# else we ran into big trouble on the next install!
|
|
rm -f /etc/mysql/debian.cnf
|
|
# Remove all contents from /var/lib/mysql except if it's a
|
|
# directory with file system data. See #829491 for details and
|
|
# #608938 for potential mysql-server leftovers which erroneously
|
|
# had been renamed.
|
|
# Attempt removal only if the directory hasn't already been removed
|
|
# by dpkg to avoid failing on "No such file or directory" errors.
|
|
if [ -d /var/lib/mysql ]
|
|
then
|
|
find /var/lib/mysql -mindepth 1 \
|
|
-not -path '*/lost+found/*' -not -name 'lost+found' \
|
|
-not -path '*/lost@002bfound/*' -not -name 'lost@002bfound' \
|
|
-delete
|
|
|
|
# "|| true" still needed as rmdir still exits with non-zero if
|
|
# /var/lib/mysql is a mount point
|
|
rmdir --ignore-fail-on-non-empty /var/lib/mysql || true
|
|
fi
|
|
rm -rf /run/mysqld # this directory is created by the init script, don't leave behind
|
|
userdel mysql || true
|
|
fi
|
|
|
|
fi
|
|
|
|
#DEBHELPER#
|
|
|
|
# Modified dh_systemd_start snippet that's not added automatically
|
|
if [ -d /run/systemd/system ]; then
|
|
systemctl --system daemon-reload >/dev/null || true
|
|
fi
|