Der Support für PHP 7 läuft nun Stück für Stück aus und die Nachfolgerversion 8 ist bereits eine Weile auf dem Markt.
Die Nextcloud unterstützt auch schon länger PHP 8 und allgemein, soll durch 8 auch noch ein bisschen mehr Leistung rausgeholt werden. Also warum nicht langsam mal updaten?
Bitte seid aber beim Updaten vorsichtig. Ich würde strengstens, gerade den nicht so fitten Benutzern, raten ein vollständiges Backup des kompletten Betriebssystems zu machen (Beim Raspberry einfach eine Kopie der Karte z. B. mit dem Win32Diskimager erstellen). Durch die „nicht standard“ Paketquellen die wir zwangsweise einbinden müssen, wird es zukünftig ein bisschen komplizierter, da nun mehrere PHP Versionen zur Verfügung stehen.
Wichtig für dieses Tutorial ist, dass ihr wisst welche PHP Version ihr aktuell nutzt und welche die aktuelle ist, die gerade angezogen wird. Die Alte kann man über die Nextcloud selber über Einstellungen/System rausfinden und die aktuelle sieht man bei der Installation (oder über php -version). Schließlich wird nicht ewig PHP 8.0 die aktuelle Version sein. 😅
Somit wäre unser erster Schritt unser Gerät auf den neusten Stand zu bringen, bevor wir das eigendlich Update angehen. Daher zu Beginn erst einmal dauerhafte Adminrechte verschaffen und das System aktualisieren.
sudo -s apt update apt upgrade
Wenn nun alles aktuell ist, machen wir unserem Linuxsystem nun die neuen PHP Paketquellen bekannt. Dieser Vorgang besteht aus drei Schritten. (Codebeispiel anhand eines Debian Systems)
- Schlüssel/Zertifikat der neuen Paketquelle herunterladen und bei den vertrauenswürdigen Herausgebern hinzufügen.
- Die neue Paketquelle unserem Paketmanager (apt) über eine neue Konfigurationsdatei bekannt machen.
Das machen wir über einen Befehl, der uns automatisch die notwendigen Infos für die Konfigurationsdatei sammelt und diese dann auch gleich erstellt. - Unseren Paketmanager alle (auch die neuen) Paketquellen durchsuchen lassen.
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list apt update
Und nun sollte unser Linux alle notwendigen Pakete kennen, die zum Update benötigt werden. Früher habe ich hier an dieser Stelle nun nur noch apt upgrade
durchgeführt. Es hat sich allerdings als nicht sehr vorteilhaft erwiesen, PHP ohne explizieter Versionsnummer zu installieren. Daher sollte man den mühsamen Weg gehen und jedes benötigte Modul ausfindig machen und per Hand mit der richtigen Versionsnummer installieren. Hierzu kann man sich diese per apt ausgeben lassen und direkt auf 8.0 umbauen, damit man nur noch kopieren muss 😅
Vorsicht: nicht jedes Paket was unter 7.3 vorhanden war, gibt es auch unter 8.0 und wird ggf. gar nicht mehr benötigt.
#Alle installierten PHP7.3 Module anzeigen lassen apt list --installed | grep php7.3 #Oder für die Faulen kann man auch alle PHP Module die unter 7.3 installiert sind anzeigen lassen und den Text fürs leichte Kopieren gleich auf 8.0 umschreiben lassen: apt list --installed | grep php7.3 | sed 's/\/.*$//' | sed 's/7.3/8.0/g' #Danach die Installation von den jeweiligen php Modulen apt install php8.0 apt install php8.0-intl apt install ... ... ...
PHP8 sollte nun zwar installiert sein, aber ist noch nicht aktiv. Hierzu fehlen noch ein paar Schritte.
Wir sollten als erstes prüfen ob php8.0 nun von der Komadozeile angezogen wird und wenn nicht dies ändern.
php -version #Sollte hier nicht 8.0 stehen, so muss das mit dem nachfolgenden Befehl geändert werden indem man diesen abschickt und die Zeilennummer eingibt in der php8.0 steht update-alternatives --config php
Nun deaktivieren wir das Apache PHP7 Modul (Bei mir 7.3) und aktivieren das neue PHP8 Modul (Bei mir 8.0).
a2dismod php7.3 a2enmod php8.0
Da wir uns nun auf einer neuen PHP Version befinden, müssen wir diese noch für unsere Cloud konfigurieren. Unter anderem deswegen, dass unser Nextcloud mit einem Memcache konfiguriert wurde, der sonst nicht mehr funktioniert.
Daher bearbeiten wir die Datei /etc/php/8.0/apache2/php.ini und suchen nach den unteren Einträgen und bearbeiten die Werte wie beschrieben (Ein ; am Anfang einer Zeile sorgt dafür, dass diese Ignoriert wird. Daher muss dies entfernt werden um die genannten Einstellungen auch zu setzen).
memory_limit = 512M opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=1 opcache.save_comments=1
Vielleicht fällt es auf, aber es handelt sich hierbei 1 zu 1 um die Gleichen Einstellungen die wir bereits damals für PHP 7 gesetzt hatten.
Wenn wir schon beim Bearbeiten sind fügen wir gleich noch in der Datei /etc/php/8.0/cli/php.ini folgende Zeile ein.
apc.enable_cli = 1
Nun können wir all unsere Änderungen aktiv schalten und gucken ob unsere Cloud wieder funktioniert.
systemctl restart apache2
Ab jetzt sollte der Login wieder klappen. (Wenn nicht dann weiter zum nächsten Punkt) Geprüft wird natürlich wie gehabt über Einstellungen/Allgemein. Sollte der Sicherheitscheck keine Fehler spucken wäre das Update nun erfolgreich abgeschlossen (Zur Sicherheit mal noch unter Einstellungen/System gucken ob auch wirklich eine 8er PHP Version angezeigt wird 😅).
Bei mir gab es beim Update allerdings das Problem, dass zwei PHP Module nicht installiert wurden. Imagick und leider der Memcache woduch die ganze Cloud gar nicht erst lauffähig war.
apt install php8.0-imagick apt install php8.0-apcu systemctl restart apache2
Sollten noch weitere Module fehlen, so können diese über den gleichen Weg nachinstalliert werden.
Pingback: PHP-Versionsupdate auf einem RPI für eine Nextcloud - Stefan's Weblog