From 71098fba81a7aa11fe85abd61f8cd5762f7755d1 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 4 Oct 2020 21:55:58 +0200 Subject: [PATCH 1/4] nextcloud20: init --- nixos/modules/services/web-apps/nextcloud.nix | 2 +- pkgs/servers/nextcloud/default.nix | 5 +++++ pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/nixos/modules/services/web-apps/nextcloud.nix b/nixos/modules/services/web-apps/nextcloud.nix index e9c45754285..2bfab22b1b2 100644 --- a/nixos/modules/services/web-apps/nextcloud.nix +++ b/nixos/modules/services/web-apps/nextcloud.nix @@ -85,7 +85,7 @@ in { package = mkOption { type = types.package; description = "Which package to use for the Nextcloud instance."; - relatedPackages = [ "nextcloud18" "nextcloud19" ]; + relatedPackages = [ "nextcloud18" "nextcloud19" "nextcloud20" ]; }; maxUploadSize = mkOption { diff --git a/pkgs/servers/nextcloud/default.nix b/pkgs/servers/nextcloud/default.nix index 183da107f12..fa17e10da7b 100644 --- a/pkgs/servers/nextcloud/default.nix +++ b/pkgs/servers/nextcloud/default.nix @@ -49,4 +49,9 @@ in { version = "19.0.3"; sha256 = "0sc9cnsdh8kj60h7i3knh40ngdz1w1wmdqw2v2axfkmax22kjl7w"; }; + + nextcloud20 = generic { + version = "20.0.0"; + sha256 = "1n2cv1i56g6qpzkbl5xaf420zzr4y7isg0lskmr7ymk83way0wx2"; + }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2b4682f5c55..672de285ac1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5720,7 +5720,7 @@ in grocy = callPackage ../servers/grocy { }; inherit (callPackage ../servers/nextcloud {}) - nextcloud17 nextcloud18 nextcloud19; + nextcloud17 nextcloud18 nextcloud19 nextcloud20; nextcloud-client = libsForQt514.callPackage ../applications/networking/nextcloud-client { }; From 5f67a62d595e217cc65e6e9ba7729e9924290737 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 4 Oct 2020 23:37:19 +0200 Subject: [PATCH 2/4] nixos/nextcloud: update upgrade-path for `nextcloud20` Please note that this is only for 21.03 since `nextcloud19` is intended to be the default for the already feature-frozen 20.09 (the bump itself is supposed to get backported however). --- nixos/doc/manual/release-notes/rl-2103.xml | 11 +++- nixos/modules/services/web-apps/nextcloud.nix | 50 ++++++++----------- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/nixos/doc/manual/release-notes/rl-2103.xml b/nixos/doc/manual/release-notes/rl-2103.xml index df39c6f6450..33562848001 100644 --- a/nixos/doc/manual/release-notes/rl-2103.xml +++ b/nixos/doc/manual/release-notes/rl-2103.xml @@ -75,7 +75,16 @@ - + + The default-version of nextcloud is nextcloud20. + Please note that it's not possible to upgrade nextcloud + across multiple major versions! This means that it's e.g. not possible to upgrade + from nextcloud18 to nextcloud20 in a single deploy. + + + The package can be manually upgraded by setting + to nextcloud20. + diff --git a/nixos/modules/services/web-apps/nextcloud.nix b/nixos/modules/services/web-apps/nextcloud.nix index 2bfab22b1b2..51059fc3ea4 100644 --- a/nixos/modules/services/web-apps/nextcloud.nix +++ b/nixos/modules/services/web-apps/nextcloud.nix @@ -330,37 +330,28 @@ in { } ]; - warnings = [] - ++ (optional (cfg.poolConfig != null) '' + warnings = let + latest = 20; + upgradeWarning = major: nixos: + '' + A legacy Nextcloud install (from before NixOS ${nixos}) may be installed. + + After nextcloud${toString major} is installed successfully, you can safely upgrade + to ${toString (major + 1)}. The latest version available is nextcloud${toString latest}. + + Please note that Nextcloud doesn't support upgrades across multiple major versions + (i.e. an upgrade from 16 is possible to 17, but not 16 to 18). + + The package can be upgraded by explicitly declaring the service-option + `services.nextcloud.package`. + ''; + in (optional (cfg.poolConfig != null) '' Using config.services.nextcloud.poolConfig is deprecated and will become unsupported in a future release. Please migrate your configuration to config.services.nextcloud.poolSettings. '') - ++ (optional (versionOlder cfg.package.version "18") '' - A legacy Nextcloud install (from before NixOS 20.03) may be installed. - - You're currently deploying an older version of Nextcloud. This may be needed - since Nextcloud doesn't allow major version upgrades that skip multiple - versions (i.e. an upgrade from 16 is possible to 17, but not 16 to 18). - - It is assumed that Nextcloud will be upgraded from version 16 to 17. - - * If this is a fresh install, there will be no upgrade to do now. - - * If this server already had Nextcloud installed, first deploy this to your - server, and wait until the upgrade to 17 is finished. - - Then, set `services.nextcloud.package` to `pkgs.nextcloud18` to upgrade to - Nextcloud version 18. Please note that Nextcloud 19 is already out and it's - recommended to upgrade to nextcloud19 after that. - '') - ++ (optional (versionOlder cfg.package.version "19") '' - A legacy Nextcloud install (from before NixOS 20.09) may be installed. - - If/After nextcloud18 is installed successfully, you can safely upgrade to - nextcloud19. If not, please upgrade to nextcloud18 first since Nextcloud doesn't - support upgrades that skip multiple versions (i.e. an upgrade from 17 to 19 isn't - possible, but an upgrade from 18 to 19). - ''); + ++ (optional (versionOlder cfg.package.version "18") (upgradeWarning 17 "20.03")) + ++ (optional (versionOlder cfg.package.version "19") (upgradeWarning 18 "20.09")) + ++ (optional (versionOlder cfg.package.version "20") (upgradeWarning 19 "21.03")); services.nextcloud.package = with pkgs; mkDefault ( @@ -372,7 +363,8 @@ in { '' else if versionOlder stateVersion "20.03" then nextcloud17 else if versionOlder stateVersion "20.09" then nextcloud18 - else nextcloud19 + else if versionOlder stateVersion "21.03" then nextcloud19 + else nextcloud20 ); } From 227ba90b28b696988a6e44cbd01249a63244165d Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 4 Oct 2020 23:50:07 +0200 Subject: [PATCH 3/4] nixos/nextcloud: update nginx config for `nextcloud20` See #97666 for further context. --- nixos/modules/services/web-apps/nextcloud.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/nixos/modules/services/web-apps/nextcloud.nix b/nixos/modules/services/web-apps/nextcloud.nix index 51059fc3ea4..5daa7bdea20 100644 --- a/nixos/modules/services/web-apps/nextcloud.nix +++ b/nixos/modules/services/web-apps/nextcloud.nix @@ -535,9 +535,9 @@ in { services.nginx.enable = mkDefault true; - # FIXME(ma27) make sure that the config works fine with Nextcloud 19 - # *and* Nextcloud 20 as soon as it gets released. - services.nginx.virtualHosts.${cfg.hostName} = { + services.nginx.virtualHosts.${cfg.hostName} = let + major = toInt (versions.major cfg.package.version); + in { root = cfg.package; locations = { "= /robots.txt" = { @@ -550,7 +550,9 @@ in { }; "/" = { priority = 900; - extraConfig = "rewrite ^ /index.php;"; + extraConfig = if major < 20 + then "rewrite ^ /index.php;" + else "try_files $uri $uri/ /index.php$request_uri;"; }; "~ ^/store-apps" = { priority = 201; @@ -574,7 +576,7 @@ in { "~ ^/(?:\\.|autotest|occ|issue|indie|db_|console)".extraConfig = '' return 404; ''; - "~ ^\\/(?:index|remote|public|cron|core\\/ajax\\/update|status|ocs\\/v[12]|updater\\/.+|oc[ms]-provider\\/.+|.+\\/richdocumentscode\\/proxy)\\.php(?:$|\\/)" = { + ${if major < 20 then "~ ^\\/(?:index|remote|public|cron|core\\/ajax\\/update|status|ocs\\/v[12]|updater\\/.+|oc[ms]-provider\\/.+|.+\\/richdocumentscode\\/proxy)\\.php(?:$|\\/)" else "~ \\.php(?:$|/)"} = { priority = 500; extraConfig = '' include ${config.services.nginx.package}/conf/fastcgi.conf; From 9cbe30e129c8ddaa2159532c3174a346761a8358 Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Mon, 5 Oct 2020 00:09:28 +0200 Subject: [PATCH 4/4] nixos/nextcloud: `--database-pass` must not be empty for pgsql/mysql This is a breaking change from `nextcloud20`. However, the affected test is still passing with an unused database password and socket authentication. --- nixos/modules/services/web-apps/nextcloud.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/nixos/modules/services/web-apps/nextcloud.nix b/nixos/modules/services/web-apps/nextcloud.nix index 5daa7bdea20..bf65189f6a7 100644 --- a/nixos/modules/services/web-apps/nextcloud.nix +++ b/nixos/modules/services/web-apps/nextcloud.nix @@ -427,7 +427,7 @@ in { then ''"$(<"${toString c.dbpassFile}")"'' else if c.dbpass != null then ''"${toString c.dbpass}"'' - else null; + else ''""''; adminpass = if c.adminpassFile != null then ''"$(<"${toString c.adminpassFile}")"'' else ''"${toString c.adminpass}"''; @@ -441,8 +441,7 @@ in { ${if c.dbhost != null then "--database-host" else null} = ''"${c.dbhost}"''; ${if c.dbport != null then "--database-port" else null} = ''"${toString c.dbport}"''; ${if c.dbuser != null then "--database-user" else null} = ''"${c.dbuser}"''; - ${if (any (x: x != null) [c.dbpass c.dbpassFile]) - then "--database-pass" else null} = dbpass; + "--database-pass" = dbpass; ${if c.dbtableprefix != null then "--database-table-prefix" else null} = ''"${toString c.dbtableprefix}"''; "--admin-user" = ''"${c.adminuser}"'';