File: //var/packages/MariaDB10/scripts/common
#!/bin/sh
# Copyright (C) 2000-2017 Synology Inc. All rights reserved.
. `dirname $0`/lib
PACKAGE_NAME="MariaDB10"
CONF_FILE="/var/packages/MariaDB10/etc/.mariadb.conf"
MY_PORT_CNF_FILE="/var/packages/MariaDB10/etc/my_port.cnf"
ENV_DIR_NAME="mariadb10"
PREVIOUS_VERSION_FILE="/var/packages/MariaDB10/etc/.pre_ver"
SYNOLOGY_CNF_FILE="/var/packages/MariaDB10/etc/synology.cnf"
PORT_CONFIG_FILE="/var/packages/MariaDB10/target/port_conf/MariaDB10.sc"
DATADIR="/var/packages/MariaDB10/target/mysql"
PKG_VAR="/var/packages/MariaDB10/var"
IS_USBSTATION="$(/bin/get_key_value /etc.defaults/synoinfo.conf usbstation)"
MARIADB_TARGET_BASE_DIR="/var/packages/MariaDB10/target/usr/local/mariadb10.11"
MYSQL_SERVER="$MARIADB_TARGET_BASE_DIR"/share/mysql/mysql.server
BIN_MYSQL_UPGRADE="$MARIADB_TARGET_BASE_DIR"/bin/mysql_upgrade
BIN_MYSQL_INSTALL_DB="$MARIADB_TARGET_BASE_DIR"/bin/mariadb-install-db
BIN_MYSQL="$MARIADB_TARGET_BASE_DIR"/bin/mysql
BIN_SYNOLOGY_SETTING="/var/packages/MariaDB10/target/tool/synology_setting"
RESET_DEFAULT_PASSWORD="##sYnoloGY2019!!"
if [ "$SYNOPKG_TEMP_LOGFILE" ]; then
log() {
local text="$1"
local idx=0
shift 1
for val in "$@"; do
text="${text//\{$idx\}/$val}"
let idx=1+$idx
done
echo "$text" >> $SYNOPKG_TEMP_LOGFILE
}
fi
CheckEnoughSpace()
{
local pkgVolume=$1
local mysqlPath=$2
local pkgVolumeSize=$(/bin/df "/$pkgVolume" | tail -n 1 | awk '{ print $4 }')
local mysqlSize=$(/bin/du -s "$mysqlPath" | awk '{ print $1 }')
if [ $pkgVolumeSize -le $mysqlSize ]; then
log "${pkgVolume} ${space_not_enough}"
exit 1
fi
}
MoveEnvToPackageVar()
{
local oldMysqlPath="$1"
local pkgVolume=$(readlink "$PKG_VAR" | cut -d/ -f2)
local envVolume=$(echo "$oldMysqlPath" | cut -d/ -f2)
if [ ! "$pkgVolume" = "$envVolume" ]; then
CheckEnoughSpace "$pkgVolume" "$oldMysqlPath"
fi
if [ -d "$PKG_VAR/$ENV_DIR_NAME" ]; then
rm -rf "$PKG_VAR/$ENV_DIR_NAME"
fi
/bin/mv -f $oldMysqlPath "$PKG_VAR"
}
ChkExecEnv()
{
local mysqlPath=
if [ ! -L ${DATADIR} ]; then
mysqlPath="$PKG_VAR/$ENV_DIR_NAME"
/bin/ln -fs "${mysqlPath}" "${DATADIR}"
else
mysqlPath=$(readlink ${DATADIR})
fi
if [ ! -d "${mysqlPath}" ]; then
mkdir -p "${mysqlPath}"
fi
[ ! -d /run/mysqld ] && /bin/mkdir -p /run/mysqld
/bin/chown -R mysql:mysql /run/mysqld "${DATADIR}"/
}
StartSingleUser()
{
$MYSQL_SERVER start --skip-grant-tables --skip-networking --max-allowed-packet=512M
for i in $(seq 60); do
if ! $MYSQL_SERVER status; then
sleep 1
continue
fi
return 0
done
return 1
}
quote_sql() {
sed -e 's|\\|\\\\|g' -e 's|\"|\\\"|g' -e "s|'|\\\'|g"
}
InitTemp()
{
local tmpdir="/var/packages/MariaDB10/tmp/tmpdir"
rm -rf "$tmpdir"
mkdir "$tmpdir"
chmod 777 "$tmpdir"
chmod o+t "$tmpdir"
}
RebuildDatabase()
{
ChkExecEnv
if [ ! -d ${DATADIR}/mysql ]; then
new_root_pass="$RESET_DEFAULT_PASSWORD"
[ ! -z "$pkgwizard_new_root_password" ] && new_root_pass="$(echo "$pkgwizard_new_root_password" | quote_sql)"
echo "Initialize MySQL database"
"$BIN_MYSQL_INSTALL_DB" --user=mysql --basedir="$MARIADB_TARGET_BASE_DIR" --datadir="${DATADIR}"
echo "${PKGVERSION}" | sed 's|\(.*\)-[0-9]*|\1|' > "${DATADIR}/VERSION"
"$MYSQL_SERVER" start
"$BIN_MYSQL" -e "DELETE FROM mysql.user WHERE User=''"
"$BIN_MYSQL" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
"$BIN_MYSQL" -e "DROP DATABASE IF EXISTS test"
"$BIN_MYSQL" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
"$BIN_MYSQL" -e "ALTER USER 'root'@'127.0.0.1' IDENTIFIED VIA mysql_native_password USING PASSWORD('$new_root_pass')";
"$BIN_MYSQL" -e "ALTER USER 'root'@'::1' IDENTIFIED VIA mysql_native_password USING PASSWORD('$new_root_pass')";
"$BIN_MYSQL" -e "ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('$new_root_pass')";
"$MYSQL_SERVER" stop
local pkg_version=`/bin/get_key_value /var/packages/$PACKAGE_NAME/INFO version`
echo ${pkg_version} | sed 's|\(.*\)-[0-9]*|\1|' > ${DATADIR}/VERSION
fi
}
CHECK_AND_LINK_FILE()
{
LINK="$1"
LINK_TARGET="$2"
LINK_BASE=`dirname $1`
if [ ! -d "$LINK_BASE" ]; then
mkdir -p $LINK_BASE
fi
if [ -e "$LINK" ]; then
rm "$LINK"
fi
ln -sf $LINK_TARGET $LINK
}
DO_LINK()
{
# FIXME this is for external lib compatibility only, will be removed in DSM8.0
CHECK_AND_LINK_FILE /usr/local/mariadb10 ${MARIADB_TARGET_BASE_DIR}
CHECK_AND_LINK_FILE /usr/local/lib/mysql ${MARIADB_TARGET_BASE_DIR}/lib/mysql
CHECK_AND_LINK_FILE /usr/local/share/mysql ${MARIADB_TARGET_BASE_DIR}/share/mysql
}
CHECK_AND_REMOVE()
{
[ -L $1 ] && rm $1
}
DO_REMOVE()
{
rm -rf /usr/local/share/mysql
rm -rf /usr/local/mariadb10
rm -rf /usr/local/lib/mysql
}
SetMySQLPort()
{
port="$1"
"$BIN_SYNOLOGY_SETTING" --init_port_setting
"$BIN_SYNOLOGY_SETTING" -p "$port"
/usr/syno/sbin/synopkghelper update "$PACKAGE_NAME" port-config
}