Update from v5.46 to v5.5.49 Fail

Hi,

I’m trying to update a self hosted installation from v5.46 to v5.5.49

image

Yes I checked health and it all seems ok… see below

image

At first it complained that “pakages.php” is not writable … however it is, see below …

Anyhow just to make sure that it is writable by everyone I changed the permissions to “777” and tried the update again … it took a long time and it seem to beworking… then a message flashed by 'Server Error" then disappeared the screen went gray and it returned to the app, which I’m running in web browser (Firefox V108.0.1) without completing the update …

When I look in the laravel log the following message pops out …

[2022-12-21 04:30:24] production.ERROR: chmod(): Operation not permitted {“userId”:1,“exception”:"[object] (ErrorException(code: 0): chmod(): Operation not permitted at /var/www/invoiceninja/vendor/nelexa/zip/src/ZipFile.php:456)

It seems like it is trying to modify the permissions of “ZipFile.php” why??

Anyhow … it refuses to update …

Anyone else have this issue?
btw … the whole log is below the line of asterisks


[2022-12-21 04:30:24] production.ERROR: chmod(): Operation not permitted {“userId”:1,“exception”:"[object] (ErrorException(code: 0): chmod(): Operation not permitted at /var/www/invoiceninja/vendor/nelexa/zip/src/ZipFile.php:456)
[stacktrace]
#0 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(259): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()
#1 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->Illuminate\Foundation\Bootstrap\{closure}()
#2 /var/www/invoiceninja/vendor/nelexa/zip/src/ZipFile.php(456): chmod()
#3 /var/www/invoiceninja/app/Http/Controllers/SelfUpdateController.php(111): PhpZip\ZipFile->extractTo()
#4 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\SelfUpdateController->update()
#5 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\Routing\Controller->callAction()
#6 /var/www/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Routing/TracingControllerDispatcherTracing.php(21): Illuminate\Routing\ControllerDispatcher->dispatch()
#7 /var/www/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Routing/TracingRoutingDispatcher.php(19): Sentry\Laravel\Tracing\Routing\TracingControllerDispatcherTracing->Sentry\Laravel\Tracing\Routing\{closure}()
#8 /var/www/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Routing/TracingControllerDispatcherTracing.php(20): Sentry\Laravel\Tracing\Routing\TracingRoutingDispatcher->wrapRouteDispatch()
#9 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Sentry\Laravel\Tracing\Routing\TracingControllerDispatcherTracing->dispatch()
#10 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\Routing\Route->runController()
#11 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(798): Illuminate\Routing\Route->run()
#12 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#13 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(126): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#14 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(62): Illuminate\Routing\Middleware\ThrottleRequests->handleRequest()
#15 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\ThrottleRequests->handle()
#16 /var/www/invoiceninja/app/Http/Middleware/QueryLogging.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#17 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\QueryLogging->handle()
#18 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#19 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle()
#20 /var/www/invoiceninja/app/Http/Middleware/Locale.php(46): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#21 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\Locale->handle()
#22 /var/www/invoiceninja/app/Http/Middleware/PasswordProtection.php(124): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#23 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\PasswordProtection->handle()
#24 /var/www/invoiceninja/app/Http/Middleware/TokenAuth.php(96): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#25 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\TokenAuth->handle()
#26 /var/www/invoiceninja/app/Http/Middleware/SetDb.php(40): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#27 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\SetDb->handle()
#28 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#29 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(799): Illuminate\Pipeline\Pipeline->then()
#30 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(776): Illuminate\Routing\Router->runRouteWithinStack()
#31 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(740): Illuminate\Routing\Router->runRoute()
#32 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(729): Illuminate\Routing\Router->dispatchToRoute()
#33 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(190): Illuminate\Routing\Router->dispatch()
#34 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#35 /var/www/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#36 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\Laravel\Http\SetRequestIpMiddleware->handle()
#37 /var/www/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(30): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#38 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\Laravel\Http\SetRequestMiddleware->handle()
#39 /var/www/invoiceninja/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#40 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Livewire\DisableBrowserCache->handle()
#41 /var/www/invoiceninja/app/Http/Middleware/Cors.php(25): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#42 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\Cors->handle()
#43 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#44 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle()
#45 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#46 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#47 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
#48 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#49 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#50 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#51 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#52 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#53 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#54 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#55 /var/www/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Middleware.php(52): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#56 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\Laravel\Tracing\Middleware->handle()
#57 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#58 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\Pipeline\Pipeline->then()
#59 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(134): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#60 /var/www/invoiceninja/public/index.php(57): Illuminate\Foundation\Http\Kernel->handle()
#61 {main}
"}

Hi,

@david do you have any suggestions?

The method is failing in that file.

This is most likely due to PHP on windows and system permissions.

I don’t think the self updater is going to work on that configuration.

Hi David …

This installation is on a Ubuntu 22.04 LTS VM running in a proxmox hypervisor … so it is not running on windows… .anyhow, what is a bit weird is that the update worked on my development machine … an exact mirror of the prod machine the only difference is that I only have dummy data in the dev machine ??? … I do not know why the prod machine failed … The reason why I asked the question is that I’m worried that if Import my live data into dev … that something in the data broke the update … then I’m stuck up the creek with a paddle .so ideally it would be nice to know why the upgrade failed … In the meantime I’ll snapshot my dev … run up a mirror and import the data and see how that goes …

Correct me if I’m wrong… but all the update does is overwrite the current folder structure with the contents of the update zip file … yes?.. So if that is the case the theory says I could download the update zip file, backup the .env config file and overwrite my current installation … :roll_eyes:

I suspect I would need to run some " php artisan" cleanup commands afterwards would like to know what they should be … any advice will be appreciated … thank you in advance…

GV

@george3430

Sorry, i saw the windows permission dialogue and assumed wrongly, but now i see it was a SFTP window…

Yes you are correct, the updater works in the following steps:

  1. Download release.
  2. Check that all files are read/writable by the webserver
  3. Unzips the release file and overwrite the files
  4. Runs an update script which performs the database migrations / updates the cache and other system tasks required.
  5. Cleans up release file.

What potentially could be happening here is that the webuser does not have the correct permission levels to run the chmod() command.

I would suggest comparing the outputs of

stat directory

between your dev and production environments, my guess is that a does not have correct permissions for the webuser. Please note, the entire path needs to have the correct permissions. ie if your path to invoice ninja is:

/srv/www/invoiceninja

then both

/srv
and
/srv/www

need to stat correctly.

Hi David,

Thank you for your reply … I think something more sinister has happened and I suspect it might have happened during a ubuntu update and some fast fingers on my part … not quite sure how … and troubleshooting to that level is above my pay grade :face_with_monocle::nerd_face: so I’m taking the easy way out … :sunglasses:

I created a snapshot of the working dev and is in the process of importing my data … it seems to be fine so far

anyhow … So I did a chmod on the whole path including “var” and “www” to make it writable … rebooted the system … then nothing worked … must have done something wrong … being the linux noob I am … anyhow seems like I fried the system … so just posting the result so others can learn from my mistake …

After having a look at the logs it seemed that the mariadb got scrambled … see logs below …


░░ The job identifier is 1057 and the job result is failed.
lines 2010-2051/2051 (END)
░░ Defined-By: systemd
░░ Support: Enterprise open source support | Ubuntu
░░
░░ A start job for unit mariadb.service has begun execution.
░░
░░ The job identifier is 1057.
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [Note] /usr/sbin/mariadbd (server 10.6.11-MariaDB-0ubuntu0.22.04.1) starting as process 1265 …
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [Warning] Can’t create test file /var/lib/mysql/invninj.lower-test
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] mariadbd: File ‘/var/lib/mysql/aria_log_control’ not found (Errcode: 13 “Permission denied”)
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] mariadbd: Got error ‘Can’t open file’ when trying to use aria control file ‘/var/lib/mysql/aria_log_control’
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] Plugin ‘Aria’ init function returned error.
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] Plugin ‘Aria’ registration as a STORAGE ENGINE failed.
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] InnoDB: The data file ‘./ibdata1’ must be writable
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] InnoDB: The data file ‘./ibdata1’ must be writable
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] Plugin ‘InnoDB’ init function returned error.
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [Note] Plugin ‘FEEDBACK’ is disabled.
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] Could not open mysql.plugin table: “Unknown storage engine ‘Aria’”. Some plugins may be not loaded
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] Failed to initialize plugins.
Dec 22 01:42:21 invninj mariadbd[1265]: 2022-12-22 1:42:21 0 [ERROR] Aborting
Dec 22 01:42:21 invninj systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: Enterprise open source support | Ubuntu
░░
░░ An ExecStart= process belonging to unit mariadb.service has exited.
░░
░░ The process’ exit code is ‘exited’ and its exit status is 1.
Dec 22 01:42:21 invninj systemd[1]: mariadb.service: Failed with result ‘exit-code’.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: Enterprise open source support | Ubuntu
░░
░░ The unit mariadb.service has entered the ‘failed’ state with result ‘exit-code’.
Dec 22 01:42:21 invninj systemd[1]: Failed to start MariaDB 10.6.11 database server.
░░ Subject: A start job for unit mariadb.service has failed
░░ Defined-By: systemd
░░ Support: Enterprise open source support | Ubuntu
░░
░░ A start job for unit mariadb.service has finished with a failure.
░░
░░ The job identifier is 1057 and the job result is failed.

:confounded::thinking::thinking::thinking::persevere: