You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hestiacp/func/upgrade.sh

851 lines
29 KiB

#!/bin/bash
#===========================================================================#
# #
# Hestia Control Panel - Upgrade Function Library #
# #
#===========================================================================#
# Import system health check and repair library
# shellcheck source=/usr/local/hestia/func/syshealth.sh
source $HESTIA/func/syshealth.sh
#####################################################################
####### Functions & Initialization #######
#####################################################################
add_upgrade_message() {
if [ -f "$HESTIA_BACKUP/message.log" ]; then
echo -e $1 >> $HESTIA_BACKUP/message.log
echo -e "\n\n" >> $HESTIA_BACKUP/message.log
else
echo -e $1 > $HESTIA_BACKUP/message.log
fi
}
is_debug_build() {
if [[ "$new_version" =~ "alpha" ]] || [[ "$new_version" =~ "beta" ]]; then
DEBUG_MODE="true"
fi
# Remove pre-release designation tags from display version
DISPLAY_VER=$(echo $new_version | sed "s|~alpha||g" | sed "s|~beta||g")
}
upgrade_health_check() {
echo "============================================================================="
echo "[ ! ] Performing system health check before proceeding with installation... "
# Perform basic health check against hestia.conf to ensure that
# system variables exist and are set to expected defaults.
if [ -z "$VERSION" ]; then
export VERSION="1.1.0"
$BIN/v-change-sys-config-value 'VERSION' "$VERSION"
echo
echo "[ ! ] Unable to detect installed version of Hestia Control Panel."
echo " Setting default version to $VERSION and processing upgrade steps."
echo
fi
syshealth_repair_system_config
echo "[ * ] Health check complete. Starting upgrade from $VERSION to $new_version..."
echo "============================================================================="
}
upgrade_welcome_message() {
echo
echo ' _ _ _ _ ____ ____ '
echo ' | | | | ___ ___| |_(_) __ _ / ___| _ \ '
echo ' | |_| |/ _ \/ __| __| |/ _` | | | |_) | '
echo ' | _ | __/\__ \ |_| | (_| | |___| __/ '
echo ' |_| |_|\___||___/\__|_|\__,_|\____|_| '
echo " "
echo " Hestia Control Panel Software Update "
echo " Version: ${DISPLAY_VER}"
if [[ "$new_version" =~ "beta" ]]; then
echo " BETA RELEASE "
fi
if [[ "$new_version" =~ "alpha" ]]; then
echo " DEVELOPMENT SNAPSHOT "
echo " NOT INTENDED FOR PRODUCTION USE "
echo " USE AT YOUR OWN RISK "
fi
echo
echo "============================================================================="
echo
echo "[ ! ] IMPORTANT INFORMATION: "
echo
echo "Default configuration files and templates may be modified or replaced "
echo "during the upgrade process. You may restore these files from: "
echo ""
echo "Backup directory: $HESTIA_BACKUP/"
echo "Installation log: $LOG"
}
upgrade_welcome_message_log() {
echo "============================================================================="
echo "Hestia Control Panel Software Update Log"
echo "============================================================================="
echo
echo "OPERATING SYSTEM: $OS_TYPE ($OS_VERSION)"
echo "CURRENT VERSION: $VERSION"
echo "NEW VERSION: $new_version"
echo "RELEASE BRANCH: $RELEASE_BRANCH"
if [[ "$new_version" =~ "alpha" ]]; then
echo "BUILD TYPE: Development snapshot"
elif [[ "$new_version" =~ "beta" ]]; then
echo "BUILD TYPE: Beta release"
else
echo "BUILD TYPE: Production release"
fi
echo
echo "INSTALLER OPTIONS:"
echo "============================================================================="
echo "Send email notification on upgrade complete: $UPGRADE_SEND_EMAIL"
echo "Send installed log output to admin email: $UPGRADE_SEND_EMAIL_LOG"
echo
}
upgrade_step_message() {
echo
echo "[ - ] Now applying patches and updates for version v$version_step..."
}
upgrade_complete_message() {
# Echo message to console output
echo "============================================================================="
echo
echo "Upgrade complete! If you encounter any issues or find a bug, "
echo
echo "We hope that you enjoy using this version of Hestia Control Panel, "
echo "have a wonderful day! "
echo
echo "Sincerely, "
echo "The Hestia Control Panel development team "
echo
echo
echo "Made with love & pride by the open-source community around the world. "
echo
echo "============================================================================="
echo
}
upgrade_complete_message_log() {
echo
echo "============================================================================="
echo "UPGRADE COMPLETE. "
echo "============================================================================="
echo
$BIN/v-log-action "system" "Info" "Updates" "Update installed (Version: $new_version)."
}
upgrade_cleanup_message() {
echo "============================================================================="
echo "Installation tasks complete, performing clean-up... "
echo "============================================================================="
}
upgrade_get_version() {
# Retrieve new version number for Hestia Control Panel from .deb package
new_version=$(dpkg -l | awk '$2=="hestia" { print $3 }')
}
upgrade_set_version() {
# Set new version number in hestia.conf
$BIN/v-change-sys-config-value "VERSION" "$@"
}
upgrade_set_branch() {
# Set branch in hestia.conf
DISPLAY_VER=$(echo "$1" | sed "s|~alpha||g" | sed "s|~beta||g")
if [ "$DISPLAY_VER" = "$1" ]; then
$BIN/v-change-sys-config-value "RELEASE_BRANCH" "release"
fi
}
upgrade_send_notification_to_panel() {
# Add notification to panel if variable is set to true or is not set
if [[ "$new_version" =~ "alpha" ]]; then
# Send notifications for development releases
$BIN/v-add-user-notification admin 'Development snapshot installed' '<p><span class="u-text-bold">Version:</span> '$new_version'<br><span class="u-text-bold">Code Branch:</span> '$RELEASE_BRANCH'</p><p>Please report any bugs by <a href="https://github.com/hestiacp/hestiacp/issues" target="_blank">opening an issue on GitHub</a>, and feel free to share your feedback on our <a href="https://forum.hestiacp.com" target="_blank">discussion forum</a>.</p><p><i class="fas fa-heart icon-red"></i> The Hestia Control Panel development team</p>'
elif [[ "$new_version" =~ "beta" ]]; then
# Send feedback notification for beta releases
$BIN/v-add-user-notification admin 'Thank you for testing Hestia Control Panel '$new_version'.' '<p>Please share your feedback with our development team through our <a href="https://forum.hestiacp.com" target="_blank">discussion forum</a>.</p><p>Found a bug? <a href="https://github.com/hestiacp/hestiacp/issues" target="_blank">Open an issue on GitHub</a>!</p><p><i class="fas fa-heart icon-red"></i> The Hestia Control Panel development team</p>'
else
# Send normal upgrade complete notification for stable releases
$BIN/v-add-user-notification admin 'Upgrade complete' '<p>Hestia Control Panel has been updated to <span class="u-text-bold">v'$new_version'</span>.</p><p><a href="https://github.com/hestiacp/hestiacp/blob/release/CHANGELOG.md" target="_blank">View release notes</a></p><p>Please report any bugs by <a href="https://github.com/hestiacp/hestiacp/issues" target="_blank">opening an issue on GitHub</a>.</p><p class="u-text-bold">Have a wonderful day!</p><p><i class="fas fa-heart icon-red"></i> The Hestia Control Panel development team</p>'
fi
}
upgrade_send_notification_to_email() {
if [ "$UPGRADE_SEND_EMAIL" = "true" ]; then
# Retrieve admin email address, sendmail path, and message temp file path
admin_email=$($BIN/v-list-user admin json | grep "CONTACT" | cut -d'"' -f4)
send_mail="$HESTIA/web/inc/mail-wrapper.php"
message_tmp_file="/tmp/hestia-upgrade-complete.txt"
# Create temporary file
touch $message_tmp_file
# Write message to file
echo "$HOSTNAME has been upgraded from Hestia Control Panel v$VERSION to v${new_version}." >> $message_tmp_file
echo "Installation log: $LOG" >> $message_tmp_file
echo "" >> $message_tmp_file
# Check for additional upgrade notes from update scripts.
if [[ -f "$HESTIA_BACKUP/message.log" ]]; then
echo "===================================================" >> $message_tmp_file
echo "The upgrade script has generated additional notifications, which must be heeded urgently:" >> $message_tmp_file
echo "" >> $message_tmp_file
cat $HESTIA_BACKUP/message.log >> $message_tmp_file
echo "" >> $message_tmp_file
echo "===================================================" >> $message_tmp_file
echo "" >> $message_tmp_file
fi
# Read back message from file and pass through to sendmail
cat $message_tmp_file | $send_mail -s "Update Installed - v${new_version}" $admin_email
rm -f $message_tmp_file
fi
}
upgrade_send_log_to_email() {
if [ "$UPGRADE_SEND_EMAIL_LOG" = "true" ]; then
admin_email=$($BIN/v-list-user admin json | grep "CONTACT" | cut -d'"' -f4)
send_mail="$HESTIA/web/inc/mail-wrapper.php"
cat $LOG | $send_mail -s "Update Installation Log - v${new_version}" $admin_email
fi
}
upgrade_config_set_value() {
if [ -f "$HESTIA_BACKUP/upgrade.conf" ]; then
if [ "$2" = "true" ]; then
sed -i "s/$1='false'/$1='true'/g" $HESTIA_BACKUP/upgrade.conf
fi
fi
}
prepare_upgrade_config() {
mkdir -p $HESTIA_BACKUP
touch $HESTIA_BACKUP/upgrade.conf
while IFS='= ' read -r lhs rhs; do
if [[ ! $lhs =~ ^\ *# && -n $lhs ]]; then
rhs="${rhs%%\#*}" # Del in line right comments
rhs="${rhs%%*( )}" # Del trailing spaces
rhs="${rhs%\'*}" # Del opening string quotes
rhs="${rhs#\'*}" # Del closing string quotes
echo "$lhs='$rhs'" >> $HESTIA_BACKUP/upgrade.conf
fi
done < "$HESTIA/install/upgrade/upgrade.conf"
}
upgrade_init_backup() {
# Ensure that backup directories are created
# Hestia Control Panel configuration files
mkdir -p $HESTIA_BACKUP/conf/hestia/
# OpenSSL configuration files
mkdir -p $HESTIA_BACKUP/conf/openssl/
# Hosting Packages
mkdir -p $HESTIA_BACKUP/packages/
# Domain template files
mkdir -p $HESTIA_BACKUP/templates/
# System services (apache2, nginx, bind9, vsftpd, etc).
if [ -n "$WEB_SYSTEM" ]; then
mkdir -p $HESTIA_BACKUP/conf/$WEB_SYSTEM/
fi
if [ -n "$IMAP_SYSTEM" ]; then
mkdir -p $HESTIA_BACKUP/conf/$IMAP_SYSTEM/
fi
if [ -n "$MAIL_SYSTEM" ]; then
mkdir -p $HESTIA_BACKUP/conf/$MAIL_SYSTEM/
fi
if [ -n "$DNS_SYSTEM" ]; then
mkdir -p $HESTIA_BACKUP/conf/$DNS_SYSTEM/
fi
if [ -n "$PROXY_SYSTEM" ]; then
mkdir -p $HESTIA_BACKUP/conf/$PROXY_SYSTEM/
fi
if [ -n "$DB_SYSTEM" ]; then
if [[ "$DB_SYSTEM" =~ "mysql" ]]; then
mkdir -p $HESTIA_BACKUP/conf/mysql/
fi
if [[ "$DB_SYSTEM" =~ "pgsql" ]]; then
mkdir -p $HESTIA_BACKUP/conf/pgsql/
fi
fi
if [ -n "$FTP_SYSTEM" ]; then
mkdir -p $HESTIA_BACKUP/conf/$FTP_SYSTEM/
fi
if [ -n "$FIREWALL_SYSTEM" ]; then
mkdir -p $HESTIA_BACKUP/conf/$FIREWALL_SYSTEM/
fi
if [ -n "$FIREWALL_EXTENSION" ]; then
mkdir -p $HESTIA_BACKUP/conf/$FIREWALL_EXTENSION/
fi
if [ -e "/etc/ssh/sshd_config" ]; then
mkdir -p $HESTIA_BACKUP/conf/ssh/
fi
if [ -d "/etc/roundcube/" ]; then
mkdir -p $HESTIA_BACKUP/conf/roundcube/
fi
if [ -d "/etc/snappymail/" ]; then
mkdir -p $HESTIA_BACKUP/conf/snappymail/
fi
if [ -d "/etc/phpmyadmin/" ]; then
mkdir -p $HESTIA_BACKUP/conf/phpmyadmin/
fi
if [ -d "/etc/phppgadmin/" ]; then
mkdir -p $HESTIA_BACKUP/conf/phppgadmin/
fi
}
upgrade_init_logging() {
# Set log file path
LOG="$HESTIA_BACKUP/hst-upgrade-$(date +%d%m%Y%H%M).log"
# Create log file
touch $LOG
# Add message to system log
$BIN/v-log-action "system" "Info" "Updates" "Started update installation (Latest: $new_version, Previous: $VERSION)."
# Add warnings for pre-release builds
if [[ "$new_version" =~ "alpha" ]]; then
$BIN/v-log-action "system" "Warning" "Updates" "Development build for testing purposes only. Report bugs at https://github.com/hestiacp/hestiacp/issues/."
fi
if [[ "$new_version" =~ "beta" ]]; then
$BIN/v-log-action "system" "Warning" "Updates" "Beta release. Please report bugs at https://github.com/hestiacp/hestiacp/issues/."
fi
}
upgrade_start_backup() {
echo "============================================================================="
echo "[ * ] Backing up existing templates and configuration files..."
if [ "$DEBUG_MODE" = "true" ]; then
echo " - Packages"
fi
cp -fr $HESTIA/data/packages/* $HESTIA_BACKUP/packages/
if [ "$DEBUG_MODE" = "true" ]; then
echo " - Templates"
fi
cp -fr $HESTIA/data/templates/* $HESTIA_BACKUP/templates/
if [ "$DEBUG_MODE" = "true" ]; then
echo " - Configuration files:"
fi
# Hestia Control Panel configuration files
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- hestia"
fi
cp -fr $HESTIA/conf/* $HESTIA_BACKUP/conf/hestia/
# OpenSSL configuration files
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- openssl"
fi
cp -f /etc/ssl/*.cnf $HESTIA_BACKUP/conf/openssl/
# System service configuration files (apache2, nginx, bind9, vsftpd, etc).
if [ -n "$WEB_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- $WEB_SYSTEM"
fi
cp -fr /etc/$WEB_SYSTEM/* $HESTIA_BACKUP/conf/$WEB_SYSTEM/
fi
if [ -n "$PROXY_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- $PROXY_SYSTEM"
fi
cp -fr /etc/$PROXY_SYSTEM/* $HESTIA_BACKUP/conf/$PROXY_SYSTEM/
fi
if [ -n "$IMAP_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- $IMAP_SYSTEM"
fi
cp -fr /etc/$IMAP_SYSTEM/* $HESTIA_BACKUP/conf/$IMAP_SYSTEM/
fi
if [ -n "$MAIL_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- $MAIL_SYSTEM"
fi
cp -fr /etc/$MAIL_SYSTEM/* $HESTIA_BACKUP/conf/$MAIL_SYSTEM/
fi
if [ -n "$DNS_SYSTEM" ]; then
if [ "$DNS_SYSTEM" = "bind9" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- $DNS_SYSTEM"
fi
cp -fr /etc/bind/* $HESTIA_BACKUP/conf/$DNS_SYSTEM/
fi
fi
if [ -n "$DB_SYSTEM" ]; then
if [[ "$DB_SYSTEM" =~ "mysql" ]]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- mysql"
fi
cp -fr /etc/mysql/* $HESTIA_BACKUP/conf/mysql/
fi
if [[ "$DB_SYSTEM" =~ "pgsql" ]]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- pgsql"
fi
# config for postgresql is stored in /etc/postgresql/version/main/
cp -fr /etc/postgresql/* $HESTIA_BACKUP/conf/pgsql/
fi
fi
if [ -n "$FTP_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- $FTP_SYSTEM"
fi
if [ "$FTP_SYSTEM" = "vsftpd" ]; then
cp -f /etc/$FTP_SYSTEM.conf $HESTIA_BACKUP/conf/$FTP_SYSTEM/
fi
if [ "$FTP_SYSTEM" = "proftpd" ]; then
cp -f /etc/proftpd/proftpd.conf $HESTIA_BACKUP/conf/$FTP_SYSTEM/
fi
fi
if [ -n "$FIREWALL_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- $FIREWALL_SYSTEM"
fi
[ -e "/etc/sysconfig/iptables" ] && cp -f /etc/sysconfig/iptables $HESTIA_BACKUP/conf/$FIREWALL_SYSTEM/
[ -e "/etc/iptables.rules" ] && cp -f /etc/iptables.rules $HESTIA_BACKUP/conf/$FIREWALL_SYSTEM/
fi
if [ -n "$FIREWALL_EXTENSION" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- $FIREWALL_EXTENSION"
fi
cp -f /etc/$FIREWALL_EXTENSION/*.conf $HESTIA_BACKUP/conf/$FIREWALL_EXTENSION/
cp -f /etc/$FIREWALL_EXTENSION/*.local $HESTIA_BACKUP/conf/$FIREWALL_EXTENSION/
fi
if [ -e "/etc/ssh/sshd_config" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- sshd"
fi
cp -fr /etc/ssh/* $HESTIA_BACKUP/conf/ssh/
fi
if [ -d "/etc/roundcube" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- Roundcube"
fi
cp -fr /etc/roundcube/* $HESTIA_BACKUP/conf/roundcube
fi
if [ -d "/etc/snappymail" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- SnappyMail"
fi
cp -fr /etc/snappymail/* $HESTIA_BACKUP/conf/snappymail
fi
if [ -d "/etc/phpmyadmin" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- phpMyAdmin"
fi
cp -fr /etc/phpmyadmin/* $HESTIA_BACKUP/conf/phpmyadmin
fi
if [ -d "/etc/phppgadmin" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- phppgadmin"
fi
cp -fr /etc/phppgadmin/* $HESTIA_BACKUP/conf/phppgadmin
fi
}
upgrade_refresh_config() {
source_conf "/usr/local/hestia/conf/hestia.conf"
}
upgrade_start_routine() {
# Parse version numbers for comparison
function check_version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
# Remove pre-release designation from version number for upgrade scripts
VERSION=$(echo "$VERSION" | sed "s/~\([a-zA-Z0-9].*\)//g")
# Get list of all available version steps and create array
upgrade_steps=$(ls -v $HESTIA/install/upgrade/versions/*.sh)
for script in $upgrade_steps; do
declare -a available_versions
available_versions+=($(echo $script | sed "s|/usr/local/hestia/install/upgrade/versions/||g" | sed "s|.sh||g"))
done
# Define variables for accessing supported versions
# Sort version by -V due to issues with version numbers 1.4.10 and higher
all_versions=$(printf "%s\n" "${available_versions[@]}" | sort -V)
oldest_version=$(printf "%s\n" "$all_versions" | head -n1)
latest_version=$(printf "%s\n" "$all_versions" | sort -V | tail -n1)
# Check for supported versions and process necessary upgrade steps
if [ $(check_version $latest_version) -gt $(check_version $VERSION) ]; then
for version_step in "${available_versions[@]}"; do
if [ $(check_version $VERSION) -lt $(check_version "$version_step") ]; then
upgrade_step_message
source $HESTIA/install/upgrade/versions/$version_step.sh
fi
done
upgrade_set_version "$VERSION"
upgrade_refresh_config
else
echo ""
echo "[ ! ] The latest version of Hestia Control Panel is already installed."
echo " Verifying configuration..."
echo ""
if [ -e "$HESTIA/install/upgrade/versions/$VERSION.sh" ]; then
source $HESTIA/install/upgrade/versions/$VERSION.sh
fi
VERSION="$new_version"
upgrade_set_version "$VERSION"
upgrade_refresh_config
fi
#####################################################################
####### End version-specific upgrade instruction sets #######
#####################################################################
}
upgrade_b2_tool() {
b2cli="/usr/local/bin/b2"
b2lnk="https://github.com/Backblaze/B2_Command_Line_Tool/releases/download/v$b2_v/b2-linux"
if [ -f "$b2cli" ]; then
b2_version=$($b2cli version | grep -o -E '[0-9].[0-9].[0-9]+' | head -1)
if version_ge "$b2_version" "$b2_v"; then
echo "[ * ] Backblaze CLI tool is up to date ($b2_v)..."
else
echo "[ * ] Upgrading Backblaze CLI tool to version $b2_v..."
rm $b2cli
wget -O $b2cli $b2lnk > /dev/null 2>&1
chmod +x $b2cli > /dev/null 2>&1
if [ ! -f "$b2cli" ]; then
echo "Error: Binary download failed, b2 doesn't work as expected."
exit 3
fi
fi
fi
}
upgrade_cloudflare_ip() {
if [ "$WEB_SYSTEM" = "nginx" ] || [ "$PROXY_SYSTEM" = "nginx" ]; then
cf_ips="$(curl -fsLm5 --retry 2 https://api.cloudflare.com/client/v4/ips)"
if [ -n "$cf_ips" ] && [ "$(echo "$cf_ips" | jq -r '.success//""')" = "true" ]; then
cf_inc="/etc/nginx/conf.d/cloudflare.inc"
echo "[ * ] Updating Cloudflare IP Ranges for NGINX..."
echo "# Cloudflare IP Ranges" > $cf_inc
echo "" >> $cf_inc
echo "# IPv4" >> $cf_inc
for ipv4 in $(echo "$cf_ips" | jq -r '.result.ipv4_cidrs[]//""' | sort); do
echo "set_real_ip_from $ipv4;" >> $cf_inc
done
echo "" >> $cf_inc
echo "# IPv6" >> $cf_inc
for ipv6 in $(echo "$cf_ips" | jq -r '.result.ipv6_cidrs[]//""' | sort); do
echo "set_real_ip_from $ipv6;" >> $cf_inc
done
echo "" >> $cf_inc
echo "real_ip_header CF-Connecting-IP;" >> $cf_inc
fi
fi
}
upgrade_phppgadmin() {
if [ -n "$(echo $DB_SYSTEM | grep -w 'pgsql')" ]; then
pga_release=$(cat /usr/share/phppgadmin/libraries/lib.inc.php | grep appVersion | head -n1 | cut -f2 -d\' | cut -f1 -d-)
if version_ge "$pga_release" "pga_v"; then
echo "[ * ] phppgadmin is up to date ($pga_release)..."
else
# Display upgrade information
echo "[ * ] Upgrading phppgadmin to version $pga_v..."
[ -d /usr/share/phppgadmin ] || mkdir -p /usr/share/phppgadmin
# Download latest phpMyAdmin release
wget --retry-connrefused --quiet https://github.com/hestiacp/phppgadmin/releases/download/v$pga_v/phppgadmin-v$pga_v.tar.gz
tar xzf phppgadmin-v$pga_v.tar.gz -C /usr/share/phppgadmin/
if ! version_ge "$pga_release" "7.14.0"; then
cp -f $HESTIA_INSTALL_DIR/pga/config.inc.php /etc/phppgadmin/
fi
if [ ! -f /usr/share/phppgadmin/conf/config.inc.php ]; then
ln -s /etc/phppgadmin/config.inc.php /usr/share/phppgadmin/conf
fi
rm -f phppgadmin-v$pga_v.tar.gz
fi
fi
}
upgrade_phpmyadmin() {
WWW_USER="www-data"
if [ -f /etc/redhat-release ]; then
WWW_USER="apache"
fi
# Check if MariaDB/MySQL is installed on the server before attempting to install or upgrade phpMyAdmin
if [ -n "$(echo $DB_SYSTEM | grep -w 'mysql')" ]; then
pma_version=$(jq -r .version /usr/share/phpmyadmin/package.json)
if version_ge "$pma_version" "$pma_v"; then
echo "[ * ] phpMyAdmin is up to date (${pma_version})..."
# Update permissions
if [ -e /var/lib/phpmyadmin/blowfish_secret.inc.php ]; then
chown root:$WWW_USER /var/lib/phpmyadmin/blowfish_secret.inc.php
chmod 0640 /var/lib/phpmyadmin/blowfish_secret.inc.php
fi
else
# Display upgrade information
echo "[ * ] Upgrading phpMyAdmin to version $pma_v..."
[ -d /usr/share/phpmyadmin ] || mkdir -p /usr/share/phpmyadmin
# Download latest phpMyAdmin release
wget --quiet https://files.phpmyadmin.net/phpMyAdmin/$pma_v/phpMyAdmin-$pma_v-all-languages.tar.gz
# Unpack files
tar xzf phpMyAdmin-$pma_v-all-languages.tar.gz
# Delete file to prevent error
rm -rf /usr/share/phpmyadmin/doc/html
# Overwrite old files
cp -rf phpMyAdmin-$pma_v-all-languages/* /usr/share/phpmyadmin
# Set config and log directory
sed -i "s|'configFile' => ROOT_PATH . 'config.inc.php',|'configFile' => '/etc/phpmyadmin/config.inc.php',|g" /usr/share/phpmyadmin/libraries/vendor_config.php
# Create temporary folder and change permissions
if [ ! -d /usr/share/phpmyadmin/tmp ]; then
mkdir /usr/share/phpmyadmin/tmp
chown root:$WWW_USER /usr/share/phpmyadmin/tmp
chmod 0770 /usr/share/phpmyadmin/tmp
fi
if [ -e /var/lib/phpmyadmin/blowfish_secret.inc.php ]; then
chown root:$WWW_USER /var/lib/phpmyadmin/blowfish_secret.inc.php
chmod 0640 /var/lib/phpmyadmin/blowfish_secret.inc.php
fi
# Clean up source files
rm -fr phpMyAdmin-$pma_v-all-languages
rm -f phpMyAdmin-$pma_v-all-languages.tar.gz
fi
fi
}
upgrade_filemanager() {
FILE_MANAGER_CHECK=$(cat $HESTIA/conf/hestia.conf | grep "FILE_MANAGER='false'")
if [ -z "$FILE_MANAGER_CHECK" ]; then
if [ -f "$HESTIA/web/fm/version" ]; then
fm_version=$(cat $HESTIA/web/fm/version)
else
fm_version="1.0.0"
fi
if ! version_ge "$fm_version" "$fm_v"; then
echo "[ ! ] Upgrading File Manager to version $fm_v..."
# Reinstall the File Manager
$BIN/v-delete-sys-filemanager quiet yes
$BIN/v-add-sys-filemanager quiet
else
echo "[ * ] File Manager is up to date ($fm_v)..."
if [ "$UPGRADE_UPDATE_FILEMANAGER_CONFIG" = "true" ]; then
if [ -e "$HESTIA/web/fm/configuration.php" ]; then
echo "[ ! ] Updating File Manager configuration..."
# Update configuration.php
cp -f $HESTIA_INSTALL_DIR/filemanager/filegator/configuration.php $HESTIA/web/fm/configuration.php
# Set environment variable for interface
$BIN/v-change-sys-config-value 'FILE_MANAGER' 'true'
fi
fi
fi
fi
}
upgrade_roundcube() {
if [ -n "$(echo "$WEBMAIL_SYSTEM" | grep -w 'roundcube')" ]; then
if [ -d "/usr/share/roundcube" ]; then
echo "[ ! ] Roundcube: Updates are currently managed using the apt package manager"
echo " To upgrade to the latest version of Roundcube directly from upstream, from please run the command migrate_roundcube.sh located in: /usr/local/hestia/install/upgrade/manual/"
else
rc_version=$(cat /var/lib/roundcube/index.php | grep -o -E '[0-9].[0-9].[0-9]+' | head -1)
if ! version_ge "$rc_version" "$rc_v"; then
echo "[ ! ] Upgrading Roundcube to version $rc_v..."
$BIN/v-add-sys-roundcube
else
echo "[ * ] Roundcube is up to date ($rc_v)..."
fi
fi
fi
}
upgrade_snappymail() {
if [ -n "$(echo "$WEBMAIL_SYSTEM" | grep -w 'snappymail')" ]; then
sm_version=$(cat /var/lib/snappymail/data/VERSION)
if ! version_ge "$sm_version" "$sm_v"; then
echo "[ ! ] Upgrading SnappyMail to version $sm_v..."
$BIN/v-add-sys-snappymail
else
echo "[ * ] SnappyMail is up to date ($sm_v)..."
fi
fi
}
upgrade_dependencies() {
echo "[ ! ] Update Hestia PHP dependencies..."
$BIN/v-add-sys-dependencies
}
upgrade_rebuild_web_templates() {
if [ "$UPGRADE_UPDATE_WEB_TEMPLATES" = "true" ]; then
echo "[ ! ] Updating default web domain templates..."
$BIN/v-update-web-templates "no" "skip"
fi
}
upgrade_rebuild_mail_templates() {
if [ "$UPGRADE_UPDATE_MAIL_TEMPLATES" = "true" ]; then
echo "[ ! ] Updating default mail domain templates..."
$BIN/v-update-mail-templates "no" "skip"
fi
}
upgrade_rebuild_dns_templates() {
if [ "$UPGRADE_UPDATE_DNS_TEMPLATES" = "true" ]; then
echo "[ ! ] Updating default DNS zone templates..."
$BIN/v-update-dns-templates
fi
}
upgrade_rebuild_users() {
if [ "$UPGRADE_REBUILD_USERS" = "true" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo "[ * ] Rebuilding user accounts and domains:..."
else
echo "[ * ] Rebuilding user accounts and domains, this may take a few minutes..."
fi
for user in $($BIN/v-list-sys-users plain); do
export restart="no"
if [ "$DEBUG_MODE" = "true" ]; then
echo " - $user:"
else
echo " - $user..."
fi
if [ -n "$WEB_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- Web domains..."
$BIN/v-rebuild-web-domains "$user" 'no'
else
$BIN/v-rebuild-web-domains "$user" 'no' > /dev/null 2>&1
fi
fi
if [ -n "$DNS_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- DNS zones..."
$BIN/v-rebuild-dns-domains "$user" 'no'
else
$BIN/v-rebuild-dns-domains "$user" 'no' > /dev/null 2>&1
fi
fi
if [ -n "$MAIL_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- Mail domains..."
$BIN/v-rebuild-mail-domains "$user" 'no'
else
$BIN/v-rebuild-mail-domains "$user" 'no' > /dev/null 2>&1
fi
fi
if [ "$DEBUG_MODE" = "true" ]; then
echo " ---- User configuration..."
$BIN/v-rebuild-user "$user" 'no'
else
$BIN/v-rebuild-user "$user" 'no' > /dev/null 2>&1
fi
done
fi
}
update_whitelabel_logo() {
$BIN/v-update-white-label-logo
}
upgrade_replace_default_config() {
syshealth_update_web_config_format
syshealth_update_mail_config_format
syshealth_update_mail_account_config_format
syshealth_update_dns_config_format
syshealth_update_db_config_format
syshealth_update_user_config_format
}
upgrade_restart_services() {
if [ "$UPGRADE_RESTART_SERVICES" = "true" ]; then
echo "[ * ] Restarting services..."
sleep 2
if [ -n "$MAIL_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " - $MAIL_SYSTEM"
fi
$BIN/v-restart-mail 'yes'
fi
if [ -n "$IMAP_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " - $IMAP_SYSTEM"
fi
$BIN/v-restart-service "$IMAP_SYSTEM"
fi
if [ -n "$WEB_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " - $WEB_SYSTEM"
fi
$BIN/v-restart-web 'yes'
fi
if [ -n "$PROXY_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " - $PROXY_SYSTEM"
fi
$BIN/v-restart-proxy 'yes'
fi
if [ -n "$DNS_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " - $DNS_SYSTEM"
fi
$BIN/v-restart-dns 'yes'
fi
if [ -n "$WEB_BACKEND" ]; then
versions_list=$($BIN/v-list-sys-php plain)
for v in $versions_list; do
if [ "$DEBUG_MODE" = "true" ]; then
echo " - php$v-fpm"
fi
$BIN/v-restart-service "php$v-fpm" 'yes'
done
fi
if [ -n "$FTP_SYSTEM" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " - $FTP_SYSTEM"
fi
$BIN/v-restart-ftp 'yes'
fi
if [ -n "$FIREWALL_EXTENSION" ]; then
if [ "$DEBUG_MODE" = "true" ]; then
echo " - $FIREWALL_EXTENSION"
fi
$BIN/v-restart-service "$FIREWALL_EXTENSION"
fi
# Restart SSH daemon service
if [ "$DEBUG_MODE" = "true" ]; then
echo " - sshd"
fi
$BIN/v-restart-service ssh
fi
# Always restart the Hestia Control Panel service
if [ "$DEBUG_MODE" = "true" ]; then
echo " - hestia"
fi
$BIN/v-restart-service hestia
}