Vorwort | Ondrej Sury | Paketquelle einbinden | PHP 8.3 installieren | Versionswechsel | FPM aktivieren | php.ini | alte Version entfernen
Vorwort
Raspberry Pi OS Bookworm (Grundlage ist Debian 12) wird mit PHP-Version 8.2 ausgeliefert. PHP 8.2 ist somit die aktuellste Version, die man unter Bookworm installieren kann. Da wird auch nicht mehr kommen, weil PHP 8.2 die aktuellste Version war, welche zum Zeitpunkt der Entwicklung und Freigabe von Rasperry Pi OS Bookworm / Debian 12 zur Verfügung stand.
Die Entwickler von PHP haben mittlerweile bereits PHP 8.3 veröffentlicht .
PHP 8.3 ist für manche Web-Anwendungen noch „zu neu“, sodass diese Version hier und da noch Probleme machen kann. – Bis hin, dass eingesetzte Anwendungen einfach nicht mehr funktionieren.
PHP 8.2 hingegen, welches im Dezember 2022 freigegeben wurde, bis Dezember 2024 Aktualisierungen erhält und bis Dezember 2025 sicherheitsrelevante Updates bekommt, wird von den aktuellen Versionen gängiger Web-Anwendungen gern gesehen.
Natürlich ziele ich bei der Aussage „gängige Web-Anwendungen“ auf fertige Pakete ab. Nextcloud, WordPress, osTicket etc. Eigene Projekte lassen sich selbstverständlich auch unter der neusten Version von PHP problemlos umsetzen.
Die Frage ist jedoch, „Wie komme ich unter Raspberry Pi OS Bookworm zu einer neueren PHP-Version?“.
Ondrej Sury macht es möglich
„Basically I am saying that you can’t get any closer than that.“ – Ondrej Sury
Ondrej Sury ist mit dafür verantwortlich, dass es die jeweiligen PHP-Versionen in die veröffentlichten Pakete der aktuellen Versionen von Debian und damit auch in Raspberry Pi OS schaffen.
Er stellt eine eigene Paketquelle zur Verfügung, worüber unter Raspberry Pi OS Bookworm / Debian 12 auch aktuellere PHP-Versionen statt PHP 8.2 installiert werden können.
Los geht’s…
Anzeige
Paketquelle einbinden
Um die Paketquelle von Ondrej Sury einzubinden gibst du in der Kommandozeile die beiden folgenden Befehle ein und bestätigst sie jeweils per ENTER.
sudo wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
Raspberry Pi OS kennt nun die Paketquelle von Ondrej Sury und fragt dort künftig die Aktualisierungen für die PHP-Versionen ab.
System aktualisieren
Nun wird dein Raspberry Pi OS aktualisiert.
sudo apt update && sudo apt upgrade
Durch die Ausführung der beiden Befehle über die Kommandozeile wird in allen Paketquellen nach Aktualisierungen für dein Raspberry Pi OS geschaut. Nun kommt auch die Paketquelle von Ondrej Sury hinzu, welche die aktuellste PHP-Version installiert. Somit PHP 8.3.
PHP 8.3 installieren
Nachdem die PHP-Paketquelle von Ondrej Sury eingebunden und das System aktualisiert ist, gilt es nun PHP 8.3 zu installieren.
Gib dafür in die Kommandozeile folgendes ein und bestätige die ggf. aufkommenden Abfragen.
sudo apt install php8.3 php8.3-apcu php8.3-bcmath php8.3-bz2 php8.3-cli php8.3-common php8.3-curl php8.3-dev php8.3-fpm php8.3-gd php8.3-gmp php8.3-gnupg php8.3-imagick php8.3-imap php8.3-intl php8.3-ldap php8.3-mbstring php8.3-memcached php8.3-msgpack php8.3-mysql php8.3-opcache php8.3-phpdbg php8.3-readline php8.3-redis php8.3-soap php8.3-xml php8.3-xmlrpc php8.3-xsl php8.3-zip
Das Grundgerüst für PHP 8.3 ist hiermit installiert.
Damit aber auch die für die meisten Anwendungen benötigten PHP-PlugIns für PHP 8.3 zur Verfügung stehen, führst du noch folgenden Befehl aus.
sudo apt install libapache2-mod-fcgid libapache2-mod-php8.3 php-apcu php-bcmath php-bz2 php-common php-composer-ca-bundle php-composer-semver php-composer-spdx-licenses php-composer-xdebug-handler php-curl php-dev php-gd php-gmp php-gnupg php-google-recaptcha php-imagick php-intl php-json-schema php-mariadb-mysql-kbs php-mbstring php-mysql php-pear php-phpseclib php-psr-cache php-psr-container php-psr-log php-react-promise php-redis php-symfony-cache php-symfony-cache-contracts php-symfony-config php-symfony-console php-symfony-dependency-injection php-symfony-expression-language php-symfony-filesystem php-symfony-finder php-symfony-polyfill-php83 php-symfony-process php-symfony-service-contracts php-symfony-var-exporter php-symfony-yaml php-tcpdf php-twig php-twig-i18n-extension php-xml php-zip
Es kann ignoriert werden, sollten Hinweise erscheinen, dass von bestimmten Paketen ggf. schon die aktuellste Version installiert sei… um so besser. Hauptsache die anderen PlugIns werden installiert und für PHP 8.3 aktualisiert.
Anzeige
Zwischen installierten PHP-Versionen wechseln
Mit folgendem Befehl kann man zwischen den auf dem System installierten PHP-Versionen wechseln.
sudo update-alternatives --config php
Die Ausgabe wird danach ungefähr so aussehen:
Bei dir wird die Auswahl auf 0, dem automatischen Modus und somit auf PHP 8.3 stehen.
Wenn nicht, oder du eine andere auf deinem System installierte PHP-Version aktivieren möchtest, wähle die entsprechende Ziffer aus der Spalte „Auswahl“ aus, gib sie ein und bestätige per Enter.
PHP-FPM aktivieren
FPM (FastCGI Process Manager) für PHP hilft dabei PHP-Prozesse, vor allem unter hoher Last, schneller auszuführen.
Der FPM für PHP 8.3 wurde durch o.g. Befehle bereits installiert und muss nur noch aktiviert werden. Dies geschieht mit folgenden Befehl:
sudo a2enmod proxy_fcgi setenvif && sudo a2enconf php8.3-fpm
Wechselst du von PHP 8.3 auf eine vorherige Version zurück und hattest den FPM von PHP 8.3 bereits aktiviert, musst du diesen auch wieder deaktivieren, bevor du den FPM deiner dann aktiven Version aktivierst.
sudo a2disconf php8.3-fpm
sudo a2enmod proxy_fcgi setenvif && sudo a2enconf php8.x-fpm
FPM ist ein eigener Dienst und sollte bei Änderungen an der PHP-Konfiguration neben dem Dienst für Apache durch dich immer mit neu gestartet werden. Dies ist über folgenden Befehl möglich:
sudo service php8.3-fpm restart
Anzeige
Die php.ini(s)
Mit jeder neuen PHP-Version sollten möglichst auch die Einstellungen der vorherigen PHP-Version übernommen werden.
Es gibt 3 php.ini Dateien:
- /etc/php/8.x/apache2/php.ini ==> regulär, ohne FPM
- /etc/php/8.x/cli/php.ini ==> für die Verwendung von PHP über die Kommandozeile, wie es beim ShellMailer der Fall ist
- /etc/php/8.x/fpm/php.ini ==> für die Verwendung von PHP per FPM
Es ist zu empfehlen das jeweils alle Varianten der php.ini mit den gleichen Anpassungen versehen werden.
Diese Anpassungen sollten vorgenommen werden
Folgende Variablen gibt es bereits in den einzelnen php.ini-Dateien und sollten entsprechend angepasst werden, wobei die einzelnen Werte nach eigenen Ermessen und nach dem Bedarf der genutzten Anwendungen vergeben werden.
... short_open_tag = On ... memory_limit = 512M ... post_max_size = 250M ... upload_max_filesize = 250M ...
Zusätzlich sollten an das Ende der benannten php.ini-Dateien noch folgende Zeilen eingefügt werden, da diese von einigen gängigen Web-Anwendungen benötigt werden.
apc.enable_cli=1 opcache.enable=1 opcache.enable_cli=1 opcache.interned_strings_buffer=20 opcache.max_accelerated_files=10000 opcache.memory_consumption=256 opcache.save_comments=1 opcache.revalidate_freq=1
Damit ist die Installation und Einrichtung der gewünschten PHP-Version abgeschlossen und es müssen lediglich Apache und der FPM neu gestartet werden.
sudo service apache2 restart && sudo service php8.3-fpm restart
Alte PHP-Version entfernen
Um eine alte PHP-Version zu entfernen wird folgender Befehl ausgeführt, wobei die Versionsnummer entsprechend angepasst werden muss. Im Beispiel wird alles zu PHP 7 entfernt, was auf dem System gefunden wird, auch alle Unterversionen. (Bsp. PHP 7.1, PHP 7.2, etc.) und zu diesen zusätzlich installierte PlugIns.
sudo apt purge php7.*
Anzeige
Die Quelle https://packages.sury.org/php/ ist veraltet, gibt nicht mehr.
Hey Frank, danke für dein Kommentar. 🙂 Was genau meinst du damit, dass es die Quelle nicht mehr gibt? Grundsätzlich wird sie ja noch bedient.
Edit:
Ich habe es noch mal getestet und bei 8.1 ein Update auf 8.1.26 erhalten. Scheint also erst mal alles noch zu funktionieren.
Auch für Version 8.2 kamen heute noch Updates.
Mittlerweile wird über die Paketquelle von Sury auch PHP 8.3 verteilt. Entsprechend habe ich die Anleitung ein wenig angepasst.
Vielen Dank! Top Anleitung. Hat auch gleich alles funktioniert!
Freut mich zu lesen!