Heimdall icon indicating copy to clipboard operation
Heimdall copied to clipboard

Installation Fails PHP 8.1

Open srsgores opened this issue 2 years ago • 1 comments

Running on an LXC Debian 11.3.1 container with php8.1-fpm, php artisan key:generate errors out:

PHP Fatal error: During inheritance of ArrayAccess: Uncaught ErrorException: Return type of Illuminate\Support\Collection::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Support/Collection.php:1349 Stack trace: #0 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Support/Collection.php(11): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError() #1 /var/www/Heimdall/vendor/composer/ClassLoader.php(571): include('...') #2 /var/www/Heimdall/vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile() #3 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Support/helpers.php(110): Composer\Autoload\ClassLoader->loadClass() #4 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(130): collect() #5 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(106): Illuminate\Foundation\PackageManifest->build() #6 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(89): Illuminate\Foundation\PackageManifest->getManifest() #7 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(78): Illuminate\Foundation\PackageManifest->config() #8 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterFacades.php(26): Illuminate\Foundation\PackageManifest->aliases() #9 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(230): Illuminate\Foundation\Bootstrap\RegisterFacades->bootstrap() #10 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(310): Illuminate\Foundation\Application->bootstrapWith() #11 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(127): Illuminate\Foundation\Console\Kernel->bootstrap() #12 /var/www/Heimdall/artisan(37): Illuminate\Foundation\Console\Kernel->handle() #13 {main} in /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Support/Collection.php on line 11

In Collection.php line 11:

During inheritance of ArrayAccess: Uncaught ErrorException: Return type of Illuminate\Support\Collection::offse tExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\Return TypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/Heimdall/vendor/laravel /framework/src/Illuminate/Support/Collection.php:1349 Stack trace: #0 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Support/Collection.php(11): Illuminate\Foundation
Bootstrap\HandleExceptions->handleError() #1 /var/www/Heimdall/vendor/composer/ClassLoader.php(571): include('...') #2 /var/www/Heimdall/vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile() #3 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Support/helpers.php(110): Composer\Autoload\ClassL oader->loadClass() #4 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(130): collect() #5 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(106): Illuminate\Fo undation\PackageManifest->build() #6 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(89): Illuminate\Fou ndation\PackageManifest->getManifest() #7 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(78): Illuminate\Fou ndation\PackageManifest->config() #8 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterFacades.php(26): Illu minate\Foundation\PackageManifest->aliases() #9 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(230): Illuminate\Founda tion\Bootstrap\RegisterFacades->bootstrap() #10 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(310): Illuminate\Fo undation\Application->bootstrapWith() #11 /var/www/Heimdall/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(127): Illuminate\Fo undation\Console\Kernel->bootstrap() #12 /var/www/Heimdall/artisan(37): Illuminate\Foundation\Console\Kernel->handle() #13 {main}

srsgores avatar Apr 27 '22 04:04 srsgores

Seems this requires an update of the bundled libs (or whatever PHP slang) to the upstream versions. At least for e.g. https://github.com/illuminate/database/blob/master/Eloquent/Model.php this is fixed.

What I did was essentially:

  1. clone repo, cd into checkout
  2. run yarn
  3. In composer.json, bump laravel/framework to 8.0, laravel/ui to 3.4, phpunit to 8.0
  4. run composer

That does the trick for me (and also generated the key, though I still adapted the .env for my needs). At least I could add a service, didn't test much beyond that. Maybe it's still subtily broken somewhere else, e.g. the app itself could still use deprecated functionality, or some dependency that hasn't been ported to php 8.1. You probably want to enable debug in your .env to catch any such errors.

Also, there is a PR that seems to do this properly (I just guessed the bumped versions): https://github.com/linuxserver/Heimdall/pull/843 I might just switch to that branch, or use the branch author's updated files to fetch the upgraded packages myself.

archi avatar Jun 23 '22 23:06 archi

Should be fixed

KodeStar avatar Nov 14 '22 15:11 KodeStar