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.
		
		
		
		
		
			
		
			
				
					217 lines
				
				7.1 KiB
			
		
		
			
		
	
	
					217 lines
				
				7.1 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								#!/bin/bash
							 | 
						||
| 
								 | 
							
								# info: Install Roundcube webmail client
							 | 
						||
| 
								 | 
							
								# options: [MODE]
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# This function installs the Roundcube webmail client.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                Variables & Functions                     #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Includes
							 | 
						||
| 
								 | 
							
								# shellcheck source=/etc/hestiacp/hestia.conf
							 | 
						||
| 
								 | 
							
								source /etc/hestiacp/hestia.conf
							 | 
						||
| 
								 | 
							
								# shellcheck source=/usr/local/hestia/func/main.sh
							 | 
						||
| 
								 | 
							
								source $HESTIA/func/main.sh
							 | 
						||
| 
								 | 
							
								source $HESTIA/func/db.sh
							 | 
						||
| 
								 | 
							
								# load config file
							 | 
						||
| 
								 | 
							
								source_conf "$HESTIA/conf/hestia.conf"
							 | 
						||
| 
								 | 
							
								# upgrade config file
							 | 
						||
| 
								 | 
							
								source "$HESTIA/install/upgrade/upgrade.conf"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								MODE=$2
							 | 
						||
| 
								 | 
							
								UPDATE="no"
							 | 
						||
| 
								 | 
							
								# Version and Download paths
							 | 
						||
| 
								 | 
							
								RC_FILE="roundcubemail-$rc_v-complete.tar.gz"
							 | 
						||
| 
								 | 
							
								RC_EXTRACT="roundcubemail-$rc_v"
							 | 
						||
| 
								 | 
							
								# Downloading full version
							 | 
						||
| 
								 | 
							
								RC_URL="https://github.com/roundcube/roundcubemail/releases/download/$rc_v/roundcubemail-$rc_v-complete.tar.gz"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Folder paths
							 | 
						||
| 
								 | 
							
								RC_INSTALL_DIR="/var/lib/roundcube"
							 | 
						||
| 
								 | 
							
								RC_CONFIG_DIR="/etc/roundcube"
							 | 
						||
| 
								 | 
							
								RC_LOG="/var/log/roundcube"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								WWW_USER="www-data"
							 | 
						||
| 
								 | 
							
								if [ -f /etc/redhat-release ]; then
							 | 
						||
| 
								 | 
							
								    WWW_USER="apache"
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                    Verifications                         #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Checking root permissions
							 | 
						||
| 
								 | 
							
								if [ "x$(id -u)" != 'x0' ]; then
							 | 
						||
| 
								 | 
							
									echo "ERROR: v-add-sys-roundcube can be run executed only by root user"
							 | 
						||
| 
								 | 
							
									exit 10
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Ensure that $HESTIA (/usr/local/hestia/) and other variables are valid.
							 | 
						||
| 
								 | 
							
								if [ -z "$HESTIA" ]; then
							 | 
						||
| 
								 | 
							
									HESTIA="/usr/local/hestia"
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ -z "$HOMEDIR" ] || [ -z "$HESTIA_COMMON_DIR" ]; then
							 | 
						||
| 
								 | 
							
									echo "ERROR: Environment variables not present, installation aborted."
							 | 
						||
| 
								 | 
							
									exit 2
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ -z "$(echo "$DB_SYSTEM" | grep -w 'mysql')" ]; then
							 | 
						||
| 
								 | 
							
									echo "ERROR: Mysql not available. Installation aborted"
							 | 
						||
| 
								 | 
							
									exit 2
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ -d "/usr/share/roundcube" ]; then
							 | 
						||
| 
								 | 
							
									echo "ERROR: Install done from apt source, unable to continue"
							 | 
						||
| 
								 | 
							
									exit 2
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Get current version
							 | 
						||
| 
								 | 
							
								if [ -f "/var/lib/roundcube/index.php" ]; then
							 | 
						||
| 
								 | 
							
									version=$(cat $RC_INSTALL_DIR/index.php | grep -o -E '[0-9].[0-9].[0-9]+' | head -1)
							 | 
						||
| 
								 | 
							
									if [ "$version" == "$rc_v" ]; then
							 | 
						||
| 
								 | 
							
										echo "Error: Installed version ($version) is equal to the available version ($rc_v)"
							 | 
						||
| 
								 | 
							
										exit 2
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
										UPDATE="yes"
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Perform verification if read-only mode is enabled
							 | 
						||
| 
								 | 
							
								check_hestia_demo_mode
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                       Action                             #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ "$UPDATE" == "no" ]; then
							 | 
						||
| 
								 | 
							
									rm -f -r $RC_INSTALL_DIR
							 | 
						||
| 
								 | 
							
									rm -f -r $RC_CONFIG_DIR
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									mkdir -p $RC_INSTALL_DIR/
							 | 
						||
| 
								 | 
							
									mkdir -p $RC_CONFIG_DIR/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									cd "$RC_INSTALL_DIR"
							 | 
						||
| 
								 | 
							
									[ ! -f "${RC_INSTALL_DIR}/${RC_FILE}" ] && wget "$RC_URL" --retry-connrefused --quiet -O "${RC_INSTALL_DIR}/${RC_FILE}"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tar xzf $RC_FILE
							 | 
						||
| 
								 | 
							
									cp -rT $RC_EXTRACT $RC_INSTALL_DIR
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Delete old config folder
							 | 
						||
| 
								 | 
							
									cp $RC_INSTALL_DIR/config/defaults.inc.php $RC_CONFIG_DIR/defaults.inc.php
							 | 
						||
| 
								 | 
							
									rm -f -r $RC_INSTALL_DIR/config/
							 | 
						||
| 
								 | 
							
									ln -s $RC_CONFIG_DIR/ ./config
							 | 
						||
| 
								 | 
							
									# Replace with Hestia config
							 | 
						||
| 
								 | 
							
									cp -f $HESTIA_COMMON_DIR/roundcube/main.inc.php $RC_CONFIG_DIR/config.inc.php
							 | 
						||
| 
								 | 
							
									cp -f $HESTIA_COMMON_DIR/roundcube/mimetypes.php $RC_CONFIG_DIR/mimetypes.php
							 | 
						||
| 
								 | 
							
									chmod 644 $RC_CONFIG_DIR/*.php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									cp -f $HESTIA_COMMON_DIR/roundcube/hestia.php $RC_INSTALL_DIR/plugins/password/drivers/
							 | 
						||
| 
								 | 
							
									mkdir -p $RC_CONFIG_DIR/plugins/password
							 | 
						||
| 
								 | 
							
									mkdir -p $RC_CONFIG_DIR/plugins/newmail_notifier
							 | 
						||
| 
								 | 
							
									mkdir -p $RC_CONFIG_DIR/plugins/zipdownload
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Allow changes to the respective config / Create symlinks to /etc/roundcube/
							 | 
						||
| 
								 | 
							
									cp -f $HESTIA_COMMON_DIR/roundcube/config.inc.php $RC_CONFIG_DIR/plugins/password/config.inc.php
							 | 
						||
| 
								 | 
							
									ln -s $RC_CONFIG_DIR/plugins/password/config.inc.php ./plugins/password/config.inc.php
							 | 
						||
| 
								 | 
							
									cp -f $HESTIA_COMMON_DIR/roundcube/plugins/config_newmail_notifier.inc.php $RC_CONFIG_DIR/plugins/newmail_notifier/config.inc.php
							 | 
						||
| 
								 | 
							
									ln -s $RC_CONFIG_DIR/plugins/newmail_notifier/config.inc.php ./plugins/newmail_notifier/config.inc.php
							 | 
						||
| 
								 | 
							
									cp -f $HESTIA_COMMON_DIR/roundcube/plugins/config_zipdownload.inc.php $RC_CONFIG_DIR/plugins/zipdownload/config.inc.php
							 | 
						||
| 
								 | 
							
									ln -s $RC_CONFIG_DIR/plugins/zipdownload/config.inc.php ./plugins/zipdownload/config.inc.php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Set up correct permissions roundcube
							 | 
						||
| 
								 | 
							
									chown -R root:$WWW_USER $RC_CONFIG_DIR/
							 | 
						||
| 
								 | 
							
									chmod 751 -R $RC_CONFIG_DIR
							 | 
						||
| 
								 | 
							
									chmod 644 $RC_CONFIG_DIR/config.inc.php
							 | 
						||
| 
								 | 
							
									chmod 644 $RC_CONFIG_DIR/plugins/password/config.inc.php
							 | 
						||
| 
								 | 
							
									chmod 644 $RC_CONFIG_DIR/plugins/newmail_notifier/config.inc.php
							 | 
						||
| 
								 | 
							
									chmod 644 $RC_CONFIG_DIR/plugins/zipdownload/config.inc.php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Add robots.txt
							 | 
						||
| 
								 | 
							
									echo "User-agent: *" > /var/lib/roundcube/robots.txt
							 | 
						||
| 
								 | 
							
									echo "Disallow: /" >> /var/lib/roundcube/robots.txt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									chown -R root:$WWW_USER $RC_INSTALL_DIR
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Log file
							 | 
						||
| 
								 | 
							
									if [ ! -d $RC_LOG ]; then
							 | 
						||
| 
								 | 
							
										mkdir $RC_LOG
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
									chown apache:$WWW_USER $RC_LOG
							 | 
						||
| 
								 | 
							
									chmod 751 $RC_LOG
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if [ ! -z "$(echo "$DB_SYSTEM" | grep -E 'mysql|pgsql')" ]; then
							 | 
						||
| 
								 | 
							
										host='localhost'
							 | 
						||
| 
								 | 
							
										database='roundcube'
							 | 
						||
| 
								 | 
							
										dbuser="$database"
							 | 
						||
| 
								 | 
							
										dbpass=$(generate_password)
							 | 
						||
| 
								 | 
							
										charset='UTF8'
							 | 
						||
| 
								 | 
							
										sed -i "s/%password%/$dbpass/g" $RC_CONFIG_DIR/config.inc.php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if [ ! -z "$(echo "$DB_SYSTEM" | grep -w 'mysql')" ]; then
							 | 
						||
| 
								 | 
							
											add_mysql_database
							 | 
						||
| 
								 | 
							
											mysql_query "USE $database; $(< /var/lib/roundcube/SQL/mysql.initial.sql)"
							 | 
						||
| 
								 | 
							
										else
							 | 
						||
| 
								 | 
							
											add_pgsql_database
							 | 
						||
| 
								 | 
							
											psql_query "USE $database; $(< /var/lib/roundcube/SQL/postgres.initial.sql)"
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# TODO: Add support for PostgreSQL
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									rcDesKey="$(openssl rand -base64 30 | tr -d "/" | cut -c1-24)"
							 | 
						||
| 
								 | 
							
									sed -i "s/%des_key%/$rcDesKey/g" $RC_CONFIG_DIR/config.inc.php
							 | 
						||
| 
								 | 
							
									# Update server hostname in password change plugin
							 | 
						||
| 
								 | 
							
									sed -i "s/localhost/$(hostname)/g" $RC_CONFIG_DIR/plugins/password/config.inc.php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Clean up
							 | 
						||
| 
								 | 
							
									rm -f -r $RC_INSTALL_DIR/installer
							 | 
						||
| 
								 | 
							
									rm -f -r $RC_INSTALL_DIR/$RC_FILE
							 | 
						||
| 
								 | 
							
									rm -f -r $RC_INSTALL_DIR/$RC_EXTRACT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Updating hestia.conf
							 | 
						||
| 
								 | 
							
									if [ -z "$(grep WEBMAIL_SYSTEM $HESTIA/conf/hestia.conf)" ]; then
							 | 
						||
| 
								 | 
							
										$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' 'roundcube'
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
										if [ -z "$(echo "$WEBMAIL_SYSTEM" | grep -w 'roundcube')" ]; then
							 | 
						||
| 
								 | 
							
											if [ ! -z "$WEBMAIL_SYSTEM" ]; then
							 | 
						||
| 
								 | 
							
												$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' "roundcube,$WEBMAIL_SYSTEM"
							 | 
						||
| 
								 | 
							
											else
							 | 
						||
| 
								 | 
							
												$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' "roundcube"
							 | 
						||
| 
								 | 
							
											fi
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									phpenmod mcrypt > /dev/null 2>&1
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
									cd "$RC_INSTALL_DIR"
							 | 
						||
| 
								 | 
							
									[ ! -f "${RC_INSTALL_DIR}/${RC_FILE}" ] && wget "$RC_URL" --quiet -O "${RC_INSTALL_DIR}/${RC_FILE}"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tar xzf $RC_FILE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Run Roundcube upgrade script
							 | 
						||
| 
								 | 
							
									$RC_INSTALL_DIR/$RC_EXTRACT/bin/installto.sh -y $RC_INSTALL_DIR > /dev/null 2>&1
							 | 
						||
| 
								 | 
							
									$RC_INSTALL_DIR/bin/update.sh --version "$version" > /dev/null 2>&1
							 | 
						||
| 
								 | 
							
									$RC_INSTALL_DIR/bin/indexcontacts.sh > /dev/null 2>&1
							 | 
						||
| 
								 | 
							
									chown -R root:$WWW_USER $RC_INSTALL_DIR
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									#clean up the mess
							 | 
						||
| 
								 | 
							
									if [ -d "$RC_INSTALL_DIR/installer" ]; then
							 | 
						||
| 
								 | 
							
										rm -f -r $RC_INSTALL_DIR/installer
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
									rm -f -r $RC_INSTALL_DIR/$RC_FILE
							 | 
						||
| 
								 | 
							
									rm -f -r $RC_INSTALL_DIR/$RC_EXTRACT
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                       Hestia                             #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ "$UPDATE" = "yes" ]; then
							 | 
						||
| 
								 | 
							
									$BIN/v-log-action "system" "Info" "Plugins" "Roundcube updated (Version: $version)."
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
									$BIN/v-log-action "system" "Info" "Plugins" "Roundcube enabled (Version: $version)."
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								log_event "$OK" "$ARGUMENTS"
							 |