Snappdf error stoping update versions.txt

The stacktrace:

[2022-10-08 11:11:38] production.ERROR: file_get_contents(/var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/beganovich/snappdf/versions/revision.txt): Failed to open stream: No such file or directory {“userId”:1,“exception”:"[object] (ErrorException(code: 0): file_get_contents(/var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/beganovich/snappdf/versions/revision.txt): Failed to open stream: No such file or directory at /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/app/Http/Controllers/SelfUpdateController.php:178)
[stacktrace]

This happens every time I try to upgrade from 24 to 28.

The SelfUpdateController contains:

$current_revision = base_path(‘vendor/beganovich/snappdf/versions/revision.txt’);
$current_revision_text = file_get_contents($current_revision);

I have downloaded the lates .28 files from https://www.invoiceninja.org/, however the SelfUpdateController.php still has the same lines in it and causes the same error?

Hi,

@david any thoughts?

try running

vendor/bin/snappdf download

That resolved the snappdf issue (after the correct permissions were set.)

Then the issue became nelexa/zip/zrc/

[2022-10-10 08:51:03] production.ERROR: chmod(): Operation not permitted {“userId”:1,“exception”:"[object] (ErrorException(code: 0): chmod(): Operation not permitted at /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/nelexa/zip/src/ZipFile.php:456)
[stacktrace]

Tried chmod and chown, same issue. Copied the ZipFile.php from the github and pasted into a new file I created and renamed to ZipFile.php and that worked.

On to the next error!

Same ownership issues for files in bootstrap/cache folder. The permissions were incorrect.
I went back and refreshed permissions for the entire website.

Then in circles back round to:

[2022-10-10 09:14:45] production.ERROR: Cannot update system because services.php is not writable {“userId”:1,“exception”:"[object] (App\Exceptions\FilePermissionsFailure(code: 0): Cannot update system because services.php is not writable at /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/app/Http/Controllers/SelfUpdateController.php:250)
[stacktrace]

[2022-10-10 08:51:03] production.ERROR: chmod(): Operation not permitted {“userId”:1,“exception”:"[object] (ErrorException(code: 0): chmod(): Operation not permitted at /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/nelexa/zip/src/ZipFile.php:456)
[stacktrace]

refreshed permissions, double checked permissions.
Both directories and files have permission
rwx rwx rwx www-data www-data

Try the update again:

production.ERROR: chmod(): Operation not permitted {“userId”:1,“exception”:"[object] (ErrorException(code: 0): chmod(): Operation not permitted at /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/nelexa/zip/src/ZipFile.php:456)
[stacktrace]

Permissions for the file this time are still:
“rwx rwx rwx www-data www-data”

Am I selecting the wrong chown?


[2022-10-10 09:52:12] production.ERROR: chmod(): Operation not permitted {"userId":1,"exception":"[object] (ErrorException(code: 0): chmod(): Operation not permitted at /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/nelexa/zip/src/ZipFile.php:456)
[stacktrace]
#0 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/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/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/nelexa/zip/src/ZipFile.php(456): chmod()
#3 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/app/Http/Controllers/SelfUpdateController.php(143): PhpZip\\ZipFile->extractTo()
#4 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\SelfUpdateController->update()
#5 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction()
#6 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Route.php(261): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#7 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Route.php(204): Illuminate\\Routing\\Route->runController()
#8 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Router.php(725): Illuminate\\Routing\\Route->run()
#9 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#10 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(126): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#11 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(62): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#12 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#13 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/app/Http/Middleware/QueryLogging.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#14 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\QueryLogging->handle()
#15 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#16 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#17 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/app/Http/Middleware/Locale.php(46): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#18 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\Locale->handle()
#19 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/app/Http/Middleware/PasswordProtection.php(124): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#20 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\PasswordProtection->handle()
#21 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/app/Http/Middleware/TokenAuth.php(96): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#22 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\TokenAuth->handle()
#23 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/app/Http/Middleware/SetDb.php(40): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#24 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\SetDb->handle()
#25 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#26 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Router.php(726): Illuminate\\Pipeline\\Pipeline->then()
#27 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Router.php(703): Illuminate\\Routing\\Router->runRouteWithinStack()
#28 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Router.php(667): Illuminate\\Routing\\Router->runRoute()
#29 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Routing/Router.php(656): Illuminate\\Routing\\Router->dispatchToRoute()
#30 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()
#31 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#32 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\\Laravel\\Http\\SetRequestIpMiddleware->handle()
#34 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(42): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#35 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\\Laravel\\Http\\SetRequestMiddleware->handle()
#36 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#37 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Livewire\\DisableBrowserCache->handle()
#38 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/beyondcode/laravel-query-detector/src/QueryDetectorMiddleware.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): BeyondCode\\QueryDetector\\QueryDetectorMiddleware->handle()
#40 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(59): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle()
#42 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/app/Http/Middleware/Cors.php(25): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#43 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\\Http\\Middleware\\Cors->handle()
#44 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#45 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#46 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#48 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#49 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#50 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#51 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#52 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#53 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#54 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#55 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#56 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#57 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()
#58 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#59 /var/www/vhosts/domain.co.uk/billing.domain.co.uk/httpdocs/public/index.php(57): Illuminate\\Foundation\\Http\\Kernel->handle()
#60 {main}
"} 

//clean up old snappdf installations
        $this->cleanOldSnapChromeBinaries();

        $zipFile = new \PhpZip\ZipFile();

        $zipFile->openFile($file);

(    line 143)     $zipFile->extractTo(base_path());

        $zipFile->close();

        nlog('Finished extracting files');

        unlink($file);

        nlog('Deleted release zip file');

I opened the selfupdatecontroller.php and at the line it says this, so as a last ditch effort I went back and chmod the entire ‘billing.domain.co.uk’ folder 777 with www:data

Which failed to work either.

Hi there,

had the same issue with the same log entries refering to snappdf. After some testing i could complete the update successfully by commenting out the line 105 in SelfUpdateController.php to:

 //$this->cleanOldSnapChromeBinaries();

like done here

Hope this helps.

Regards

P.S. As always do

sudo chown -R www-data:www-data invoiceninja

then the update via the web console, and afterwards

sudo -u www-data php artisan optimize