LD_LIBRARY_PATH ist nach sudo immer leer

9

Ich erhalte Fehler in der gemeinsam genutzten Bibliothek, wenn ich Software manuell zu installieren scheine. Bei der Ausführung wird echo $LD_LIBRARY_PATHes als .. nichts angezeigt . Ich habe versucht /usr/local/lib, eine .confDatei hinzuzufügen , /etc/ld.so.conf.daber es scheint, als würde sie niemals ausgeführt.

Dies funktioniert auch nicht (Anführungszeichen oder auf andere Weise):

LD_LIBRARY_PATH="/usr/local/lib"
export LD_LIBRARY_PATH
sudo ldconfig -v

Der Wert wird vorübergehend festgelegt, behält ihn jedoch nicht bei, wenn ich ein Terminalfenster verlasse. Ein Neustart bewirkt auch nichts.

Dissidentenwut
quelle
Versuchen Sie es zu~/.bashrc
Kevdog777
Es ist kein Duplikat; Die Frage ist irrelevant und die Antwort funktioniert nicht.
Dissident Rage
1
Es ist eine schlechte Idee, Software von der Quelle auf einem Binärsystem zu installieren !!! Verwenden Sie Ihren Paket-Manager, es sei denn
eyoung100
1
Ja, lassen Sie mich defekte Software von vor einem Jahr verwenden, anstatt sie zu aktualisieren, um zu testen, ob sich etwas zum Besseren geändert hat.
Dissident Rage

Antworten:

7

Fügen Sie Folgendes hinzu .bashrc:

vim ~/.bashrc

...
export LD_LIBRARY_PATH=/usr/local/lib

Auf diese Weise können Sie Ihren Computer neu starten und diesen Pfad weiterhin zuweisen.

Kevdog777
quelle
2
Das ist gut für einen Benutzer. Was ist mit für alle Benutzer?
Dissident Rage
2
@DissidentRage: Fügen Sie das gleiche zu /etc/bash.bashrc
JdeHaan
Ich werde dies als Antwort markieren, da dies für den angegebenen Bereich funktioniert. Was kann ich gegen die Dateien tun, die eindeutig nicht ausgeführt werden /etc/ld.so.conf.d?
Dissident Rage
1

Unter Red Hat Enterprise Linux (RHEL) 6 /etc/ld.so.confenthält include ld.so.conf.d/*.conf. Ohne diese Zeile /etc/ld.so.conf.d/*.confwürden Elemente in niemals analysiert.

Um zu sehen, welche Bibliotheken / Verzeichnisse ldconfiganalysiert werden

ldconfig -v 

Drucken Sie die aktuelle Versionsnummer, den Namen jedes gescannten Verzeichnisses und alle erstellten Links.

pyther
quelle
Ja, ich habe /etc/ld.so.conffrüher nachgesehen, als ich neugierig war, was es enthielt. Es hatte die includeLinie.
Dissident Rage
Durch das Ausführen erhalten Sie ldconfig -vmöglicherweise eine Vorstellung davon, warum die Bibliothek nicht enthalten ist. Sie können ausführen ldconfig -p, um die Bibliotheken und Verzeichnisse zu drucken, die sich in der aktuellen Cache-Datei befinden.
Pyther
0

Ich habe dies schließlich mit einem Alias ​​gelöst:

alias sudo='sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'

Stellen Sie sicher, dass Sie einfache Anführungszeichen verwenden, damit die Variablen zum Zeitpunkt des Aufrufs und nicht zum Zeitpunkt der Definition des Alias ​​erweitert werden.

Diese:

  • behält HOME bei (das sonst auf / root gesetzt wird)
  • bewahrt PATH (der sonst in Suitern auf einen "sicheren" Pfad gesetzt wird)
  • behält den aktuellen Wert von LD_LIBRARY_PATH bei (der sonst ausgeblendet wird)

(Sie können sehen , welche Dinge auf mit: sudo bash -c "echo $HOME")

Ich arbeite mit benutzerdefinierten Treibern und muss immer meine Testprogramme sudo, um auf den Treiber zuzugreifen. Ich möchte keine Testversionen von Bibliotheken im Systembereich installieren, daher verwende ich LD_LIBRARY_PATH, um bei Bedarf ein bestimmtes Testverzeichnis einzurichten. Ich kann nicht einfach einen festen LD_LIBRARY_PATH festlegen, ich muss ihn ändern und die aktuelle Einstellung beibehalten können. Durch das Beibehalten von PATH und HOME habe ich Zugriff auf meine Arbeitsumgebung - Skripte und Verzeichnisstruktur.

Dieser Alias ​​vermeidet, pauschale Berechtigungen in Sudoern erteilen zu müssen ... und es gibt anscheinend keine Problemumgehung für LD_LIBRARY_PATH, unabhängig von den Sudoer-Einstellungen. Es funktioniert nicht sudo in Skripten, aber diese können nach Bedarf fest codiert werden.

maharvey67
quelle