Ich bin mir der allgemeinen Grundlagen der Verwendung von ldconfig
und LD_LIBRARY_PATH
bewusst, aber ich hoffe auf ein wenig Guru Hilfe bei meiner Situation.Korrekte Verwendung von LD_LIBRARY_PATH oder ldconfig für ein Softwarepaket
Ich habe ein tragbares Softwarepaket, das sich in einem eigenen Verzeichnis befindet und eigene Versionen vieler Bibliotheken hat.
Es gibt viele Binärdateien und Skripte, die von diesem Verzeichnis ausgeführt werden.
Einige der Binärdateien (Apache, PHP, Postgres) können auch separate Versionen auf dem System installiert haben.
Da es zwei Versionen von PHP gibt, ist es nicht ausreichend, /etc/ld.so.conf.d/myapp.conf
zu erstellen, wenn das System nicht bestimmen kann, für welche Version von "myapp" die Datei ldconfig verwendet werden soll.
Ich bin auf der Suche nach Best Practices bei der Konfiguration eines solchen Systems. Die Person, die das Softwarepaket ursprünglich eingerichtet hat, exportierte LD_LIBRARY_PATH
, damit ALLE Anwendungen auf dem System es verwendeten.
Ich versuche, nur die Anwendungen im Paketverzeichnis zu isolieren.
Einige Parameter, mit arbeiten:
/mypack
- alles für das Softwarepaket enthält
/mypack/local/lib
- enthalten erforderliche Bibliotheken, die nicht mit dem System
Bibliothek Beispiel kompatibel sein können:
/mypack/local/lib/libz.so.1 => /mypack/local/lib/libz.so.1.2.3
/lib/libz.so.1 => /lib/libz.so.1.2.3
obwohl die Versionen die gleichen sind, kann die in/mypack nicht mit der Distribution kompatibel sein und das System brechen, wenn es
binäres Beispiel verwendet wird: php sowohl/mypack und im Standardverzeichnis php von/mypack sollte Libs verwenden von/mypack/local/lib und die existiert Version sollte verwenden/lib
Einige Fragen über Linux-Bibliothekspfade: - Ist es möglich, /etc/ld.so.conf.d/php.conf so zu spezifizieren, dass es nur die Version von PHP in/mypack betrifft ? - Kann der Bibliothekspfad basierend auf dem Speicherort einer ausführbaren Datei angegeben werden? Das heißt, kann der Pfad einer ausführbaren Datei zur Laufzeit unter/mypack automatisch Bibliotheken von dort verwenden? - Wie wäre es auf einer Pro-Benutzer-Basis? Einige/das meiste System wird auf verschiedenen Benutzerkonten ausgeführt. Wenn ich in der Lage wäre, einen anderen Bibliothekspfad pro Benutzer festzulegen, würde das den Fehler beheben.
Ich denke, die typische Vorgehensweise ist ein Wrapper-Skript verwenden. Das Wrapper-Skript legt den Wert von LD_LIBRARY_PATH fest und führt dann die ausführbare Datei aus. Schauen Sie sich zum Beispiel google-chrome an. –
Wenn das die einzige Möglichkeit ist, auf die irgendjemand kommt, werde ich damit gehen. Ich habe bereits Chrome 28 in CentOS ausgeführt, aber aufgrund der Anzahl der verschiedenen ausführbaren Dateien versuchte ich es zu vermeiden. – thatthatisis