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

@ernolf Du bist super :v:

Es hat update gemacht, danach konnte mit

sudo php-updater --switch-version

auf V8.3 gewechselt werden

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

und tatsÀchlich lÀuft die PHP 8.3 ohne reboot gleich in der nextcloud

Version: 8.3.13
Speicherlimit: 1 GB
Maximale AusfĂŒhrungszeit: 3600
Maximale GrĂ¶ĂŸe zum Hochladen: 16 GB
OPcache-RevalidierungshÀufigkeit: 2
Erweiterungen: Core, date, libxml, openssl, pcre, zlib, filter, hash, json, random, Reflection, SPL, session, standard, sodium, apache2handler, mysqlnd, PDO, xml, apcu, bcmath, bz2, calendar, ctype, curl, dom, mbstring, FFI, fileinfo, ftp, gd, gettext, gmp, iconv, igbinary, imagick, intl, exif, mysqli, pdo_mysql, Phar, posix, readline, shmop, SimpleXML, sockets, sysvmsg, sysvsem, sysvshm, tokenizer, xmlreader, xmlwriter, xsl, zip, redis, Zend OPcache

wow 
 Perfekt !
Vielen Dank und ein schönes Wochenende wĂŒnsche ich Dir

1 Like

Vielleicht habe ich auch etwas ĂŒbersehen.
Habe einfach mal installiert, da ich vorher Sicherung gemacht hatte :slightly_smiling_face:

Hallo,

ersteinmal vielen Dank fĂŒr das Skript!
Leider lĂ€uft die AusfĂŒhrung bei mir in folgende Fehlermeldung:

Die folgenden Pakete haben unerfĂŒllte AbhĂ€ngigkeiten:
 php8.2-cli : HĂ€ngt ab von: php8.2-common (= 8.2.25-1+0~20241104.64+debian12~1.gbpfc8dc9) soll aber nicht installiert werden
              HĂ€ngt ab von: php8.2-opcache soll aber nicht installiert werden
              HĂ€ngt ab von: php8.2-readline soll aber nicht installiert werden
              HĂ€ngt ab von: libc6 (>= 2.35) aber 2.31-13+deb11u11 soll installiert werden
              HĂ€ngt ab von: libssl3 (>= 3.0.0) ist aber nicht installierbar
 php8.2-fpm : HĂ€ngt ab von: php8.2-common (= 8.2.25-1+0~20241104.64+debian12~1.gbpfc8dc9) soll aber nicht installiert werden
              HĂ€ngt ab von: php8.2-opcache soll aber nicht installiert werden
              HĂ€ngt ab von: libc6 (>= 2.35) aber 2.31-13+deb11u11 soll installiert werden
              HĂ€ngt ab von: libssl3 (>= 3.0.0) ist aber nicht installierbar
E: Probleme können nicht korrigiert werden, Sie haben zurĂŒckgehaltene defekte Pakete.
   something went wrong

Was sollte ich hier tun?
Danke im Voraus!
Sebastian

Hi @D12turb3d,

Fehlermeldungen alleine reichen nicht aus. Du solltest auch ein Wenig Kontext dazu liefern. Also welche debian Version hast du am Start?


ernolf

Hi Ernolf,

danke fĂŒr Deine schnelle Antwort.
Ich habe ein Debian 11 und zur Zeit PHP8.1.12.


 genau das hatte ich vermutet
Du benutzt aber apt sources fĂŒr 12 (bookworm).

Da hast du dir schönen Mist eingebrockt. Du hast da bestimmt hÀndisch herum editiert.

Du solltest jetzt:

  • die falsche apt-sources Datei (warscheinlich /etc/apt/sources.list.d/php.list oder Ă€hnlich) komplett löschen

  • alle nur teilweise installierten php Pakete entfernen:

    sudo apt-get purge '*php8.2*'
    sudo dpkg --remove '*php8.2*'
    

    das gleiche fĂŒr alle weitere nur teilweise installierte Versionen (z.B. php8.3 etc) machen

  • aufrĂ€umen:

    sudo apt-get autoremove
    sudo apt-get clean
    sudo apt-get update
    
  • danach startest du das Skript ganz von vorne:

    sudo php-updater
    

    
 und lĂ€sst die apt sources fĂŒr das surry repo vom Skript installieren, das ist sicher und garantiert fehlerfrei.

Dann sollte es gehen.


Viel GlĂŒck,
ernolf

Du hast Recht, bevor ich auf Dein Skript gestossen bin, habe ich mit meinem Halbwissen versucht das Update auszufĂŒhren und dabei mit Sicherheit die php.list editiert.

Ich habe die oben genannten Schritte ausgefĂŒhrt.
Beim erneuten ausfĂŒhren deines Skripts kommt nun der Hinweis:

  This is a list of php versions offered by the actual apt sources
  Version  End of life                            Description
  ------------------------------------------------------------------------------
   - 7.4   2021-11-27 (2 years and 11 months ago)
  ------------------------------------------------------------------------------
  You can call this list with:     php-updater --list-candidates
  ------------------------------------------------------------------------------

Scheinbar wurde hier das surry repo nicht installiert vom Skript?

Es kann natĂŒrlich sein, dass es diese Datei nicht gibt oder die falsche apt-sources Zeilen in einer anderen Datei untergebracht sind, zum Beispiel
/etc/apt/sources.list

Wenn du es nicht findest, kannst du die Ausgabe von diesem Befehl auswerten:

grep -H ^ /etc/apt/sources.list /etc/apt/sources.list.d/*.list

ernolf

Du musst absolut sicher sein, dass das alte entfernt wurde.
Danach sollte das Skript dich fragen, ob du surry repo hinzu fĂŒgen möchtest. Das geschieht interaktiv, wenn absolut nichts da ist.


Viel GlĂŒck,
ernolf

Top, die sources.list hatte ich auch editiert.

Nun lief das Skript ohne Fehler durch. Server reboot, aber leider sagt meine Nextcloud immernoch, dass die derzeit verwendete Version 8.1.12 ist, obwohl ich im Skript die 8.2 aktiviert habe


OK, habe das in der nginx http.conf entsprechend angepasst.

LĂ€uft nun alles.
Vielen Dank fĂŒr deine MĂŒhe und noch einen schönen Abend!

Sebastian

EDIT: Bitte gib mir nochmal deine PayPal-Adresse, war an der Stelle zu schnell.

1 Like

Viele dank fĂŒr diesen Feedback.
Ich habe eine Kleinigkeit geÀndert.
Könntest du bitte:
die Module löschen (damit er die neuen lÀdt):

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


 und dann noch einmal

sudo php-updater --switch-version

ausfĂŒhren und wieder 8.2 auswĂ€hlen und bestĂ€tigen bis zum Ende.

Ich hoffe das es jetzt funktioniert.

:crossed_fingers:


ernolf

Hi @D12turb3d,

Ich hatte den entsprechenden Code zwar nochmal angepasst, damit es auch in deinem Usecase funktioniert, aber wenn du es selber hinbekommen hast, umso besser! Perfekt!

rufe einfach

php-updater --donate

auf!

Im Voraus herzlichen Dank fĂŒr die UnterstĂŒtzung! :heart:


ernolf

1 Like

I also had to:

Modify /etc/apache2/ [your website].conf
Replace $PHPVER with the version you updated to

<FilesMatch “.php$”>
SetHandler “proxy:unix:/run/php/php$PHPVER-fpm.nextcloud.sock|fcgi://localhost”

My redis.conf was missing, had to add the following to /etc/redis/redis.conf

unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770
requirepass [your secret from nextcloud config.php]
dir /var/lib/redis/

1 Like

Hi @dky1e,

thank you very much for your feedback.

This should normally have been done by

php-updater --switch-version

Did the script throw any error messages?


This:

has nothing to do with php. That is redis and is not part of the script.


Much and good luck,
ernolf

Hi ernolf, thanks for the prompt follow up!

Unfortunately I wasn’t paying much attention running the script, just did php-updater 8.1 8.3. I dont recall seeing any error messages.

Just wanted to throw my experience up there for anyone having issues after the switch and hopefully help them get through it.

For my own reference, is the user expected to run “php-updater --switch-version” or is it just part of the main script?

It can be both. It all depends on how the script runs overall.

As it runs, there are breakpoints where you are asked to press a button to continue or quit with “q”. If you abort at such a point early, you may not have performed the switching step described above.

The script has over 100 modules with a total of several thousand lines of code. I develop it further every day to cover more and more special cases, which are checked as reliably as possible by the script. Therefor every feedback is valuable, so is yours!
You should give your server some time with the script. Ideally, you will end up with a lean, well-functioning PHP that is optimally integrated into the web server used by your nextcloud.
Ther still are tasks that have to be done by the admin himself. For example, the script doesn’t uninstall entire PHP versions (yet). The admin should do that himself. But it is still an important part, because every installed PHP version can consume resources, even if it is not actively integrated and thus unused.


ernolf

Hi Ernolf,
I tried to use the php-updater script today, updating from php8.1 to php8.2 today. the installation and conversion of .ini files seem to work flawlessly. When switch the php version 8.1 to 8.2 with php-updater --switch-version, nextcloud says “access denied” (on php8.1 it works OK). I am using Nextcloud 26.0.13 and would like to step to 27.1.11 after the php update works ok. my os is debian bookworm and apache is 2.4.62. Using also ncp 1.55.3 for configuration.
Any hints where to look?

Hi @cmahr,

thank you for your feedback.

  • Where does that message appear?
  • What are the corresponding log entries?

ernolf

“access denied” was issued when I put the browser to my nextcloud.
Meanwhile I found the issue: /etc/php/8.1/fpm/php.ini had the value cgi.fix_pathinfo commented out, while the 8.2 version had it uncommented with the value 1. Altough I have no Idea what the parameter does, after commenting it out for 8.2, the server worked again.
Any Idea? Thank you! Christian