diff --git a/seqs/roundcube.sh b/seqs/roundcube.sh index c4ce0fe..469094e 100755 --- a/seqs/roundcube.sh +++ b/seqs/roundcube.sh @@ -1,8 +1,13 @@ #!/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) @@ -19,6 +24,85 @@ step_config() { 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 +exit 0 + echo " [I] Generating mysql database $RC_DATABASE" + echo + exe $WDIR/mysql.sh createdb_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() { + echo "# smtp port if missing after installation" + echo ' // SMTP port (default is 25; use 587 for STARTTLS or 465 for the' + echo ' // deprecated SSL over SMTP (aka SMTPS))' + echo " \$config['smtp_port'] = 465;" + echo + echo "# Enable two factor auth (installed with step config) for all user" + echo " [$RC_LOC/plugins/twofactor_gauthenticator/config.inc.php]" + echo " $rcmail_config['users_allowed_2FA'] = array('.*');" + echo + echo "# Todo install pspell spell check engine" +} + step_20_info() { echo -n "Create a backup" if [ $CONFIG -ne 0 ] ; then @@ -54,11 +138,10 @@ step_22_info() { step_22_alias() { ALIAS="upgrade"; } step_22() { shift # don't need step number - local latestVersion= if [ ! -z $1 ] ; then latestVersion="$1" else - latestVersion=$(curl --silent "$latestUrl" | grep -Po '"tag_name": "\K.*?(?=")') + fetchLatestVersion fi if [ -z $latestVersion ] ; then @@ -83,9 +166,43 @@ step_22() { 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" - local tempExtract="$tempDown/roundcubemail-$latestVersion" - local tempInstall="$tempExtract/bin/installto.sh" + tempExtract="$tempDown/roundcubemail-$latestVersion" + tempInstall="$tempExtract/bin/installto.sh" if [ ! -e "$tempExtract" ] ; then exe mkdir -p "$tempDown" @@ -97,22 +214,9 @@ step_22() { else echo " [I] Found existing download: $tempExtract" fi - - 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" } tempDown="/tmp/roundcube" tempLoc="$tempDown/rc.tar.gz" -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 -} - VERSION_SEQREV=10 . /usr/local/bin/sequencer.sh