PHP 7 unter CentOS 7 installieren

Nachdem ich letzte Woche gezeigt habe, welche Probleme man sich einhandeln kann, wenn man von PHP 5.6 auf PHP 7 wechselt, möchte ich heute einmal zeigen, wie man überhaupt zu PHP 7 wechseln kann. Da ich inzwischen mit allen Servern zu CentOS migriere, wird es das erste Mal sein, dass es sich nicht um ein Debian-Beispiel handelt. Das Gute an CentOS ist, dass es eine recht stabile Distribution ist - jedes Major Release erhält 10 Jahre lang Support. Das Schlechte an CentOS ist, dass viele Pakete dadurch in einer recht alten Version vorliegen, die lediglich mit Bug- und Security-Fixes versorgt werden. Bei meinen Webserverinstallationen möchte ich hingegen lieber neue Versionen betreiben, um neue Features zu erhalten.

Bei der Installation einer neueren Version hat man mehrere Möglichkeiten: entweder, man kompiliert PHP 7 selbst oder man setzt ein Dritt-Repository ein, in dem bereits vorkompilierte Pakete für PHP 7 enthalten sind. In diesem Fall habe ich mich für zweiteres entschieden. Mit ius.io gibt es für CentOS 7 ein Repository, in dem die wichtigsten Pakete enthalten sind und das aufgrund der Unterstützung des Hosters Rackspace lange erhalten bleiben sollte.

Um das Repository von IUS verwenden zu können, muss man im ersten Schritt deren RPM-Paket installieren, das sich darum kümmert, das Repository im System einzukonfigurieren:

1
2
3
wget "https://centos7.iuscommunity.org/ius-release.rpm"
sudo rpm -i ./ius-release.rpm
rm ./ius-release.rpm

Zusätzlich muss noch der öffentliche Schlüssel importiert werden, mit dessen Hilfe die Signaturen der heruntergeladenen Pakete überprüft werden können:

1
sudo rpm --import /etc/pki/rpm-gpg/IUS-COMMUNITY-GPG-KEY

Wenn man es noch nicht getan hat, sollte man weiterhin das EPEL-Repository mit einbinden, das weitere hilfreiche - und meist aktuellere - Software enthält. Das lässt sich durch die Softwareverwaltung realisieren:

1
sudo yum install epel-release

In meinem Fall installiere ich neben PHP auch immer gleich MariaDB und NGINX. Das IUS-Repository enthält auch eine aktuellere Version von MariaDB. Damit man diese installieren kann, müssen jedoch vorher die bereits vorhandenen "mariadb-libs" entfernt werden. Im Zuge dessen wird auch Postfix deinstalliert - wir werden es einfach im Anschluss erneut installieren:

1
sudo yum remove mariadb-libs

Nun können wir die gewünschte Software über die Softwareverwaltung installieren - Pakete, die über IUS installierten werden, enthalten immer den Suffix "u", um sie leichter erkennen zu können und Kollisionen mit Standardpaketen zu vermeiden:

1
sudo yum install mariadb101u-server nginx php70u-cli php70u-fpm php70u-gd php70u-imap php70u-intl php70u-json php70u-ldap php70u-mbstring php70u-mcrypt php70u-mysqlnd php70u-pdo php70u-pear php70u-pgsql php70u-process php70u-pspell php70u-recode php70u-soap php70u-xml php70u-xmlrpc postfix

Im Grunde ist man an dieser Stelle nun fertig und hat sein CentOS 7 mit PHP 7 ausgestattet. In meinem Fall gab es jedoch noch ein paar Dinge mehr zu tun, da ich SSH-Support in meinem PHP benötige. Da es hierfür von IUS noch kein fertiges Paket gibt (wohl deshalb, weil der SSH-Support für PHP 7 noch nicht stable ist), musste ich mir die Erweiterung selbst zusammen kompilieren.

Um das zu tun, müssen wir erst einmal noch weitere, benötigte Pakete installieren:

1
sudo yum install autoconf automake make openssl-devel php70u-devel unzip wget zip

Als nächstes holen, kompilieren und installieren wir die aktuelle Version der "libssh2"-Bibliothek:

1
2
3
4
5
6
7
8
9
10
wget https://www.libssh2.org/download/libssh2-1.7.0.tar.gz
tar -xzvf ./libssh2-1.7.0.tar.gz
cd ./libssh2-1.7.0
./configure
make
sudo make install
make clean
cd ..
rm ./libssh2-1.7.0.tar.gz
rm -R ./libssh2-1.7.0

Auf Github hat sich jemand die Mühe gemacht, die Quellen für PHP 7 kompilierbar einzurichten - dessen Änderungen werden auch die Basis für das zukünftige SSH-Modul sein. An dieses Github-Repository habe ich mich gehangen und alles selbst kompiliert. Sobald das stabilisierte Pakete bei IUS aufgenommen wurde, sollte man natürlich lieber auf dieses wechseln:

1
2
3
4
5
6
7
8
9
10
11
12
wget https://github.com/Sean-Der/pecl-networking-ssh2/archive/master.zip
unzip ./master.zip
cd ./pecl-networking-ssh2-master
phpize
./configure
make
sudo make install
make clean
cd ..
rm ./master.zip
rm -R ./pecl-networking-ssh2-master
sudo sh -c "echo 'extension=ssh2.so' >/etc/php.d/20-ssh2.ini"

Und schon hat man PHP 7 auf seinem CentOS 7 installiert und ist weiterhin bleading-edge unterwegs. 🙂

Aktualisierte Grüße, Kenny

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.