HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
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
}