diff --git a/doc/PRE_UPGRADE.md b/doc/PRE_UPGRADE.md index dd91f95..472d1b1 100644 --- a/doc/PRE_UPGRADE.md +++ b/doc/PRE_UPGRADE.md @@ -1,2 +1,7 @@ #FIX this pre_upgrade notification/migration/warning Starting in Nextcloud 28.0.1~ynh2, we are deprecating support for MariaDB. We are moving from MariaDB to PostgreSQL database. + +If you are upgrading to a new major version of Nextcloud, please make sure that your Nextcloud apps are up to date from Nextcloud's administration panel beforehand. + +Additionally, if you installed specific Nextcloud apps, we recommend making sure that they are compatible with the new major version. YunoHost will attempt to check this automatically at the very beginning of the upgrade, but a manual check doesn't hurt either. For Nextcloud 28, this forum thread might be helpful : . + \ No newline at end of file diff --git a/manifest.toml b/manifest.toml index be6b51d..75221be 100644 --- a/manifest.toml +++ b/manifest.toml @@ -55,6 +55,38 @@ ram.runtime = "512M" default = false [resources] + + [resources.sources] + + [resources.sources.main] + url = 'https://download.nextcloud.com/server/releases/nextcloud-28.0.1.tar.bz2' + sha256 = '2f80735b443082272fe6a3b5e32137957f1fc448c75342b94b5200b29725f3a4' + + [resources.sources.27] + url = 'https://download.nextcloud.com/server/releases/nextcloud-27.0.0.tar.bz2' + sha256 = '3d312a09b9345ac058758dd7b4059bf3cf0b1f0f1d747251b6fac3585ba6533f' + prefetch = false + + [resources.sources.26] + url = 'https://download.nextcloud.com/server/releases/nextcloud-26.0.0.tar.bz2' + sha256 = 'f163150363aee9366ecb5cd5259bf6756ed4f073cea78b5fa515cada7a0d0c3d' + prefetch = false + + [resources.sources.25] + url = 'https://download.nextcloud.com/server/releases/nextcloud-25.0.0.tar.bz2' + sha256 = '2c05ac9d7b72b44ef8b3d2ae03ff0fd6121e254b8054556f5163bd8760dd8f49' + prefetch = false + + [resources.sources.24] + url = 'https://download.nextcloud.com/server/releases/nextcloud-24.0.0.tar.bz2' + sha256 = '176cb5620f20465fb4759bdf3caaebeb7acff39d6c8630351af9f8738c173780' + prefetch = false + + [resources.sources.23] + url = 'https://download.nextcloud.com/server/releases/nextcloud-23.0.0.tar.bz2' + sha256 = 'c37592abc3b65c8fd28459281a24f414b87af52fc8c2ea979be3f9be75d01a2c' + prefetch = false + [resources.system_user] allow_email = true @@ -77,4 +109,4 @@ ram.runtime = "512M" [resources.database] type = "postgresql" - + \ No newline at end of file diff --git a/scripts/change_url b/scripts/change_url index dbcbc60..e7838cb 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -54,7 +54,7 @@ fi #================================================= ynh_script_progression --message="Configuring permissions..." --weight=1 -# Temporary fix for the API permission +# Temporary fix for the API permission (workaround for https://github.com/YunoHost/issues/issues/2294 ) ynh_permission_url --permission="api" --url="re:$new_domain\/.well-known\/.*" --auth_header="false" --clear_urls #================================================= diff --git a/scripts/install b/scripts/install index 39ca4a2..5461210 100755 --- a/scripts/install +++ b/scripts/install @@ -12,18 +12,6 @@ ynh_app_setting_set --app=$app --key=phpflags --value=$phpflags #================================================= ynh_script_progression --message="Setting up source files..." --weight=5 -# Load the last available version -source upgrade.d/upgrade.last.sh - -# Create an app.src for the last version of nextcloud -cat > ../conf/app.src << EOF -SOURCE_URL=https://download.nextcloud.com/server/releases/nextcloud-$next_version.tar.bz2 -SOURCE_SUM=$nextcloud_source_sha256 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.bz2 -SOURCE_IN_SUBDIR=true -EOF - # Enable YunoHost patches on Nextcloud sources cp -a ../sources/patches_last_version/* ../sources/patches # Download, check integrity, uncompress and patch the source from app.src diff --git a/scripts/upgrade b/scripts/upgrade index b86b4a6..26764e6 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -19,11 +19,12 @@ if [ -z "${phpflags:-}" ]; then ynh_app_setting_set --app=$app --key=phpflags --value=$phpflags fi -# Delete existing ini configuration file (backward compatibility) -if [ -f /etc/php/$YNH_PHP_VERSION/fpm/conf.d/20-$app.ini ]; then - ynh_secure_remove --file=/etc/php/$YNH_PHP_VERSION/fpm/conf.d/20-$app.ini +if ynh_compare_current_package_version --comparison lt --version 22.2~ynh1 +then + ynh_die --message="Upgrading from Nextcloud < 22.2 is not supported anymore. You should first upgrade to 22.2 using: yunohost app upgrade nextcloud -u https://github.com/YunoHost-Apps/nextcloud_ynh/tree/41f5f902e7c7cd3c30a6793020562ba98b9bf3e9" fi + #================================================= # SPECIFIC UPGRADE #================================================= @@ -31,8 +32,13 @@ fi # VERSION TO THE NEXT ONE #================================================= -current_version=$(grep OC_VersionString "$install_dir/version.php" | cut -d\' -f2) -current_major_version=${current_version%%.*} +filter_boring_occ_warnings() { + # Filter stupid and boring messages such as the progress bar looking like: + # 3/3 [============================] 100% Starting ... + # and being pretty much useless, as well as the annoying warning about "only a limited number of commands" etc... + + sed -E 's@\s*([0-9]+\/[0-9]+\s+\[(-|>|=)+\]\s+[0-9]+%|\s*Starting ...|Nextcloud or one of the apps require upgrade - only a limited number of commands are available|You may use your browser or the occ upgrade command to do the upgrade)@@g' +} # Define a function to execute commands with `occ` exec_occ() { @@ -43,23 +49,24 @@ exec_occ() { elif [ $current_major_version -ge 24 ] then NEXTCLOUD_PHP_VERSION="8.1" - elif [ $current_major_version -ge 18 ] - then - NEXTCLOUD_PHP_VERSION="7.4" else - NEXTCLOUD_PHP_VERSION="7.1" + NEXTCLOUD_PHP_VERSION="7.4" fi - # NB : be super careful when designing this part of the code, because calling ynh_install_app_dependencies + # NB : be super careful when designing this part of the code, because calling ynh_install_app_dependencies # will do magic regarding php configuration and $phpversion when the php version of the dependencies changes ... phpversion=$(ynh_app_setting_get --app=$app --key=phpversion) if [[ "$NEXTCLOUD_PHP_VERSION" != "$phpversion" ]]; then local pkg_dependencies="$(dpkg-query --show --showformat='${Depends}' ${app}-ynh-deps)" pkg_dependencies="${pkg_dependencies//$phpversion/$NEXTCLOUD_PHP_VERSION}" + # Packaging v1 ~legacy : ynh_install_app_dependencies is designed to be called several times + # but the second time it will *append* the list of dependencies rather than replace the existing dependencies + # resulting in a crash when parsing what's the php version the app uses, hence we need to force the full-replacement + YNH_INSTALL_APP_DEPENDENCIES_REPLACE=true ynh_install_app_dependencies "$pkg_dependencies" - fi + fi (cd "$install_dir" && ynh_exec_as "$app" \ - php$NEXTCLOUD_PHP_VERSION --define apc.enable_cli=1 occ --no-interaction --no-ansi "$@") + php$NEXTCLOUD_PHP_VERSION --define apc.enable_cli=1 occ --no-interaction --no-ansi "$@") 2> >(filter_boring_occ_warnings >&2) } #================================================= @@ -103,16 +110,49 @@ local mount_id=$(exec_occ files_external:create --output=json \ || exec_occ files_external:option "$mount_id" enable_sharing true } +function list_installed_apps_not_compatible_with_future_version() +{ + local nextcloud_destination_version="$1" + local nextcloud_current_version="$(grep OC_VersionString "$install_dir/version.php" | cut -d\' -f2)" + local installed_apps=$(mktemp) + local core_apps_in_current_version=$(mktemp) + local nextcloud_destination_appcatalog=$(mktemp) + + # Run a first "dummy" command just to make sure we have the appropriate php dependencies installed, + # otherwise this creates funky stuff when tweaking the apt deps because the next command is piped into jq ... + exec_occ -V >/dev/null + # List installed apps + exec_occ app:list --output json | jq -r ".enabled | keys[]" | sort > $installed_apps + # Fetch Nextcloud list of core apps from their github repo for the current version + curl -s https://raw.githubusercontent.com/nextcloud/server/v$nextcloud_current_version/core/shipped.json | jq -r '.shippedApps[]' | sort > $core_apps_in_current_version + # Fetch Nextcloud app catalog (doesnt contain core app) for the future version + curl -s https://apps.nextcloud.com/api/v1/platform/$nextcloud_destination_version.0.0/apps.json | jq -r '.[] | .id' | sort > $nextcloud_destination_appcatalog + + # Compute set complement, cf https://catonmat.net/set-operations-in-unix-shell + # We want to list the installed apps which are neither core apps nor in the destination catalog + comm -23 <(comm -23 $installed_apps $core_apps_in_current_version) $nextcloud_destination_appcatalog +} + + +current_version=$(grep OC_VersionString "$install_dir/version.php" | cut -d\' -f2) +current_major_version=${current_version%%.*} + +last_version=$(ynh_read_manifest --manifest_key="resources.sources.main.url" | grep -o '[0-9][0-9]\.[0-9]\.[0-9]') +last_major_version=${last_version%%.*} + +if [[ "$last_major_version" != "$current_major_version" ]] +then + installed_apps_not_compatible_with_future_version="$(list_installed_apps_not_compatible_with_future_version $last_major_version)" + if [[ -n "$installed_apps_not_compatible_with_future_version" ]] + then + ynh_die --message="The following apps are not (yet?) compatible with Nextcloud $last_major_version. You should make sure to upgrade the app, or disable it, or wait for it to become compatible before running this upgrade : $installed_apps_not_compatible_with_future_version" + fi +fi + if [ "$upgrade_type" == "UPGRADE_APP" ] then ynh_script_progression --message="Upgrading $app..." --weight=3 - # Load the last available version - source upgrade.d/upgrade.last.sh - last_version=$next_version - - last_major_version=${last_version%%.*} - # Set write access for the following commands chown -R $app: "$install_dir" "$data_dir" @@ -124,53 +164,30 @@ then # Take all apps enabled, and check if mail is one of them # Then temporary disable the mail app mail_app_must_be_reactived=0 - + if exec_occ app:list | awk '/Enabled/{f=1;next} /Disabled/{f=0} f' | grep -q -w mail; then exec_occ app:disable mail mail_app_must_be_reactived=1 fi - + # While the current version is not the last version, do an upgrade while [ "$last_version" != "$current_version" ] do - # The major version is the first part of the version number - current_major_version=${current_version%%.*} - - if [ ! -f upgrade.d/upgrade.$current_major_version.sh ]; then - source upgrade.d/upgrade.last.sh - else - source upgrade.d/upgrade.$current_major_version.sh - fi - - # If the current version has the same major version than the next one, - # then it's the last upgrade to do - # We also cover the case where the last version is the first of the current major version series - if [[ ("$last_major_version" -eq "$current_major_version") || ( ("$last_major_version" -eq "$((current_major_version+1))") && ("$next_version" == "$last_version") ) ]]; then - current_major_version=last - # Enable YunoHost patches on Nextcloud sources + next_major_version="$(( $current_major_version + 1 ))" + if [[ "$next_major_version" -ge "$last_major_version" ]]; then + ynh_print_info --message="Upgrading to Nextcloud $last_version" cp -a ../sources/patches_last_version/* ../sources/patches + source_id="main" + else + ynh_print_info --message="Upgrading to Nextcloud $next_major_version" + source_id="$next_major_version" fi - # Load the value for this version - source upgrade.d/upgrade.$current_major_version.sh - - ynh_print_info --message="Upgrade to $app $next_version" - - # Create an app.src for this version of Nextcloud - cat > ../conf/app.src << EOF -SOURCE_URL=https://download.nextcloud.com/server/releases/nextcloud-$next_version.tar.bz2 -SOURCE_SUM=$nextcloud_source_sha256 -SOURCE_SUM_PRG=sha256sum -SOURCE_FORMAT=tar.bz2 -SOURCE_IN_SUBDIR=true -EOF - # Create a temporary directory tmpdir="$(ynh_smart_mktemp min_size=300)" - # Install the next nextcloud version in $tmpdir - ynh_setup_source --dest_dir="$tmpdir" + ynh_setup_source --dest_dir="$tmpdir" --source_id="$source_id" # Backup the config file in the temp dir cp -a "$install_dir/config/config.php" "$tmpdir/config/config.php" @@ -195,7 +212,6 @@ EOF # Replace the old Nextcloud by the new one ynh_secure_remove --file="$install_dir" mv "$tmpdir" "$install_dir" - ynh_secure_remove --file="$tmpdir" # Set write access for the following commands chown -R $app: "$install_dir" "$data_dir" @@ -217,7 +233,7 @@ EOF exec_occ db:add-missing-columns -n exec_occ db:add-missing-primary-keys -n exec_occ db:convert-filecache-bigint -n - + #================================================= # CONFIGURE NEXTCLOUD #================================================= diff --git a/scripts/upgrade.d/upgrade.10.sh b/scripts/upgrade.d/upgrade.10.sh deleted file mode 100755 index 508a483..0000000 --- a/scripts/upgrade.d/upgrade.10.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Version cible de la mise à jour de Nextcloud -next_version="11.0.0" - -# Nextcloud tarball checksum -nextcloud_source_sha256="5bdfcb36c5cf470b9a6679034cabf88bf1e50a9f3e47c08d189cc2280b621429" diff --git a/scripts/upgrade.d/upgrade.11.sh b/scripts/upgrade.d/upgrade.11.sh deleted file mode 100755 index 9bbbe1d..0000000 --- a/scripts/upgrade.d/upgrade.11.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Version cible de la mise à jour de Nextcloud -next_version="12.0.0" - -# Nextcloud tarball checksum -nextcloud_source_sha256="1b9d9cf05e657cd564a552b418fbf42d669ca51e0fd1f1f118fe44cbf93a243f" diff --git a/scripts/upgrade.d/upgrade.12.sh b/scripts/upgrade.d/upgrade.12.sh deleted file mode 100755 index 7069cc2..0000000 --- a/scripts/upgrade.d/upgrade.12.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Version cible de la mise à jour de Nextcloud -next_version="13.0.0" - -# Nextcloud tarball checksum -nextcloud_source_sha256="38e6064432a2d1a044f219028d3fd46cb7a943a47e11eef346810bd289705aec" diff --git a/scripts/upgrade.d/upgrade.13.sh b/scripts/upgrade.d/upgrade.13.sh deleted file mode 100644 index f979aa9..0000000 --- a/scripts/upgrade.d/upgrade.13.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available nextcloud version -next_version="14.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="f965c14286e7aabbfe49c947d86af59597af302c35d10e0b5440e7e6c53b8f47" diff --git a/scripts/upgrade.d/upgrade.14.sh b/scripts/upgrade.d/upgrade.14.sh deleted file mode 100755 index 8c5e80c..0000000 --- a/scripts/upgrade.d/upgrade.14.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available nextcloud version -next_version="15.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="5bb0c58171353da844019b64080c21078002a59ab956ab72adb958844a98eb78" \ No newline at end of file diff --git a/scripts/upgrade.d/upgrade.15.sh b/scripts/upgrade.d/upgrade.15.sh deleted file mode 100644 index a8c2c1c..0000000 --- a/scripts/upgrade.d/upgrade.15.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available nextcloud version -next_version="16.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="4532f7028b1d9bf060f75ac4fbbde52a59ecd9c9155f3178a038d3cf3609402e" diff --git a/scripts/upgrade.d/upgrade.16.sh b/scripts/upgrade.d/upgrade.16.sh deleted file mode 100755 index cb0d88a..0000000 --- a/scripts/upgrade.d/upgrade.16.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available nextcloud version -next_version="17.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="6081421b33ecdb3130b2bfb2293a3f4045aeb0b471ee570e675de3d931a142a6" diff --git a/scripts/upgrade.d/upgrade.17.sh b/scripts/upgrade.d/upgrade.17.sh deleted file mode 100755 index 35200da..0000000 --- a/scripts/upgrade.d/upgrade.17.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available nextcloud version -next_version="18.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="194095a5586d84040bc455f77b8aa6c80f9a6a6dd713c9aebdad046713d4267b" diff --git a/scripts/upgrade.d/upgrade.18.sh b/scripts/upgrade.d/upgrade.18.sh deleted file mode 100644 index e43bb76..0000000 --- a/scripts/upgrade.d/upgrade.18.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available nextcloud version -next_version="19.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="d23d429657c5e3476d7e73af1eafc70e42a81cfe2ed65b20655a005724fe0aae" diff --git a/scripts/upgrade.d/upgrade.19.sh b/scripts/upgrade.d/upgrade.19.sh deleted file mode 100644 index c44f02b..0000000 --- a/scripts/upgrade.d/upgrade.19.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available nextcloud version -next_version="20.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="a273e0151f68567f729d9a82a7e3f124ff0f0471aa17bae6bfd83c5362d84cd8" diff --git a/scripts/upgrade.d/upgrade.20.sh b/scripts/upgrade.d/upgrade.20.sh deleted file mode 100644 index 01a1f94..0000000 --- a/scripts/upgrade.d/upgrade.20.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available nextcloud version -next_version="21.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="ceadaeef67685a11afc5b23b0a86ba3c7bd0a7b138d5d1ecc05262383655f1f0" diff --git a/scripts/upgrade.d/upgrade.21.sh b/scripts/upgrade.d/upgrade.21.sh deleted file mode 100644 index 1be1435..0000000 --- a/scripts/upgrade.d/upgrade.21.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available nextcloud version -next_version="22.2.10" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="8de167bfcfcaa661245a00a5ac36628e7961951b9fe2dfaf4f8a5aac6907ccdb" diff --git a/scripts/upgrade.d/upgrade.22.sh b/scripts/upgrade.d/upgrade.22.sh deleted file mode 100644 index 81844ab..0000000 --- a/scripts/upgrade.d/upgrade.22.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available Nextcloud version -next_version="23.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="c37592abc3b65c8fd28459281a24f414b87af52fc8c2ea979be3f9be75d01a2c" diff --git a/scripts/upgrade.d/upgrade.23.sh b/scripts/upgrade.d/upgrade.23.sh deleted file mode 100644 index eb2b944..0000000 --- a/scripts/upgrade.d/upgrade.23.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available Nextcloud version -next_version="24.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="176cb5620f20465fb4759bdf3caaebeb7acff39d6c8630351af9f8738c173780" diff --git a/scripts/upgrade.d/upgrade.24.sh b/scripts/upgrade.d/upgrade.24.sh deleted file mode 100644 index 658c57d..0000000 --- a/scripts/upgrade.d/upgrade.24.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available Nextcloud version -next_version="25.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="2c05ac9d7b72b44ef8b3d2ae03ff0fd6121e254b8054556f5163bd8760dd8f49" diff --git a/scripts/upgrade.d/upgrade.25.sh b/scripts/upgrade.d/upgrade.25.sh deleted file mode 100644 index fedd8f1..0000000 --- a/scripts/upgrade.d/upgrade.25.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available Nextcloud version -next_version="26.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="f163150363aee9366ecb5cd5259bf6756ed4f073cea78b5fa515cada7a0d0c3d" diff --git a/scripts/upgrade.d/upgrade.26.sh b/scripts/upgrade.d/upgrade.26.sh deleted file mode 100644 index 59b4622..0000000 --- a/scripts/upgrade.d/upgrade.26.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available Nextcloud version -next_version="27.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="3d312a09b9345ac058758dd7b4059bf3cf0b1f0f1d747251b6fac3585ba6533f" diff --git a/scripts/upgrade.d/upgrade.27.sh b/scripts/upgrade.d/upgrade.27.sh deleted file mode 100644 index 3716a7f..0000000 --- a/scripts/upgrade.d/upgrade.27.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available Nextcloud version -next_version="28.0.0" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="4e8b0b74b40221e85f92ab869d0873c69a52d7e43889d9259c6259428a6a36f2" diff --git a/scripts/upgrade.d/upgrade.9.sh b/scripts/upgrade.d/upgrade.9.sh deleted file mode 100755 index 2d1c59e..0000000 --- a/scripts/upgrade.d/upgrade.9.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Version cible de la mise à jour de Nextcloud -next_version="10.0.2" - -# Nextcloud tarball checksum -nextcloud_source_sha256="a687a818778413484f06bb23b4e98589c73729fe2aa9feb1bf5584e3bd37103c" diff --git a/scripts/upgrade.d/upgrade.last.sh b/scripts/upgrade.d/upgrade.last.sh deleted file mode 100644 index 067e91b..0000000 --- a/scripts/upgrade.d/upgrade.last.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Last available Nextcloud version -next_version="28.0.1" - -# Nextcloud tarball checksum sha256 -nextcloud_source_sha256="2f80735b443082272fe6a3b5e32137957f1fc448c75342b94b5200b29725f3a4"