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

Hi:
I’m running Ubuntu 20.04 on bare metal with php 7.2 and 7.4 (active) and while running this script it seems to hang at the stage of “. searching known configuration errors in php7.2 .”. This is after listing all the modules for php7.4 installed by admin.
By hang I mean it’s been searching for over an hour
 What can I do to move this along?
Thanks

You should completely remove (purge) php7.2 if it is not active anyway:

sudo apt-get purge php7.2*

Then start the script again

hth.


Much and good luck,
ernolf

Thanks, purging 7.2 did allow the script to proceed.

Great Work!

1 Like

Hello

I just ran your script on NC 29 with php 8.1. It threw a couple of errors and I’m not sure how to proceed.

Cutting out the boring stuff, here’a replay:

$ sudo wget -qO /usr/local/bin/php-updater https://global-social.net/script/php-updater; sudo chmod +x /usr/local/bin/php-updater
[sudo] password for username: 
username@nextcloud:~$ php-updater
mkdir: cannot create directory ‘/usr/local/include/ernolf’: Permission denied
.. loading modules - dependency
  Dependency not met!

  missing dependencies:
  ==============================================================================
  Bynary          Package         Description
  ------------------------------------------------------------------------------
  apt-file        apt-file        Search for files within Debian packages
  jq              jq              Command-line JSON processor
  ccdiff          ccdiff          Colored Character Diff
  ------------------------------------------------------------------------------

Q: Do you want to install this packages now? ([y]es or [n]o) [yes]: y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libalgorithm-diff-perl libalgorithm-diff-xs-perl libapt-pkg-perl libexporter-tiny-perl libjq1
  liblist-moreutils-perl liblist-moreutils-xs-perl libregexp-assemble-perl
The following NEW packages will be installed:
  apt-file ccdiff jq libalgorithm-diff-perl libalgorithm-diff-xs-perl libapt-pkg-perl
  libexporter-tiny-perl libjq1 liblist-moreutils-perl liblist-moreutils-xs-perl
  libregexp-assemble-perl
0 upgraded, 11 newly installed, 0 to remove and 3 not upgraded.
...                                                                     
...
...
Running kernel seems to be up-to-date.

The processor microcode seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
.. loading modules - integrity
     First run, checking integrity:
     ===========================================================================
...
gpg: Good signature from "[ernolf] Raphael Gradenwitz (codesigning) <raphael.gradenwitz@googlemail.com>" [unknown]
     ---------------------------------------------------------------------------
     Integrity check passed. The script is authentic.
     ===========================================================================

 - Integrity check passed. Please start script again


$ php-updater
.. loading modules - php-updater/chfilesmv: cannot move '/usr/local/include/ernolf/prod/modules.json~new' to '/usr/local/include/ernolf/prod/modules.json': Permission denied
   Distribution check..   

  ==============================================================================
This is a list of recent ubuntu versions for your information.
...

Any help is appreaciated. Thank you in advance!

It has nothing to do with nextcloud. It is only php related.

Strange! Normaly the script should sudo from itself.

Try to run the script as root or with sudo. That should work.


ernolf

1 Like

$ sudo php-updater

(5 minutes later)


username@nextcloud:~$ php -v
PHP 8.3.10 (cli) (built: Aug  2 2024 15:31:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.10, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.10, Copyright (c), by Zend Technologies

Thank you!

1 Like

Hey, @ernolf. I wanted to say a big “thank you” for making this awesome script, it helped me a lot back in march, migrating to 8.3. I randomly tried to run the php-updater again today, but I found out that it just doesn’t execute anymore on my server after I upgraded to

Distributor ID: Ubuntu
Description:    Ubuntu 24.04.1 LTS
Release:        24.04
Codename:       noble

Furthermore, the https://global-social.net/script/php-updater doesn’t work for me in Germany. I had to use a VPN (USA endpoint) to get to it.

There can be many reasons for this. Repeating the installation steps should usually resolve the issue.

But that sounds more like you are using a poorly connected DNS server or your local DNS server is caching. That is also the explanation why the script no longer works, as it is dependent on the server. Without contact with the server, the script cannot work.

What ist the output of

dig global-social.net

is it the same as

dig @8.8.8.8 global-social.net

If not, then you should fix your dns.

BTW, That would be a great idea for a next script, a dns-setup-fixer :wink:


Much and good luck,
ernolf

1 Like

Hey there, thank you a lot that you have responded so quickly. I did sadly not get notified as fast as I should have been (probably need to check my notif settings). I ran the two digs and they do indeed return the same IP address. However, I do sometimes run into problems with my ISP’s DNS servers.
Which would explain why 4 days later I have no problem with getting to this https://global-social.net/apps/raw/s/php-updater.
Thank you a lot for your input, now I also know why the script sometimes just doesn’t work (My gut is telling me that it probably had something to do with the time of day as well).

The dns-setup-fixer idea sounds absolutely amazing btw, I really came to love your php script even more after having to fix the install a couple days ago XD.

1 Like

Hi, will you offer your site via IPv6 at some point? Currently, it is impossible to use your script from IPv6

Hi @Chris_JC,

thank you for your interest

This is very unlikely. I host the server from my home and for several reasons I do not have IPv6 enabled and do not plan to do so.

I can only offer you to install the script locally with a local web server.

To do this, you have to check it out from github and build it with a local web server as described in the instructions. The web server is included, you don’t have to set it up. It’s via localhost, so I assume you won’t have any restrictions there.

But you need slightly more skills ans have to take care of updates yourself.

h.t.h.


ernolf

Hi Raphael (@ernolf),

my attempt to upgrade my self-configured Nextcloud server from PHP 8.2 to 8.3 and cluelessly change some settings ended in a complete chaos with a 503 error and unhelpful entries in the error logs.
I had already prepared myself for endless research, but then found your script here.

What can I say? - The script is fantastic!!1!

The dialogues are easy to understand and with a few steps I was able to change a messed up upgrade into a correctly working version, all very user friendly. The only thing missing at the end was a systemctl restart php8.3-fpm.
Thank you very much for sharing this script!

Next time I shall try out your script before wasting hours.

3 Likes

If you use the script, don’t forget to donate. He has put a lot of hours into this.

2 Likes

Moin,

tolles Script, da steckt echt Arbeit drin. Bin ich gestern wegen meines 500er drauf gestossen.

Ist das normal, daß der sich durch die locales von phpmyadmin in 10 min Schritten durchfrĂ€st
also 10 min pro Sprache? ccdiff lĂ€uft auf 100%


Bei mir hatte es auch einen Bug, es wollte bei allen IP-Adressen mich in ein neues Subnetz schieben. Meine Rechner sind auf 192.168.10.x, Vorschlag war immer 192.168.30.x, habe die VorschlÀge erstmal abgelehnt.

Zweiteilige Frage: werden die vorgeschlagenen Scripte irgendwo gespeichert, daß man da von Hand durchdiffen kann? Und kann ich Dir irgendwelche Logs zur VerfĂŒgung stellen, wo Du das nachvollziehen kannst?

Nein. Das kann ich nicht nachvollziehen.

Logfiles liegen in

/tmp/ebtb-logfiles/*

Auf Ubuntu und Debian ĂŒberstehen die einen Neustart aber normalerweise nicht.
Du kannst mir per PN die Logfiles gerne schicken.


Viel GlĂŒck,
ernolf

@ernolf
Vielen Dank fĂŒr das tolle Script !
Linux ist zwar super, die Konfiguration und Dokumentation dafĂŒr aber schwierig.
Linux braucht Leute wie Dich, daher kommt auch gleich ein kleines PayPal Trinkgeld.
Kurz zu meinem System:
Ein MiniPC mit N6000 CPU, apache2 und mariaDB
NC update gestern von 29.0.8 auf 30.0.1
Dabei kam Aufforderung PHP von 8.1.2 auf 8.2 upzudaten.
Habe vorher Sicherung gemacht und einfach Dein Script probiert.

Der 1. Versuch mit

php-updater

ging nicht, aber mit

sudo php-updater

hat es dann geklappt.
Damit wurde nur die IntegritĂ€t geprĂŒft, ist das richtig ?

 - Integrity check passed. Please start script again

Habe dann einen zweiten Lauf gestartet mit

sudo php-updater

Hier war ich als Hobby Teilzeit Linuxer teilweise ĂŒberfordert und bin nur Deinen VorschlĂ€gen gefolgt.
Im letzten Schritt wurde auf 8.2 geswitcht mit dem Befehl

sudo php-updater --switch-version

Die GUI ist super, habe 8.2 gewÀhlt.
Ich glaube 8.3 war nicht in der Auswahl sondern nur 8.4?
Da 8.4 wohl noch nicht von NC unterstĂŒtzt wird habe ich 8.2 gewĂ€hlt.
Nach einem Reboot war die “PHP Fehlermeldung” in NC weg und PHP 8.2.25 wird angezeigt

Version: 8.2.25
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

Nochmals Danke !
Und bis zum nÀchsten PHP Update :wink:

2 Likes

Hi @JoergB2,

Vielen Dank fĂŒr die freundliche Worte und die UnterstĂŒtzung! :heart:

Ja absolut richtig. Alle Skripte und Module sind signiert und werden permanent auf IntegritĂ€t ĂŒberprĂŒft. Sobald ein Modul veraltet ist oder verĂ€ndert wurde, wird es sofort entfernt und ersetzt. Da das Skript selber fĂŒr das Laden der Module zustĂ€ndig ist, wird da besondere Sorgfalt auf die IntegritĂ€tsprĂŒfung gelegt und deswegen wird VOR dem Ersten Lauf des eigentlichen Skriptes der Hash und die Signatur geprĂŒft und das PrĂŒfergebnis angezeigt.

Sehr gut. Die vorgeschlagene Antworten sind immer die sichersten. Nur fĂŒr wer wirklich weiss was er genau tut, gibt es die Möglichkeit dennoch abweichend zu antworten.

8.3 war (ist) mit Sicherheit in der Auswahl. Du kannst das gerne gleich mal ausprobieren.

damit lÀsst sich jederzeit hin und her schalten.
Also wenn du irgendwann mal wegen einer App eine niedrigere oder höhere php Version benötigst die du vorher mit dem Skript schon installiert hast oder von frĂŒher â€œĂŒbrig” hast, auch sei es nur vorĂŒbergehend, dann geht das ganz einfach damit.

Super!
Ein Reboot wÀre nicht mal nötig gewesen. :wink:


Viel GlĂŒck,
ernolf

1 Like

Hi @ernolf
Danke fĂŒr Deine schnelle Antwort.
Habe es einfach probiert wie Du sagtest mit

sudo php-updater --switch-version

und bekomme tatsÀchlich die 8.3 nicht zur Auswahl.

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

Das schiebe ich aber eher auf meine Umgebung und nicht auf das tolle Script.
Habe noch Ubuntu 22.04.5 LTS und werde demnÀchst auf 24.04. LTS komplett neu aufsetzen.
Ahh moment, habe apt update & upgrade gemacht
Es wird eine Menge installiert
Und hier kommt auch schon eine Meldung in der ich unsicher bin.
Da es aber um die V8.1 geht sage ich einfach " aktuell lokal installierte Version beibehalten "


 ┌────────────────────── GeĂ€nderte Konfigurationsdatei ├─────────────────────┐
 │ php.ini: Eine neue Version (/usr/lib/php/8.1/php.ini-production.cli) der  │
 │ Konfigurationsdatei /etc/php/8.1/cli/php.ini ist verfĂŒgbar, aber die      │
 │ derzeit installierte Version wurde verĂ€ndert.                             │
 │                                                                           │
 │ Wie wollen Sie mit der geĂ€nderten Konfigurationsdatei php.ini verfahren?  │
 │                                                                           │
 │        Version des Paketbetreuers installieren                            │
 │        aktuell lokal installierte Version beibehalten                     │
 │        Unterschiede zwischen den Versionen anzeigen                       │
 │        Unterschiede zwischen den Versionen nebeneinander anzeigen         │
 │        die Angelegenheit in einer neu gestarteten Shell ...   

gleiche Meldung und Reaktion bei “php.ini-production”
Nach dem apt update+upgrade + reboot bleibt es dabei daß die PHP 8.3 nicht zur Auswahl angezeigt wird.

Ich wĂŒrde sagen Du musst hier keine weitere Energie rein stecken.
Das Script kann nicht jede Variation der user Konfigurationen abfangen.
Aktuell lÀuft ja die V8.2
Und zum Jahreswechsel werde ich evtl mit neuem Mini PC komplett neu installieren.

Ja. Dort bekommst du auch nur DIE php-Versionen angezeigt, die auf dem System ganz oder auch nur teilweise installiert sind.

Wenn du php8.3 dort zur Auswahl haben möchtest, dann muss es zunÀchst installiert werden.
Wenn du das genauso wie dein jetziges php8.2 konfiguriert haben möchtest, musst du also zunÀchst:

sudo php-updater 8.2 8.3

ausfĂŒhren und den ganzen Fragenkatalog wieder durchgehen.

Danach steht dir php8.3 voll zur VerfĂŒgung.

Danke fĂŒr dieses Feedback, das hilft mir die mit gelieferte ErlĂ€uterungen zu verbessern. :+1:


ernolf

1 Like