Der beste Weg, um RHSCL PHP weltweit verfügbar zu machen

10

Ich habe RHSCL 2 mit der folgenden URL installiert:

https://access.redhat.com/documentation/en-US/Red_Hat_Software_Collections/2/html/2.0_Release_Notes/chap-Installation.html

Verwenden des RedHat-Abonnement-Managers.

Ich rannte dann yum remove php*gefolgt vonyum install rh-php56

Alles verlief reibungslos, außer dass PHP nirgendwo zu finden ist. Ich lief dann find / -name phpund fand rh-php56in den folgenden Verzeichnissen:

/var/opt/rh/rh-php56/lib/php
/opt/rh/rh-php56/register.content/var/opt/rh/rh-php56/lib/php
/opt/rh/rh-php56/root/usr/bin/php
/opt/rh/rh-php56/root/usr/lib64/php
/opt/rh/rh-php56/root/usr/share/php

Was ist der beste Weg, um diese Binärdateien in /usr/binein anderes Verzeichnis zu bringen, das normalerweise global für alle Benutzer verfügbar ist?

Habe ich bei der Installation der Pakete einen Schritt verpasst, weshalb sie nicht global verfügbar sind? Oder passiert genau das, wenn RHSCLs verwendet werden?

Ich habe die Binärdateien in diesen Ordnern getestet und sie funktionieren beim Ausführen, php -vsodass sie einwandfrei funktionieren.

Mein erster Gedanke ist, nur cpin /binoder /usr/binaber vielleicht gibt es einen offiziellen Weg, um das zu tun, was ich verlange?

bearbeiten

Kann nicht kommentieren, keine Wiederholung ... aus Kapitel 3 des Links, den ich gepostet habe, heißt es, dass Software-Erfassungspakete wie folgt ausgeführt werden müssen:

scl enable rh-php56 'php -v'

Was funktioniert ... aber wie kann ich es für alle Benutzer wie $ php -vohne zusätzliche Befehle ausführen. Ich brauche die PHP-Binärdateien weltweit verfügbar, damit Webserver sie und SSH-Benutzer mit normalen Shells verwenden können.

Ozzy
quelle
Sie haben vergessen, Kapitel 3 des von Ihnen angegebenen Links zu lesen ...
Sven
1
Sven ... ich habe es selbst gelesen ... und alles, was es hat, ist eine Sub-Shell mit der zur Verfügung gestellten Sammlung zu starten. Es wird NICHT detailliert beschrieben, wie eine Sammlung standardmäßig verfügbar gemacht wird, ohne dass der Benutzer eine Sub-Shell ausführen muss. Ich werde im Folgenden eine geeignete Lösung detaillieren.
Anthony
Sven, das würde bedeuten, dass jeder Benutzer und jeder Daemon ausgeführt werden müsste scl enable rh-php56 command, was kompliziert ist. Die globale Aktivierung über die Antwort von @ antofthy ist viel eleganter.
Stefan Lasiewski

Antworten:

16

Die Möglichkeit, eine Software-Sammlung in Ihre aktuelle Shell zu importieren (keine Sub-Shell zu starten), besteht darin, die Datei "enable" als Quelle zu verwenden.

Zum Beispiel für rh-php56 auf einem Redhat 7-Computer ...

source / opt / rh / rh-php56 / enable

Sie können jetzt "php" ausführen oder die Manpages "man php" wie gewohnt lesen.

Dadurch werden der aktuellen Shells-Umgebung die entsprechenden Umgebungsvariablen hinzugefügt. Einzelne Benutzer können dies in ihren .bashrc-Dateien tun, sodass sie über SSH (nicht interaktive Shells) verfügbar sind.

Sie können die Aktivierungsdatei auch mit dem Suffix ".sh" in /etc/profile.d/ kopieren (oder mit einem Symlink verknüpfen), um sie automatisch für ALLE Benutzer zu aktivieren.

Beispielsweise

ln -s / opt / rh / rh-php56 / enable /etc/profile.d/rh-php56.sh

Seien Sie vorsichtig, wenn mehr als die Umgebung benötigt wird (z. B. Dämonen?). Oder wenn mehrere Versionen dieser Software auf einem System vorhanden sind (aus Gründen der Abwärtskompatibilität mit anderer Software / Diensten), da möglicherweise eine Interaktion zwischen den Versionen besteht. Außerdem möchten Benutzer möglicherweise nicht die 'neueste' Version oder sind verwirrt darüber, warum das 'Basissystem' (EG: / etc configs) die Software-Erfassungsversion nicht beeinflusst.

Anthony Thyssen (Ein sehr alter Systemadministrator)

Anthony
quelle
Welche Instanz von php.ini ruft diese Methode auf?
Darvanen
1
Die gelesene Datei php.ini ist fest im PHP-Programm codiert. Im obigen Beispiel ist es "/etc/opt/rh/rh-php56/php.ini". Sie können dies mit dem PHP-Skript <? Php phpinfo ()?> Entweder von einer ".php" -Webseite oder mit dem CLI-PHP-Befehl überprüfen.
Anthony
Ahhh ... Ich habe httpd anstelle des PHP-Fpm-Dienstes neu gestartet. Hier posten, falls jemand anders so hängen bleibt.
Darvanen
Reicht dies tatsächlich aus, um ein SCL-Paket zu aktivieren? access.redhat.com/solutions/527703 scheint ein Bash-Skript zu erstellen, das so etwas wiesource scl_source enable python33
Stefan Lasiewski
Sollte ausreichen. Grundsätzlich wird die Umgebung so eingestellt, dass die spezifische Version gegenüber der Systemversion verwendet wird. Aber nur innerhalb der Sub-Shell gestartet.
Anthony