#!/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" seq_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() { echo "install"; } step_1() { local aptOpt= if quiet;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 error -e ' [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() { echo "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() { echo "notes"; } step_10() { color green cat < 'English', 'de' => 'Deutsch', ); NOTES_END } step_12_info() { echo "Troubleshooting"; } step_12_alias() { echo "trouble"; } step_12() { color green cat <>/dev/null && echo "1" || echo "0") if [ $isInstalled -eq 1 ] ; then error -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() { echo "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" readonly sqr_minVersion=16 . /usr/local/bin/sequencer.sh