PHP 7.1: Version für Nextcloud 16 auf Ubuntu 16.04 aktualisiert

7 Kommentare Autor: Jürgen (jdo)

Nun habe ich mich doch für ein Upgrade meiner PHP-Version auf einem Ubuntu 16.04 entschlossen, da Nextcloud 16 mindestens PHP 7.1 voraussetzt. Allerdings ist es nicht meine produktive Nextcloud, die über das Internet erreichbar ist, sondern meine interne auf meinem kleinen Serverchen hier. Auf dem läuft auch immer noch Ubutu 16.04 Server LTS Xenial Xerus.

Wichtiger Hinweis: Der Prozess war echt zeitraubend und zermürbend. Überleg Dir gut, ob Du Dir das antun willst. Im Endeffekt hätte ein Backup und eine Neuinstallation von Ubuntu 18.04 LTS wohl auch nicht viel länger gedauert. Lehrreich war die Sache allemal. Leider kann ich Dir keine Schritt-für-Schritt-Anleitung geben, da ich immer wieder hin und her gesprungen bin. Allerdings sollte ich die wichtigsten Punkt abhandeln können, warum gewisse Dinge plötzlich nicht mehr funktionieren. Legen wir los? Was sich hier so einfach liest, hat mich den Großteil des Vormittags gekostet, weil es echte Ostereiersuche war.

Upgrade der PHP-Version

So, ich habe mich für PHP 7.1 entschieden. Der Grund? Erst habe ich auf PHP 7.2 aktualisiert und dabei ist mir die Nextcloud mit einem Internal Server Error 500 um die Ohren geflogen. Also vermutete ich (wahrscheinlich falsch), dass es am Paket php-mcrypt liegt, das es in dieser Form für PHP 7.2 nicht mehr gibt. Da Nextcloud 16 aber mindestens PHP 7.1 braucht und mich das wohl einige Zeit über die Runden bringt, habe ich mich dafür entschieden. Vielleicht versuche ich das Prozedere noch mit PHP 7.2 aber habe heute echt keinen Nerv mehr dafür.

Eine neue PHP-Version bekommt ich über das PPA von Ondřej Surý, vielen Dank dafür an dieser Stelle! (Du findest dort auch PHP 7.2 und 7.3)

Update: Mit PHP 7.2 funktioniert das auch, bis auf dass es das Pakete php7.2-mcrypt nicht mehr gibt, das aber nicht mehr benötigt wird? Ich bin mir gerade echt nicht ganz sicher, aber ich brauche es wohl nicht.

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt install php7.1

Gut an dieser Stelle ist, dass PP 7.1 parallel installiert wird. Doof ist, dass nicht alle für 7.0 installierten Module automatisch mit installiert werden. Also wollte ich erst einmal herausfinden, was denn so auf meinem Ubuntu 16.04 installiert ist, damit einen groben Überblick bekomme:

sudo dpkg --get-selections | grep -v deinstall | grep php

Das hat im Endeffekt dazu geführt:

sudo apt install php7.1 php7.1-cgi php7.1-cli php7.1-common php7.1-curl php7.1-gd php7.1-intl php7.1-json php7.1-mcrypt php7.1-mysql

Ich dachte, das reicht …

Also biegen wir Apache auf die neue PHP-Version um, oder?

a2dismod php7.0
a2enmod php7.1

Module does not exist …. hmpf:

sudo apt install libapache2-mod-php7.1
a2enmod php7.1
service apache2 restart

Das hat dann auch eigentlich geklappt, aber Nextcloud ist mir mit Anlauf um die Ohren geflogen.

Internal Server Error ...

Internal Server Error …

OK, was sagt denn die Log-Datei (bei mir /var/www/nextcloud/data/nextcloud.log).

Irgendwas Cache …

Natürlich, ich bin ja ein Trottel. Es gibt ja neue php.ini-Dateien und die wollen mit dem opcache-Zeugs gefüllt werden. Mal sehen, welche php.ini wir denn brauchen:

php --ini

Also schreiben wir dort rein, was auch hingehört:

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Wichtig: Für Apache ist in meinem Fall die Datei /etc/php/7.1/apache2/php.ini zuständig!

Mist, immer noch Internal Server Error. Also deaktivieren wir den Cache erst einmal in /var/www/nextcloud/config/config.php.

Redis wegen PHP 7.1 deaktiviert ...

Redis wegen PHP 7.1 deaktiviert …

Juhuu! Kein Server Error mit PHP 7.1 mehr, ABER …

… nun wirft die Seite keinen Internal Server Error mehr, aber dafür bleibt die Seite einfach weiß / blaank / nada / nichts. FFS #%$§#!

Gut, stellen wir das gesamte System auf PHP 7.1 um, habe ich bisher auch noch nicht gemacht:

sudo update-alternatives --set php /usr/bin/php7.1

Das bringt mich auch nicht weiter … hmmm … im Endeffekt hat die Installation von ein paar weiteren Paketen geholfen:

apt-get install php7.1-xml php7.1-zip php7.1-mbstring

Nun hat die Seite wieder funktioniert und auch das Caching mit APCu, aber kein Redis. Eigentlich würde das für eine 1-Mann-Installation reichen, aber es hat mich gewurmt. Außerdem kam beim Aufruf von PHP nun immer dieser Fehler

PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php/20160303/redis.so’ – /usr/lib/php/20160303/redis.so: undefined symbol: igbinary_serialize in Unknown on line 0

Der Hinweis ist mit igbinary da, aber muss man auch erst einmal draufkommen. Behoben wurde der Fehler mit:

sudo apt-get install php-igbinary

HURRAAAAA! ES FUNKTIONIERT WIEDER ALLES!

Was ich irgendwann auch ausgeführt habe …

… aber den Effekt nicht bestimmen kann.

Im Laufe meiner Anstrengungen und nach dem Installieren aller Pakete, wurde auch Redis gestoppt und gestartet:

sudo service redis stop
sudo service redis start

Ebenso habe ich den gesamten Cache von Redis in die Tonne gekloppt:

sudo redis-cli FLUSHALL

Wie gesagt kann ich nicht mit Sicherheit sagen, ob diese Aktionen etwas gebracht haben, geschadet haben sie auch nicht.

Nextcloud 16 Beta 3 mit PHP 7.1

Nach der ganzen Aktion wurde mir dann auch prompt Nextcloud 16 Beta 3 über den Beta-Kanal angeboten und ich konnte es installieren.

sudo -u www-data php updater/updater.phar
Nextcloud 16 Beta 3 - ich schau Dich vielleicht morgen an ...

Nextcloud 16 Beta 3 – ich schau Dich vielleicht morgen an …

So für heute habe ich fertig … nun mach ich etwas, das mehr Spaß macht – den kleinen Zeh gegen Beton schlagen oder so …

Deine Hausaufgabe ist: Das Ganze nun mit PHP 7.2 zu probieren und mir dann sagen, ob es funktioniert! 😀




 Alle Kommentare als Feed abonnieren

7 Kommentare zu “PHP 7.1: Version für Nextcloud 16 auf Ubuntu 16.04 aktualisiert”

  1. Orloff says:

    Das klingt nach einem interessanten Problem.

    Aus meiner eigenen Erfahrung kann ich hier zumindest zu einem Einsatz von PHP-FPM raten.
    Dies bringt den Vorteil, dass man Apache-Prozesse um den Resourcenverbrauch von PHP erleichtert, gleichzeitig aber die Möglichkeit bekommt, mehrere PHP-Versionen parallel zu installieren, zu konfigurieren, und zwischen diesen auch umschalten zu können.

    Ebenfalls kann man aber auch auf einem einzelnen System mehrere PHP-Versionen verwenden, in dem man die jeweilige PHP-Version in der entsprechenden Apache2-vHostkonfiguration referenziert.

    Vielleicht einmal drüber nachdenken, bei interesse gebe ich aber auch gerne Detailinformationen, wenn gewünscht.

    • jdo says:

      Hallo und danke ... das verstehe ich gerade nicht, ich kann doch auch ohne PHP-FPM mehrere parallel installieren und mit a2dismod und a2enmod umschalten? Ich benutze auf der produktiven Instanz wegen http2 sowieso php-fpm ...

      Update: stehe auf der Leitung ... mit php-fpm kann ich in den vHosts festlegen, welche Version ich verwenden will ... ja, das hätte aber mein Problem mit den fehlenden Paketen auch nicht gelöst 🙂

      Mein Problem ist/war ja, dass Nextcloud 16 nicht mehr mit PHP 7.0 will. Ich brauche nicht mehrere Versionen, sondern nur eine, die eben kompatibel ist.

      Trotzdem Danke für die Hinweise!

  2. Flo says:

    Tolle Artikel, herzlichen Dank! 🙂

    Hast du in deiner "/etc/php/7.2/fpm/php.ini" am Ende ein "extension=redis.so" vergessen?

    • jdo says:

      Ist bei mir nicht notwendig. Ein php --ri redis verrät mir, dass Redis einwandfrei funktioniert.

  3. Arno says:

    Tausend Dank! Hätte mich sicherlich sehr viele Nerven gekostet ohne deine Anleitung!

    Hat für mich auch für PHP 7.3 einwandfrei funktioniert.

  4. Cedigger says:

    Hallo JDO,

    auch von mir tausend Dank. Ich betreibe auch noch einen Ubuntu Server 16.04 und werde erst dieses Jahr auf 20.04 wechseln! Meine Owncloud Installation hat sich vor kurzem dazu entschieden, nur noch mit PHP7.1 laufen zu wollen.

    Dein Artikel/Anleitung hat mich schnell auf den richtigen Weg geführt. Ohne dich hätte es wohl ewig gedauert.

    Mach weiter so.

    cedigger

  5. Wurzer says:

    Vielen Dank für deine super Anleitung!
    Leider habe ich das von Ondrej beschriebene Problem mit der broken add-apt-repository,
    die Lösung ist der Download über folgende commands:

    sudo apt update
    sudo apt upgrade

    sudo apt install ca-certificates apt-transport-https
    wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
    echo "deb https://packages.sury.org/php/ stretch main" | sudo tee /etc/apt/sources.list.d/php.list

    sudo apt update
    sudo apt install php7.3

    sudo apt install php7.3-cli php7.3-common php7.3-curl php7.3-mbstring php7.3-mysql php7.3-xml

    dann noch mit deinen Links ergänzt und das ganze läuft auf Owncloud 10.4 mit php7.3 ohne Probleme

    DANKE