OK, I know the old method of tricking the NC instance to think it is of another version and forcing the upgrade, I thought you could elaborate on the failing upgrade process. For clarity, though:
'version' => '31.0.8.1',
"version":"31.0.8.1","versionstring":"31.0.8"
And this does not upgrade to 31.0.9 when using the procedure laid out in Upgrade manually — Nextcloud latest Administration Manual latest documentation - this part of the manual has always been broken BTW, but is still the closest to what a real-world terminal admin would do.
I am not using any other methods and I am not referring to or trying to enhance OPs post.
It does upgrade if using a method that is not recommended by the manual yet acceptable enough:
stop webserver, backup old NC folder → download and unpack latest.zip → copy files from latest.zip into existing NC folder → chown, chmod as in manual upgrade → start websersver and upgrade from command line → spend some time removing files that have not been replaced and are now redundant (the list of files to be removed will be provided by this very instance on the status screen).
@bb77, if you kindly didn’t rush me into answering other users’ questions? They asked the question literally minutes earlier, they do not need you to hurry me.
I would appreciate your comments on any issues in my config - this is from a backup of a test site that I was able to upgrade using the method laid out above. All others are configured the same way.
Click for config.php
<?php
$CONFIG = array (
'instanceid' => 'instanceid',
'passwordsalt' => 'passwordsalt',
'secret' => 'secret +',
'trusted_domains' =>
array (
0 => 'host.domain.local',
1 => 'host.domain.tld',
),
'trusted_proxies' =>
array (
0 => 'proxyip',
),
'overwritehost' => 'host.domain.tld',
'overwriteprotocol' => 'https',
'overwrite.cli.url' => 'https://host.domain.tld/',
'datadirectory' => '/mnt/nextcloud',
'dbtype' => 'mysql',
'version' => '31.0.8.1',
'dbname' => 'nextcloud',
'dbhost' => 'sql.domain.local:3306',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'dbuser',
'dbpassword' => 'dbpassword',
'installed' => true,
'skeletondirectory' => '',
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'filelocking.enabled' => 'true',
'redis' =>
array (
'host' => '/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 0.0,
),
'log_type' => 'file',
'logfile' => '/var/log/nextcloud.log',
'loglevel' => 3,
'logdateformat' => 'F d, Y H:i:s',
'maintenance' => false,
'maintenance_window_start' => 1,
'default_phone_region' => 'uk',
'mail_smtpmode' => 'smtp',
'mail_smtphost' => 'mail.domain.tld',
'mail_sendmailmode' => 'smtp',
'mail_from_address' => 'cloud',
'mail_domain' => 'domain.tld',
'mail_smtpport' => 'someport',
'mail_smtpauth' => true,
'mail_smtpname' => 'cloud@domain.tld',
'mail_smtppassword' => 'mail_smtppassword',
'app_install_overwrite' =>
array (
),
'apps_paths' =>
array (
0 =>
array (
'path' => '/var/www/nextcloud/apps',
'url' => '/apps',
'writable' => true,
),
),
'forbidden_filename_basenames' =>
array (
0 => 'con',
1 => 'prn',
2 => 'aux',
3 => 'nul',
4 => 'com0',
5 => 'com1',
6 => 'com2',
7 => 'com3',
8 => 'com4',
9 => 'com5',
10 => 'com6',
11 => 'com7',
12 => 'com8',
13 => 'com9',
14 => 'comÂą',
15 => 'com²',
16 => 'comÂł',
17 => 'lpt0',
18 => 'lpt1',
19 => 'lpt2',
20 => 'lpt3',
21 => 'lpt4',
22 => 'lpt5',
23 => 'lpt6',
24 => 'lpt7',
25 => 'lpt8',
26 => 'lpt9',
27 => 'lptÂą',
28 => 'lpt²',
29 => 'lptÂł',
),
'forbidden_filename_characters' =>
array (
0 => '<',
1 => '>',
2 => ':',
3 => '"',
4 => '|',
5 => '?',
6 => '*',
7 => '\\',
8 => '/',
),
'forbidden_filename_extensions' =>
array (
0 => ' ',
1 => '.',
2 => '.filepart',
3 => '.part',
),
'data-fingerprint' => 'custom_data_fingerprint',
);
Since I upgraded my test instance and one of the production instances this way and will not be upgrading the other production systems during daytime, I can only provide logs from the test instance. The symptoms of the failed update are visible in the logs:
Click for log excerpts
{"reqId":"LIH1F7swey37pFcLdUVM","level":0,"time":"September 14, 2025 17:31:54","remoteAddr":"","user":"--","app":"serverDI","method":"","url":"--","message":"The requested alias \"IntegrityCodeChecker\" is deprecated. Please request \"OC\\IntegrityCheck\\Checker\" directly. This alias will be removed in a future Nextcloud version.","userAgent":"--","version":"31.0.8.1","data":{"app":"serverDI"}}
(...)
{"reqId":"LIH1F7swey37pFcLdUVM","level":1,"time":"September 14, 2025 17:32:05","remoteAddr":"","user":"--","app":"updater","method":"","url":"--","message":"\\OC\\Updater::updateEnd: Update successful","userAgent":"--","version":"31.0.9.1","data":{"app":"updater"}}
{"reqId":"LIH1F7swey37pFcLdUVM","level":1,"time":"September 14, 2025 17:32:05","remoteAddr":"","user":"--","app":"updater","method":"","url":"--","message":"\\OC\\Updater::maintenanceDisabled: Turned off maintenance mode","userAgent":"--","version":"31.0.9.1","data":{"app":"updater"}}
{"reqId":"LIH1F7swey37pFcLdUVM","level":1,"time":"September 14, 2025 17:32:05","remoteAddr":"","user":"--","app":"updater","method":"","url":"--","message":"\\OC\\Updater::resetLogLevel: Reset log level to Error(3)","userAgent":"--","version":"31.0.9.1","data":{"app":"updater"}}
{"reqId":"Q0EyllRQKLMnyix8aIzj","level":3,"time":"September 14, 2025 17:33:57","remoteAddr":"redacted","user":"redacted","app":"core","method":"GET","url":"/index.php/apps/dashboard/","message":"Rendering themed error page failed. Falling back to un-themed error page.","userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.6 Safari/605.1.15","version":"31.0.9.1","exception":{"Exception":"OCP\\HintException","Message":"Downgrading is not supported and is likely to cause unpredictable issues (from 31.0.9.1 to 31.0.8.1)","Code":0,"Trace":[{"file":"/var/www/nextcloud/lib/public/Util.php","line":534,"function":"needUpgrade","class":"OC_Util","type":"::"},{"file":"/var/www/nextcloud/lib/private/TemplateLayout.php","line":255,"function":"needUpgrade","class":"OCP\\Util","type":"::"},{"file":"/var/www/nextcloud/lib/private/legacy/OC_Template.php","line":120,"function":"__construct","class":"OC\\TemplateLayout","type":"->"},{"file":"/var/www/nextcloud/lib/public/AppFramework/Http/TemplateResponse.php","line":189,"function":"fetchPage","class":"OC_Template","type":"->"},{"file":"/var/www/nextcloud/lib/private/legacy/OC_Template.php","line":244,"function":"render","class":"OCP\\AppFramework\\Http\\TemplateResponse","type":"->"},{"file":"/var/www/nextcloud/index.php","line":35,"function":"printErrorPage","class":"OC_Template","type":"::"}],"File":"/var/www/nextcloud/lib/private/legacy/OC_Util.php","Line":990,"Hint":"Downgrading is not supported and is likely to cause unpredictable issues (from 31.0.9.1 to 31.0.8.1)","message":"Rendering themed error page failed. Falling back to un-themed error page.","exception":{},"CustomMessage":"Rendering themed error page failed. Falling back to un-themed error page."}}
In a successful upgrade, the first line is slightly different and carries the right NC version number (31.0.9.1) instead of 31.0.8.1. Seems to me the 31.0.9. upgrade somehow checks file integrity using 31.0.8 checksums and fails, leaving the NC instance in an ambiguous state (31.0.9 files but 31.0.8 in config.php).