Created
November 24, 2018 15:30
-
-
Save alexkuklin/50cd351f2be6e70ea5d88ed2aeeeea3b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash -e | |
. /usr/share/debconf/confmodule | |
if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi | |
${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*" 1>&2 } | |
export PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin | |
# This command can be used as pipe to syslog. With "-s" it also logs to stderr. | |
ERR_LOGGER="logger -p daemon.err -t mysqld_safe -i" | |
# This will make an error in a logged command immediately apparent by aborting | |
# the install, rather than failing silently and leaving a broken install. | |
set -o pipefail | |
MYSQL_BOOTSTRAP="/usr/sbin/mysqld --bootstrap --user=mysql --disable-log-bin --skip-grant-tables --default-storage-engine=myisam" | |
case "$1" in | |
configure) | |
mysql_statedir=/usr/share/mysql | |
mysql_datadir=/var/lib/mysql | |
mysql_logdir=/var/log/mysql | |
mysql_rundir=/var/run/mysqld | |
mysql_cfgdir=/etc/mysql | |
mysql_upgradedir=/var/lib/mysql-upgrade | |
# If the following symlink exists, it is a preserved copy the old data dir | |
# created by the preinst script during a upgrade that would have otherwise | |
# been replaced by an empty mysql dir. This should restore it. | |
for dir in DATADIR LOGDIR; do | |
if [ "$dir" = "DATADIR" ]; then | |
targetdir=$mysql_datadir | |
else | |
targetdir=$mysql_logdir | |
fi | |
savelink="$mysql_upgradedir/$dir.link" | |
if [ -L "$savelink" ]; then | |
# If the targetdir was a symlink before we upgraded it is supposed | |
# to be either still be present or not existing anymore now. | |
if [ -L "$targetdir" ]; then | |
rm "$savelink" | |
elif [ ! -d "$targetdir" ]; then | |
mv "$savelink" "$targetdir" | |
else | |
# this should never even happen, but just in case... | |
mysql_tmp=`mktemp -d -t mysql-symlink-restore-XXXXXX` | |
echo "this is very strange! see $mysql_tmp/README..." >&2 | |
mv "$targetdir" "$mysql_tmp" | |
cat << EOF > "$mysql_tmp/README" | |
If you're reading this, it's most likely because you had replaced /var/lib/mysql | |
with a symlink, then upgraded to a new version of mysql, and then dpkg | |
removed your symlink (see #182747 and others). The mysql packages noticed | |
that this happened, and as a workaround have restored it. However, because | |
/var/lib/mysql seems to have been re-created in the meantime, and because | |
we don't want to rm -rf something we don't know as much about, we are going | |
to leave this unexpected directory here. If your database looks normal, | |
and this is not a symlink to your database, you should be able to blow | |
this all away. | |
EOF | |
fi | |
fi | |
rmdir $mysql_upgradedir 2>/dev/null || true | |
done | |
# Ensure the existence and right permissions for the database and | |
# log files. | |
if [ ! -d "$mysql_statedir" -a ! -L "$mysql_statedir" ]; then mkdir "$mysql_statedir"; fi | |
if [ ! -d "$mysql_datadir" -a ! -L "$mysql_datadir" ]; then mkdir "$mysql_datadir" ; fi | |
if [ ! -d "$mysql_logdir" -a ! -L "$mysql_logdir" ]; then mkdir "$mysql_logdir" ; fi | |
# When creating an ext3 jounal on an already mounted filesystem like e.g. | |
# /var/lib/mysql, you get a .journal file that is not modifyable by chown. | |
# The mysql_statedir must not be writable by the mysql user under any | |
# circumstances as it contains scripts that are executed by root. | |
set +e | |
chown -R 0:0 $mysql_statedir | |
find $mysql_datadir ! -uid $(id -u mysql) -print0 | xargs -0 -r chown mysql | |
chown -R mysql:adm $mysql_logdir | |
chmod 2750 $mysql_logdir | |
set -e | |
# This is important to avoid dataloss when there is a removed | |
# mysql-server version from Woody lying around which used the same | |
# data directory and then somewhen gets purged by the admin. | |
db_set mariadb-server/postrm_remove_database false || true | |
# Clean up old flags before setting new one | |
rm -f $mysql_datadir/debian-*.flag | |
# Flag data dir to avoid downgrades | |
touch $mysql_datadir/debian-10.1.flag | |
# initiate databases. Output is not allowed by debconf :-( | |
# This will fail if we are upgrading an existing database; in this case | |
# mysql_upgrade, called from the /etc/init.d/mysql start script, will | |
# handle things. | |
# Debian: beware of the bashisms... | |
# Debian: can safely run on upgrades with existing databases | |
set +e | |
bash /usr/bin/mysql_install_db --skip-auth-anonymous-user --auth-root-authentication-method=socket --rpm --cross-bootstrap --user=mysql --disable-log-bin 2>&1 | $ERR_LOGGER | |
set -e | |
# Create the credentials file if not present. On all new installs the | |
# root account can be used directly for maintenance authenticated by | |
# unix socket and on new installs there is no need to define a | |
# separate Debian maintenance user account. | |
dc=$mysql_cfgdir/debian.cnf; | |
if [ ! -d "$mysql_cfgdir" ]; then | |
install -o 0 -g 0 -m 0755 -d $mysql_cfgdir | |
fi | |
if [ ! -e "$dc" ]; then | |
umask 066 | |
cat /dev/null > $dc | |
umask 022 | |
echo "# Automatically generated for Debian scripts. DO NOT TOUCH!" >>$dc | |
echo "[client]" >>$dc | |
echo "host = localhost" >>$dc | |
echo "user = root" >>$dc | |
echo "password = " >>$dc | |
echo "socket = $mysql_rundir/mysqld.sock" >>$dc | |
echo "[mysql_upgrade]" >>$dc | |
echo "host = localhost" >>$dc | |
echo "user = root" >>$dc | |
echo "password = " >>$dc | |
echo "socket = $mysql_rundir/mysqld.sock" >>$dc | |
echo "basedir = /usr" >>$dc | |
fi | |
# If this dir chmod go+w then the admin did it. But this file should not. | |
chown 0:0 $dc | |
chmod 0600 $dc | |
# Update privilege tables | |
password_column_fix_query=`/bin/echo -e \ | |
"USE mysql;\n" \ | |
"SET sql_log_bin=0;\n" \ | |
"ALTER TABLE user CHANGE Password Password char(41) character set latin1 collate latin1_bin DEFAULT '' NOT NULL;"` | |
# Upgrade password column format. | |
# NOTE: $MYSQL_BOOTSTRAP requires one SQL statement per line, semicolon at the end. | |
echo "$password_column_fix_query" | $MYSQL_BOOTSTRAP 2>&1 | $ERR_LOGGER | |
;; | |
abort-upgrade|abort-remove|abort-configure) | |
;; | |
*) | |
echo "postinst called with unknown argument '$1'" 1>&2 | |
exit 1 | |
;; | |
esac | |
db_stop # in case invoke failes | |
# dh_systemd_start doesn't emit anything since we still ship /etc/init.d/mysql. | |
# Thus MariaDB server is started via init.d script, which in turn redirects to | |
# systemctl. If we upgrade from MySQL mysql.service may be masked, which also | |
# means init.d script is disabled. Unmask mysql service explicitly. | |
# Check first that the command exists, to avoid emitting any warning messages. | |
if [ -x "$(command -v deb-systemd-helper)" ]; then | |
deb-systemd-helper unmask mysql.service > /dev/null | |
fi | |
# Automatically added by dh_systemd_enable | |
# This will only remove masks created by d-s-h on package removal. | |
deb-systemd-helper unmask mariadb.service >/dev/null || true | |
# was-enabled defaults to true, so new installations run enable. | |
if deb-systemd-helper --quiet was-enabled mariadb.service; then | |
# Enables the unit on first installation, creates new | |
# symlinks on upgrades if the unit file has changed. | |
deb-systemd-helper enable mariadb.service >/dev/null || true | |
else | |
# Update the statefile to add new symlinks (if any), which need to be | |
# cleaned up on purge. Also remove old symlinks. | |
deb-systemd-helper update-state mariadb.service >/dev/null || true | |
fi | |
# End automatically added section | |
# Automatically added by dh_systemd_enable | |
if deb-systemd-helper debian-installed mariadb.service; then | |
# This will only remove masks created by d-s-h on package removal. | |
deb-systemd-helper unmask mariadb.service >/dev/null || true | |
if deb-systemd-helper --quiet was-enabled mariadb.service; then | |
# Create new symlinks, if any. | |
deb-systemd-helper enable mariadb.service >/dev/null || true | |
fi | |
fi | |
# Update the statefile to add new symlinks (if any), which need to be cleaned | |
# up on purge. Also remove old symlinks. | |
deb-systemd-helper update-state mariadb.service >/dev/null || true | |
# End automatically added section | |
# Automatically added by dh_installinit | |
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then | |
if [ -x "/etc/init.d/mysql" ]; then | |
update-rc.d mysql defaults 19 21 >/dev/null || exit $? | |
fi | |
fi | |
# End automatically added section | |
# Modified dh_systemd_start snippet that's not added automatically due /etc/init.d/mysql | |
if [ -d /run/systemd/system ]; then | |
systemctl --system daemon-reload >/dev/null || true | |
deb-systemd-invoke start mariadb.service >/dev/null || true | |
# Modified dh_installinit snippet to only run with sysvinit | |
elif [ -x "/etc/init.d/mysql" ]; then | |
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ]; then | |
invoke-rc.d mysql start || exit $? | |
fi | |
fi | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment