Files
shell_sequencer/seqs/roundcube.sh

259 lines
6.9 KiB
Bash
Executable File

#!/bin/bash
toolName=roundcube
toolPhpDeps="php\${phpVersion}-gd php-imagick"
#https://github.com/roundcube/roundcubemail/releases/latest
latestUrl="https://api.github.com/repos/roundcube/roundcubemail/releases/latest"
latestVersion=
tempExtract=
tempInstall=
phpVersion=
# Get script working directory
# (when called from a different directory)
WDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >>/dev/null 2>&1 && pwd )"
CONFIG=0
CONFIG_FILE_NAME="${toolName}.cfg"
CONFIG_FILE_TEMPLATE="$WDIR/${CONFIG_FILE_NAME}.example"
step_config() {
## use sequencer api:
initSeqConfig -t "$CONFIG_FILE_NAME" "$CONFIG_FILE_TEMPLATE"
if [ $CONFIG -eq 0 ] ; then
CONFIG=1
fi
}
step_1_info() { echo "Install $toolName"; }
step_1_alias() { ALIAS="install"; }
step_1() {
local aptOpt=
if [ $QUIET -ne 0 ];then
aptOpt="-y"
fi
downloadLatest
fetchPhpVersion
if [ ! -z $phpVersion ] ; then
exe apt update
exe apt install `eval echo "$toolPhpDeps"` $aptOpt
fi
exe chown -R www-data: "$tempExtract"
exe cp -nar "$tempExtract" "$RC_LOC"
}
step_2_info() { echo "Install composer"; }
step_2() {
exe cd "$RC_LOC"
local EXPECTED_CHECKSUM="$(wget -q -O - https://composer.github.io/installer.sig)"
exe php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
local ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]
then
echoerr ' [E] Invalid installer checksum'
exe rm composer-setup.php
return 1
fi
exe php composer-setup.php --quiet
saveReturn $?
exe rm composer-setup.php
endReturn "Composer setup failed"
}
step_3_info() { echo "Configure $toolName"; }
step_3_alias() { ALIAS="config"; }
step_3() {
echo " [I] Recommended composer packages to be added to \"require\" section:"
echo ' "melanie2/mobile": "*",'
echo ' "roundcube/carddav": "*",'
echo ' "alexandregz/twofactor_gauthenticator": "dev-master"'
exe read -p "Copy the lines above and press Enter to continue."
exe vi "$RC_LOC/composer.json"
step postupgrade
echo " [I] Generating mysql database $RC_DATABASE"
echo
exe $WDIR/mysql.sh createdb -c utf8mb4
echo
echo " [I] Now visit: http://url-to-roundcube/installer/"
echo
echo " ! Check the database password in $RC_LOC/config/config.inc.php"
echo " afterwards, the installer may have corrupted some special character"
echo
echo " ! After installation please delete $RC_LOC/installer"
}
step_10_info() { echo "Configuration notes"; }
step_10_alias() { ALIAS="notes"; }
step_10() {
outColor green
cat <<NOTES_END
# smtp port if missing after installation
[$RC_LOC/config/config.inc.php]
// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
// deprecated SSL over SMTP (aka SMTPS))
\$config['smtp_port'] = 465;
# Enable two factor auth (installed with step config) for all user
[$RC_LOC/plugins/twofactor_gauthenticator/config.inc.php]
$rcmail_config['users_allowed_2FA'] = array('.*');
# Add mobile skin to roundcube and run step 'postupgrade'.
Don't forget to activate plugins if asked for.
[$RC_LOC/composer.json]
"require": {
...
"mobiledetect/mobiledetectlib": "^2.8",
"roundcube/elastic4mobile": "dev-master"
}
# Install pspell and aspell spell check engine
apt install php7.x-pspell aspell-en aspell-de
[$RC_LOC/config/config.inc.php]
\$config['spellcheck_engine'] = 'pspell';
\$config['spellcheck_languages'] = array(
'en' => 'English',
'de' => 'Deutsch',
);
NOTES_END
}
step_12_info() { echo "Troubleshooting"; }
step_12_alias() { ALIAS="trouble"; }
step_12() {
outColor green
cat <<TROUBLE_END
# On composer update errors.
* Backup '/var/www/webmail/plugin' config. Especially twofactor_gauthenticator
* Delete '/var/www/webmail/vendor' folder. Or at least 'vendor/autoload.php' and 'vendor/composer'
* 'sqn_roundcube -q postupgrade'
I also installed 'php-pear' since one error indicated connection to it.
TROUBLE_END
}
step_20_info() {
echo -n "Create a backup"
if [ $CONFIG -ne 0 ] ; then
echo " at $RC_BACKUP"
else
echo
fi
}
step_20_alias() { ALIAS="backup"; }
step_20() {
if [ $CONFIG -eq 0 ] ; then
echoerr " [E] No configuration file found"
return 1
fi
if [ ! -z $RC_BACKUP ] ; then
exe mkdir -p "$RC_BACKUP"
fi
exe $WDIR/mysql.sh -qq backup "$RC_DATABASE" "$RC_BACKUP"
local wwwBackup="$RC_BACKUP/${toolName}_www_`date +%Y%m%d-%H%M%S`.tar.gz"
echo " [I] Backing up webserver directory to $wwwBackup"
exe cd "$RC_LOC/.."
exe tar czf "$wwwBackup" $(basename "$RC_LOC")
}
step_22_info() {
echoinfoArgs "[CUSTOM VERSION]"
echo "Upgrade installation to \"latest\" from github if [CUSTOM_VERSION] is empty"
}
step_22_alias() { ALIAS="upgrade"; }
step_22() {
shift # don't need step number
local currentVersion=
if [ ! -z $1 ] ; then
latestVersion="$1"
else
fetchLatestVersion
fi
if [ -z $latestVersion ] ; then
echoerr " [E] Cannot determine latest version from github repository"
return 1
elif [ $QUIET -eq 0 ] ; then
echo
currentVersion="$(grep -Po ' \| Version \K.*?(?= )' $RC_LOC/index.php)"
exe read -p "Install $latestVersion over $currentVersion to $RC_LOC [n]o/(y)es? " answer
case $answer in
[yY])
;;
*)
echoerr " [I] Upgrade aborted"
return 1
;;
esac
fi
local isInstalled=$(grep -E "RELEASE $latestVersion" "${RC_LOC}/CHANGELOG" >>/dev/null && echo "1" || echo "0")
if [ $isInstalled -eq 1 ] ; then
echoerr " [E] Version $latestVersion is already installed"
return 2
fi
downloadLatest
step backup
echo " [I] Installing version $latestVersion to $RC_LOC"
exe "$tempInstall" "$RC_LOC"
echo " [I] Make sure to check composer.json-dist file for upstream changes"
}
step_23_info() { echo "Post upgrade procedure"; }
step_23_alias() { ALIAS="postupgrade"; }
step_23() {
exe cd "$RC_LOC"
echo " [I] Starting post update procedure"
exe php composer.phar update --no-dev
}
fetchPhpVersion() {
if [ ! -z $phpVersion ] ; then
return 0
fi
phpVersion="$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')"
}
fetchLatestVersion() {
if [ ! -z $latestVersion ] ; then
return 0
fi
latestVersion=$(curl --silent "$latestUrl" | grep -Po '"tag_name": "\K.*?(?=")')
}
downloadLatest() {
fetchLatestVersion
local downUrl="https://github.com/roundcube/roundcubemail/releases/download/${latestVersion}/roundcubemail-${latestVersion}-complete.tar.gz"
tempExtract="$tempDown/roundcubemail-$latestVersion"
tempInstall="$tempExtract/bin/installto.sh"
if [ ! -e "$tempExtract" ] ; then
exe mkdir -p "$tempDown"
exe wget -O "$tempLoc" $downUrl
endReturn -o $? "Download failed: $downUrl"
exe cd "$tempDown"
exe tar -xf "$tempLoc"
endReturn -o $? "Extract failed: $tempLoc"
else
echo " [I] Found existing download: $tempExtract"
fi
}
tempDown="/tmp/roundcube"
tempLoc="$tempDown/rc.tar.gz"
VERSION_SEQREV=14
. /usr/local/bin/sequencer.sh