Ernesto Nicolás Carrea 5 years ago
parent
commit
2b73608279

+ 53 - 51
bin/module/mariadb/install.inc

@@ -9,7 +9,10 @@ hestia_module_mariadb_install() {
     fi
 
     echo "Installing database (MariaDB) module..."
-    mariadb_v='10.4'
+    local mariadb_v='10.4'
+
+    osal_service_stop $OSAL_SERVICE_MARIADB > /dev/null 2>&1
+    hestia_config_backup 'mariadb-install' $OSAL_PATH_MARIADB_CONF $OSAL_DIR_MARIADB_CONF_D $OSAL_PATH_MARIADB_DATA
 
     if [ "$OS_TYPE" == 'ubuntu' ]; then
         echo "deb [arch=amd64] http://ams2.mirrors.digitalocean.com/mariadb/repo/$mariadb_v/$OS_TYPE $OS_CODENAME main" > $apt/mariadb.list
@@ -21,48 +24,65 @@ hestia_module_mariadb_install() {
         else
             APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --recv-keys --keyserver keyserver.ubuntu.com F1656F24C74CD1D8 > /dev/null 2>&1
         fi
-    else
-        
+    elif [ "$OS_TYPE" == 'centos' ]; then
+        # Remove conflicting OS-provided packages
+        osal_package_remove mariadb-server mariadb-gssapi-server
+
+        cat > "/etc/yum.repos.d/mariadb.repo" <<EOL
+# This file is auto generated. Do not edit this file. Changes will be overwriten
+# Run 'hestia module mariadb info' or visit http://hestiacp.com for more info.
+# http://downloads.mariadb.org/mariadb/repositories/
+[mariadb]
+name = MariaDB
+baseurl = http://yum.mariadb.org/${mariadb_v}/${OS_TYPE}${OS_VERSION}-amd64
+module_hotfixes=1
+gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
+gpgcheck=1
+EOL
     fi
 
-
-
-
-    osal_service_stop $OSAL_SERVICE_MARIADB > /dev/null 2>&1
-    hestia_config_backup 'mariadb-install' $OSAL_PATH_MARIADB_CONF
-
     osal_package_preinstall
-    osal_package_install $OSAL_PKG_MARIADB
-
-    gpasswd -a $OSAL_USER_MARIADB mail > /dev/null 2>&1
+    osal_package_install ${OSAL_PKG_MARIADB}-server ${OSAL_PKG_MARIADB}-client ${OSAL_PKG_MARIADB}-common
 
-    if [ "$OS_BASE" = 'debian' ]; then
-        cp -f $HESTIA_INSTALL_DIR/mariadb/${OSAL_PKG_MARIADB}.conf.template $OSAL_PATH_MARIADB_CONF/
-        chmod 640 $OSAL_PATH_MARIADB_CONF/${OSAL_PKG_MARIADB}.conf.template
-    else
-        cp -f $HESTIA_INSTALL_DIR/mariadb/${OSAL_PKG_MARIADB}.conf $OSAL_PATH_MARIADB_CONF/
-        chmod 640 $OSAL_PATH_MARIADB_CONF/${OSAL_PKG_MARIADB}.conf
+    local memory=$(grep 'MemTotal' /proc/meminfo |tr ' ' '\n' |grep [0-9])
+    local mycnf="my-small.cnf"
+    if [ $memory -gt 1200000 ]; then
+        mycnf="my-medium.cnf"
+    fi
+    if [ $memory -gt 3900000 ]; then
+        mycnf="my-large.cnf"
     fi
 
-    cp -f $HESTIA_INSTALL_DIR/mariadb/dnsbl.conf $OSAL_PATH_MARIADB_CONF/
-    cp -f $HESTIA_INSTALL_DIR/mariadb/spam-blocks.conf $OSAL_PATH_MARIADB_CONF/
-    touch $OSAL_PATH_MARIADB_CONF/white-blocks.conf
-    touch $OSAL_PATH_MARIADB_CONF/mailhelo.conf
-
-    hestia_safe_rm $OSAL_PATH_MARIADB_CONF/domains
-    mkdir -p $OSAL_PATH_MARIADB_CONF/domains
+    # Configuring MariaDB
+    cp -f $HESTIA_INSTALL_DIR/mysql/$mycnf $OSAL_DIR_MARIADB_CONF/my.cnf
+    if [ ! -d $OSAL_PATH_MARIADB_DATA ]; then
+        mysql_install_db > /dev/null
+    fi
 
-    hestia_safe_rm /etc/alternatives/mydb
-    ln -s /usr/sbin/$OSAL_PKG_MARIADB /etc/alternatives/mydb
-    
-    osal_service_stop sendmail > /dev/nul 2>&1
-    osal_service_disable sendmail > /dev/nul 2>&1
-    osal_service_stop postfix > /dev/nul 2>&1
-    osal_service_disable postfix > /dev/nul 2>&1
+    mkdir -p /var/run/mysqld
+    chown mysql:mysql /var/run/mysqld
 
     osal_service_enable $OSAL_SERVICE_MARIADB
     osal_service_start $OSAL_SERVICE_MARIADB
-    check_result $? "Mariadb start failed"
+    check_result $? "MariaDB start failed"
+
+    if [ ! -f /root/.my.cnf ]; then
+        # If /root/.my.cnf does not exist, secure MariaDB by setting root password
+        local mariadb_root_password=$(osal_gen_pass)
+        mysqladmin -u root password $mariadb_root_password
+        echo -e "[client]\npassword='$mariadb_root_password'\n" > /root/.my.cnf
+        chmod 600 /root/.my.cnf
+    fi
+
+    mysql_upgrade > /dev/null
+
+    # Clear MariaDB test users and databases
+    # FIXME: MariaDB 10.4 and up use global_priv
+    mysql -e "DELETE FROM mysql.user WHERE User=''" > /dev/null 2>&1
+    mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'" > /dev/null 2>&1
+    mysql -e "DELETE FROM mysql.user WHERE user='';" > /dev/null 2>&1
+    mysql -e "DELETE FROM mysql.user WHERE password='' AND authentication_string='';" > /dev/null 2>&1
+    mysql -e "DROP DATABASE test" > /dev/null 2>&1
 
     osal_kv_write $HESTIA/conf/hestia.conf 'DB_SYSTEM' 'mysql'
     osal_kv_write $HESTIA_CONF_MODULES/mydb.conf 'installed' '1'
@@ -71,22 +91,4 @@ hestia_module_mariadb_install() {
     osal_kv_write $HESTIA_CONF_MODULES/mydb.conf 'variant' 'mariadb'
     osal_kv_write $HESTIA_CONF_MODULES/mydb.conf 'version' '1'
     osal_kv_write $HESTIA_CONF_MODULES/mydb.conf 'service_name' $OSAL_PKG_MARIADB
-
-    # Rebuild mail
-    for user in $($HESTIA/bin/v-list-sys-users plain); do
-        echo "Rebuilding mail domains for user $user"
-        $BIN/v-rebuild-mail-domains $user 'no' >/dev/null 2>&1
-    done
-
-    # Setup ClamAv integration
-    clamav_installed=$(hestia_module_variant_installed 'antivirus' 'clamav')
-    if [ "$clamav_installed" ]; then
-        $BIN/hestia module clamav mariadb-integration enable
-    fi
-
-    # Setup SpamAssassin integration
-    spamassassin_installed=$(hestia_module_variant_installed 'antispam' 'spamassassin')
-    if [ "$spamassassin_installed" ]; then
-        $BIN/hestia module spamassassin mariadb-integration enable
-    fi
 }

+ 17 - 25
bin/module/mariadb/remove.inc

@@ -1,40 +1,32 @@
 #!/bin/bash
 
-hestia_module_exim_remove() {
+hestia_module_mariadb_remove() {
     source $HESTIA/bin/module/func.inc
 
-    if ! hestia_module_isinstalled 'mta' && [ ! "$param_force" ]; then
-        echo "MTA module is not installed. See 'hestia module info mta'."
+    if ! hestia_module_isinstalled 'mydb' && [ ! "$param_force" ]; then
+        echo "MySQL/MariaDB database module is not installed. See 'hestia module info mydb'."
         return 1
     fi
 
-    module_variant=$(hestia_module_getvariant mta)
-    if [ "$module_variant" != 'exim' ] && [ ! "$param_force" ]; then
-        echo "The installed MTA module is not Exim. See 'hestia module info mta'."
+    module_variant=$(hestia_module_getvariant mydb)
+    if [ "$module_variant" != 'mariadb' ] && [ ! "$param_force" ]; then
+        echo "The installed database module is not MariaDB. See 'hestia module info mydb'."
         return 1
     fi
 
-    echo "Removing MTA (Exim) module..."
+    echo "Removing database (MariaDB) module..."
 
-    if hestia_module_variant_installed 'antivirus' 'clamav'; then
-        $BIN/hestia module clamav exim-integration disable
-    fi
-
-    if hestia_module_variant_installed 'antispam' 'spamassassin'; then
-        $BIN/hestia module spamassassin exim-integration disable
-    fi
-
-    osal_service_stop $OSAL_SERVICE_EXIM > /dev/null 2>&1
-    osal_service_disable $OSAL_SERVICE_EXIM > /dev/null 2>&1
+    osal_service_stop $OSAL_SERVICE_MARIADB > /dev/null 2>&1
+    osal_service_disable $OSAL_SERVICE_MARIADB > /dev/null 2>&1
 
-    hestia_config_backup 'exim-remove' "$OSAL_DIR_EXIM_CONF"
+    hestia_config_backup 'mariadb-remove' $OSAL_PATH_MARIADB_CONF $OSAL_DIR_MARIADB_CONF_D
 
-    osal_package_remove $OSAL_PKG_EXIM
+    osal_package_remove ${OSAL_PKG_MARIADB}-server
 
-    osal_kv_write $HESTIA/conf/hestia.conf 'MAIL_SYSTEM' ''
-    osal_kv_write $HESTIA_CONF_MODULES/mta.conf 'installed' '0'
-    osal_kv_write $HESTIA_CONF_MODULES/mta.conf 'description' ''
-    osal_kv_write $HESTIA_CONF_MODULES/mta.conf 'enabled' '0'
-    osal_kv_write $HESTIA_CONF_MODULES/mta.conf 'variant' ''
-    osal_kv_write $HESTIA_CONF_MODULES/mta.conf 'version' '0'
+    osal_kv_write $HESTIA/conf/hestia.conf 'DB_SYSTEM' ''
+    osal_kv_write $HESTIA_CONF_MODULES/mydb.conf 'installed' '0'
+    osal_kv_write $HESTIA_CONF_MODULES/mydb.conf 'description' ''
+    osal_kv_write $HESTIA_CONF_MODULES/mydb.conf 'enabled' '0'
+    osal_kv_write $HESTIA_CONF_MODULES/mydb.conf 'variant' ''
+    osal_kv_write $HESTIA_CONF_MODULES/mydb.conf 'version' '0'
 }

+ 38 - 0
bin/module/mariadb/reset-password.inc

@@ -0,0 +1,38 @@
+#!/bin/bash
+
+hestia_module_mariadb_reset-password() {
+    source $HESTIA/bin/module/func.inc
+
+    if ! hestia_module_isinstalled 'mydb' && [ ! "$param_force" ]; then
+        echo "MySQL/MariaDB database module is not installed. See 'hestia module info mydb'."
+        return 1
+    fi
+
+    module_variant=$(hestia_module_getvariant 'mydb')
+    if [ "$module_variant" != 'mariadb' ] && [ ! "$param_force" ]; then
+        echo "The installed database module is not MariaDB. See 'hestia module info mydb'."
+        return 1
+    fi
+
+    echo "Resetting MariaDB server root password..."
+
+    osal_service_stop $OSAL_SERVICE_MARIADB
+    check_result $? "MariaDB stop failed"
+
+    local mariadb_root_password=$(osal_gen_pass)
+
+    mysqld_safe --skip-grant-tables --skip-networking &
+    sleep 2
+    mysql -e "FLUSH PRIVILEGES;"
+    mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$mariadb_root_password';"
+    mysql -e "FLUSH PRIVILEGES;"
+
+    echo -e "[client]\npassword='$mariadb_root_password'\n" > /root/.my.cnf
+    chmod 600 /root/.my.cnf
+
+    kill `cat /var/run/mysqld/mysqld.pid`
+
+    osal_service_start $OSAL_SERVICE_MARIADB
+
+    echo "The root password for the MariaDB server is now '$mariadb_root_password'"
+}

+ 42 - 0
func/osal.sh

@@ -37,6 +37,37 @@ do
     fi
 done
 
+# service_start 'service-name'
+osal_service_start() {
+    [ "$HESTIA_DEBUG" ] && >&2 echo Start service $1
+    /usr/bin/systemctl start ${1}.service
+}
+
+# service_stop 'service-name'
+osal_service_stop() {
+    [ "$HESTIA_DEBUG" ] && >&2 echo Stop service $1
+    /usr/bin/systemctl stop ${1}.service
+}
+
+# service_restart 'service-name'
+osal_service_restart() {
+    [ "$HESTIA_DEBUG" ] && >&2 echo Restart service $1
+    /usr/bin/systemctl restart ${1}.service
+}
+
+# service_enable 'service-name'
+osal_service_enable() {
+    [ "$HESTIA_DEBUG" ] && >&2 echo Enable service $1
+    /usr/bin/systemctl enable ${1}.service
+}
+
+# service_disable 'service-name'
+osal_service_disable() {
+    [ "$HESTIA_DEBUG" ] && >&2 echo Disable service $1
+    /usr/bin/systemctl disable ${1}.service
+}
+
+
 # VAR=$(ini_get 'file' 'section' 'param' 'value')
 osal_ini_get() {
     #echo /usr/bin/crudini --get $@
@@ -147,3 +178,14 @@ osal_execute_with_spinner() {
         echo
     fi
 }
+
+# Generates a random password
+osal_gen_pass() {
+    local MATRIX='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
+    local LENGTH=16
+    while [ ${n:=1} -le $LENGTH ]; do
+        PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
+        let n+=1
+    done
+    echo "$PASS"
+}

+ 11 - 25
func/osal_debian_based.sh

@@ -49,6 +49,15 @@ OSAL_FILENAME_EXIM_CONF="exim4.conf.template"
 OSAL_DIR_EXIM_CONF=/etc/exim4
 OSAL_PATH_EXIM_CONF="${OSAL_DIR_EXIM_CONF}/${OSAL_FILENAME_EXIM_CONF}"
 
+# MariaDB
+OSAL_PKG_MARIADB=mariadb
+OSAL_SERVICE_MARIADB=mariadb
+OSAL_DIR_MARIADB_CONF=/etc/mysql
+OSAL_DIR_MARIADB_CONF_D=/etc/mysql/mariadb.conf.d
+OSAL_FILENAME_MARIADB_CONF=my.cnf
+OSAL_PATH_MARIADB_CONF="$OSAL_DIR_MARIADB_CONF/$OSAL_FILENAME_MARIADB_CONF"
+OSAL_PATH_MARIADB_DATA=/var/lib/mysql
+
 # Nginx
 OSAL_SERVICE_NGINX=nginx
 OSAL_USER_NGINX=nginx
@@ -94,39 +103,16 @@ osal_package_preinstall() {
 
 # package_install 'package' 'package' ...
 osal_package_install() {
+    [ "$HESTIA_DEBUG" ] && >&2 echo $OSAL_CMD_PACKAGE_MANAGER -y -qq install -o Dpkg::Options::="--force-confold" "$@"
     $OSAL_CMD_PACKAGE_MANAGER -y -qq install -o Dpkg::Options::="--force-confold" "$@"
 }
 
 # package_remoev 'package' 'package' ...
 osal_package_remove() {
+    [ "$HESTIA_DEBUG" ] && >&2 echo $OSAL_CMD_PACKAGE_MANAGER -y -qq purge "$@"
     $OSAL_CMD_PACKAGE_MANAGER -y -qq purge "$@"
 }
 
-# service_start 'service-name'
-osal_service_start() {
-    /usr/bin/systemctl start ${1}.service
-}
-
-# service_stop 'service-name'
-osal_service_stop() {
-    /usr/bin/systemctl stop ${1}.service
-}
-
-# service_restart 'service-name'
-osal_service_restart() {
-    /usr/bin/systemctl restart ${1}.service
-}
-
-# service_enable 'service-name'
-osal_service_enable() {
-    /usr/bin/systemctl enable ${1}.service
-}
-
-# service_disable 'service-name'
-osal_service_disable() {
-    /usr/bin/systemctl disable ${1}.service
-}
-
 # Software-specific
 
 # apache_module_isenabled 'module_name' = (1|null)

+ 11 - 25
func/osal_rhel_based.sh

@@ -48,6 +48,15 @@ OSAL_FILENAME_EXIM_CONF="${OSAL_PKG_EXIM}.conf"
 OSAL_DIR_EXIM_CONF=/etc/exim
 OSAL_PATH_EXIM_CONF="${OSAL_DIR_EXIM_CONF}/${OSAL_FILENAME_EXIM_CONF}"
 
+# MariaDB
+OSAL_PKG_MARIADB=MariaDB
+OSAL_SERVICE_MARIADB=mariadb
+OSAL_DIR_MARIADB_CONF=/etc
+OSAL_DIR_MARIADB_CONF_D=/etc/my.cnf.d
+OSAL_FILENAME_MARIADB_CONF=my.cnf
+OSAL_PATH_MARIADB_CONF="$OSAL_DIR_MARIADB_CONF/$OSAL_FILENAME_MARIADB_CONF"
+OSAL_PATH_MARIADB_DATA=/var/lib/mysql
+
 # Nginx
 OSAL_SERVICE_NGINX=nginx
 OSAL_USER_NGINX=nginx
@@ -93,39 +102,16 @@ osal_package_preinstall() {
 
 # package_install 'package' 'package' ...
 osal_package_install() {
+    [ "$HESTIA_DEBUG" ] && >&2 echo $OSAL_CMD_PACKAGE_MANAGER -q -y install "$@"
     $OSAL_CMD_PACKAGE_MANAGER -q -y install "$@"
 }
 
 # package_remoev 'package' 'package' ...
 osal_package_remove() {
+    [ "$HESTIA_DEBUG" ] && >&2 $OSAL_CMD_PACKAGE_MANAGER -q -y remove "$@"
     $OSAL_CMD_PACKAGE_MANAGER -q -y remove "$@"
 }
 
-# service_start 'service-name'
-osal_service_start() {
-    /usr/bin/systemctl start ${1}.service
-}
-
-# service_stop 'service-name'
-osal_service_stop() {
-    /usr/bin/systemctl stop ${1}.service
-}
-
-# service_restart 'service-name'
-osal_service_restart() {
-    /usr/bin/systemctl restart ${1}.service
-}
-
-# service_enable 'service-name'
-osal_service_enable() {
-    /usr/bin/systemctl enable ${1}.service > /dev/null
-}
-
-# service_disable 'service-name'
-osal_service_disable() {
-    /usr/bin/systemctl disable ${1}.service /dev/null
-}
-
 # Software-specific
 
 # apache_module_isenabled 'module_name' = (1|null)