Php-updater - a script to upgrade php in a safe way

The error I found was in /var/log/apache2/nc-error.log:

[Fri Nov 15 10:34:57.804525 2024] [proxy_fcgi:error] [pid 733707:tid 733718] [remote 46.142.78.93:64107] AH01071: Got error 'Access to the script '/var/www/nextcloud/apps/serverinfo/update
' has been denied (see security.limit_extensions)'

Do I need to do something on the parameter “security.limit_extensions” ?

cgi.fix_pathinfo defaults to 1 ↗, so if that is commented out it is the same as if it is set to 1
But normally it shouldn’t matter for nextcloud at all.

I’m terribly sorry, I’m not aware of this connection at all. The error comes from a script from the serverinfo app. Also, your Nextcloud version is too old and is no longer supported.
You can use the php-updater script to update your php version step by step to the version you need to update to a more recent Nextcloud (at least Nextcloud 28) ↗. Once you’ve bumped your Nextcloud version to a supported one, the error messages will most likely no longer appear.


Viel GlĂŒck,
ernolf

Thanks a lot. Since I am on php8.2 now, next step is to go to Nextcloud 27.1.11 


1 Like

Live saver!! Been struggling with upgrading php for I don’t know how long. After upgrading to NC30 couldn’t postpone longer to move to a higher php version but whatever I tried, whatever guide I followed, it always resulted in an Internal Server Error. Until using your script. Highly recommended to anyone struggling like me. Feeling confident now for future php upgrades. Thanks!

3 Likes

Hi @ernolf
erstmal Gratulation zur update Funktion (im script selber) 
 funktioniert super :+1:
Und sorry daß ich jetzt erst antworten kann, bin erst jetzt hochgestuft worden und darf mehr als 2 Fragen stellen .
Du hattest mir schon geholfen auf 8.3 upzudaten !
Habe danach per:

sudo do-release-upgrade

von ubuntu server 22.04.5 LTS auf 24.04.1 LTS upgrade gemacht
Nextcloud lÀuft noch prima nach dem update und es wird weiterhin PHP 8.3 in NC genutzt:

          [1] - php8.1
          [2] - php8.2
          [3] - php8.3
          [4] - php8.4
          [q] - do nothing, quit
 - Please make your choice:

Danach dachte ich mir die PHP 8.1 und 8.2 könnten ja gelöscht werden.
Klappt aber nicht mit:

sudo apt remove --purge php8.1

es kommt Meldung:

Paket »php8.1« ist nicht installiert, wird also auch nicht entfernt.

Ich weiß jetzt nicht ob das zu OT hier.
Aber vielleicht hÀttest mir einen Tipp zu meinen Fragen:
Hat das 24.04.1 LTS update evtl nur etwas verbogen ?
Könnte ich den Php-updater verwirren wenn ich manuell PHP 8.1 + 8.2 lösche ?
Oder ist im Php-updater bereits schon ein Löschbefehl integriert ?

Danke schon mal

Da hilft Dir jede Suchmaschine. Schau mal hier:

1 Like

Danke @rakekniven !
habe zwar gesucht, aber nicht nach Fehlern im Paketverwaltungssystem.
Werde ich mal probieren mit:

sudo apt purge php8.1\*
sudo apt purge php8.2\*

Muss aber erst ein clonezilla image ziehen.
Geht ja schnell.

Es hat funktioniert (auch der interne script-updater) , 8.1+8.2 sind weg:

 - Switch default php version to:
          [1] - php8.3
          [2] - php8.4
          [q] - do nothing, quit
 - Please make your choice:

und NC lÀuft auch noch :+1:
Super ist auch daß der php-updater jedesmal die installierten Module checkt.

Hi @JoergB2,

vielen Dank fĂŒr dein Feedback

Die syntax bei apt-get ist:

sudo apt-get purge '*php8.1*'

also wildcards mĂŒssen, zwischen einzelnen AnfĂŒhrungszeichen gegen Globbing geschĂŒtzt werden.

Den Asterisk davor, ist damit auch Pakete wie libapache2-mod-php8.1 mit abgedeckt sind.

Das “PAKET” “php8.1” ist ein Meta Paket. Das Skript bietet grundsĂ€tzlich an, Meta-Pakete zu entfernen, weil sie selber keine Software enthalten, sondern nur Paket-Gruppen davon abhĂ€ngig sind. Das ist ein Debian Typisches Feature mit dem ich mich nie wirklich habe anfreunden können, weil es sehr ungenau einfach Paket-Gruppen installiert und updatet, von der manche Pakete oft gar nicht benötigt werden.
Also die Meldung war genau richtig. Das “PAKET” php8.1 ist (war) tatsĂ€chlich gar nicht installiert.

Nein, du kannst das Skript damit nicht verwirren. Es wird nach Möglichkeit immer dynamisch vor und nach jedem Schritt nach den tatsÀchlich installierten und vorhandenen Pakete und Erweiterungen gesucht, also wenn ein Paket nicht mehr da ist, dann registriert das Skript das auch so und beurteilt bzw. berechnet die möglichen Schritte jeweils aus den Gegebenheiten.

Auch die Syntax geht, besser jedoch wie ich oben beschrieben habe oder gleich so, damit beide Versionen abgedeckt sind:

sudo apt-get purge '*php8.[12]*'

Ja, ich habe in den letzten Tagen enorm viel daran entwickelt, es soll quasi - so meine Vorstellung - aus jeder Situation heraus die Möglichkeiten berechnen und daraus die machbaren Konfigurationsschritte anbieten.
Es macht nÀmlich wenig sinn, ein php up zu daten, wenn dazu nicht die passenden Module in der richtigen Version im jeweiligen Server (nginx oder apache2) geladen sind.

Also es freut mich, dass es funktioniert.


Viel GlĂŒck,
ernolf

2 Likes

Script worked great, thanks for your work, contributed

1 Like

@ernolf Hab eine konto hier auf angemakt um danke zu sagen!

Danke dir, kuss deine augen !!! php-updater

1 Like

Habe gerade mit Hilfe von Php-updater von 8.1 auf 8.2 aktualisiert. Lief völlig problemlos. Vielen Dank fĂŒr diese tolle Lösung!

2 Likes

Hallo,
wenn ich das Script ausfĂŒhre erscheint immer folgende Meldung:


Bitte um kurze Hilfe - Danke

Hi @foxi1at,

Hat die Box auf der das lÀuft freien Zugang zum Internet?

Das Skript benötigt eine Vielzahl von Module (an die 100). Diese mĂŒssen vom Module Server heruntergeladen werden. Also wenn kein Zugang zum Internet besteht, dann funktioniert es nicht.

h.t.h.


ernolf

ja, ping 8.8.8.8 und ping www.google.at funktioniert

Aus den LogeintrĂ€gen kann ich erkennen, dass deine Box voller Zugriff hat auf den Module Server. Die Module werden alle heruntergeladen und im Speicher deiner Box geladen jedoch nicht lokal auf deiner Festplatte geschrieben
 Das Problem liegt in den Rechten deines Benutzers ‘nextcloud’. Hat der volle Sudo rechte? Hast du SELinux oder AppArmor im Einsatz?
Das Skript braucht zwingend root Rechte und muss schreiben können im Verzeichnis /tmp sowie in /usr/local/include, wo die Module hinein geschrieben werden, also versuche es mal als root zu starten.

h.t.h.


ernolf

Wenn es das Verzeichnis

/usr/local/include/ebtb

schon gibt, könnte es sein, dass dort etwas kaputt gegangen ist. Dann versuche es nochmal, nachdem du das Verzeichnis entfernt hast:

sudo rm -r /usr/local/include/ebtb

ernolf

Hallo zusammen,

ich versuche mit dem Skript (https://global-social.net/script/php-updater) von PHP 8.1.31 zu aktualisieren.
Das Skript berichtet dabei folgende Liste:

  ==============================================================================
  actual PHP related packages installed and managed by dpkg
X    Package                Version                                       Status
  ------------------------------------------------------------------------------
SAPI libapache2-mod-php8.1  8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \apache2handler /usr/lib/apache2/modules/libphp8.1.so <ACTIVE> loaded
   - php7.4-common          1:7.4.33-16+0~20241124.96+debian11~1.gbp29586d  im
     \included modules: calendar ctype exif ffi fileinfo ftp gettext iconv pdo 
       phar posix shmop sockets sysvmsg sysvsem sysvshm tokenizer 
   - php7.4-gd              1:7.4.33-16+0~20241124.96+debian11~1.gbp29586d  im
     \included module: gd 
   - php7.4-readline        1:7.4.33-16+0~20241124.96+debian11~1.gbp29586d  im
     \included module: readline 
   - php7.4-xml             1:7.4.33-16+0~20241124.96+debian11~1.gbp29586d  im
     \included modules: dom simplexml xml xmlreader xmlwriter xsl 
   - php8.1-apcu            5.1.24-1+0~20241124.41+debian11~1.gbpff678c     im
     \included module: apcu 
   - php8.1-bcmath          8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included module: bcmath 
SAPI php8.1-cli             8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \php binary /usr/bin/php8.1 <ACTIVE> linked to generic /usr/bin/php
   - php8.1-common          8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included modules: calendar ctype exif ffi fileinfo ftp gettext iconv pdo 
       phar posix shmop sockets sysvmsg sysvsem sysvshm tokenizer 
   - php8.1-curl            8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included module: curl 
   - php8.1-gd              8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included module: gd 
   - php8.1-gmp             8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included module: gmp 
   - php8.1-imagick         3.7.0-9+0~20241126.47+debian11~1.gbp7df923      im
     \included module: imagick 
   - php8.1-intl            8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included module: intl 
   - php8.1-mbstring        8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included module: mbstring 
   - php8.1-mysql           8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included modules: mysqli mysqlnd pdo_mysql 
   - php8.1-opcache         8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included module: opcache 
   - php8.1-readline        8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included module: readline 
   - php8.1-xml             8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included modules: dom simplexml xml xmlreader xmlwriter xsl 
   - php8.1-zip             8.1.31-1+0~20241121.67+debian11~1.gbp9e3dc4     im
     \included module: zip 
   - php8.4-apcu            5.1.24-1+0~20241124.41+debian11~1.gbpff678c     im
     \included module: apcu 
SAPI php8.4-cli             8.4.1-3+0~20241125.19+debian11~1.gbpda2c03      im
     \php binary /usr/bin/php8.4 <<INACTIVE not linked
   - php8.4-common          8.4.1-3+0~20241125.19+debian11~1.gbpda2c03      im
     \included modules: calendar ctype exif ffi fileinfo ftp gettext iconv pdo 
       phar posix shmop sockets sysvmsg sysvsem sysvshm tokenizer 
   - php8.4-imagick         3.7.0-9+0~20241126.47+debian11~1.gbp7df923      im
     \included module: imagick 
   - php8.4-opcache         8.4.1-3+0~20241125.19+debian11~1.gbpda2c03      im
     \included module: opcache 
   - php8.4-readline        8.4.1-3+0~20241125.19+debian11~1.gbpda2c03      im
     \included module: readline 
   - php-common             2:95+0~20240927.54+debian11~1.gbpe0084c         im

Mein Problem ist nun, dass die Ladeanimation fĂŒr den Config-Check ewig stehen bleibt (habe nun schon 20 min gewartet).
check_config() searching known configuration errors in php7.4: checking apcu_bc .

Habe das Skript auch schon mit CTRL+C gestoppt und neugestartet, aber es stockt wieder an der gleichen Stelle.
Gibt es hier etwas, was ich tun kann?

Danke im Voraus und viele GrĂŒĂŸe

Hi @nihebe,

erst mal vielen Dank fĂŒr dein Feedback. Solche Meldungen helfen mir dabei, solche “HĂ€nger” fĂŒr die Zukunft zu vermeiden.

ich kann nicht ganz nachvollziehen an was das genau liegt, bin im Moment auch im Krankenhaus und kann nicht so wie sonst aber es hat damit zu tun, dass nach Konfigurationsdetails fĂŒr Module aus php7.4 gesucht wird. Da deine aktive php Version aber 8.1 ist solltest du - fĂŒr sofern du es nicht wirklich benötigst - alle php7.4 Überbleibsel radikal entfernen. Das Skript kann prinzipiell damit zwar umgehen aber Überbleibsel aus alten Installationen sind oft sehr schwer zu analysieren und können leider immer noch zu solchen HĂ€ngern fĂŒhren.

Also wenn du auf php7.4 verzichten kannst, dann mache folgendes:

sudo apt-get purge '*php7.4*'

und starte danach das Skript von Neuem.

Du kannst dir ja Konfigurationsdateien vorher sichern irgendwo, falls du da ganz besondere Einstellungen drin vorgenommen hattest die du unbedingt wieder herstellen möchtest.

Danach sollte es nicht mehr hÀngen bleiben.

:hand_with_index_finger_and_thumb_crossed:


Viel GlĂŒck,
ernolf

Excellet script. For me it works perfectly. I run it twise (on different linus bare metal machines). Thank’s a lot for your support and help us (many of us have to upgrade the PHP time to time). I will support you via Paypall. :slight_smile:

2 Likes

Vielen Dank fĂŒr den Hinweis - das hat geholfen! Habe gerade noch gelernt, dass NC PHP 8.4.1 noch nicht unterstĂŒtzt, aber bin jetzt auf 8.3.

Gute Besserung und schöne Feiertage!

1 Like