Kann Sudos nervige Nachricht aus Mountain Lion 10.8.0 entfernt werden?

11

Nach dem Upgrade auf 10.8.0 erhalte sudoich immer die folgende Meldung:

dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid

Ich habe alles überprüft .bash_profile, .zshrcwas mir einfiel, und ich sehe nichts in Bezug auf die DYLD_Umwelt.

Nachdem ich stundenlang gegoogelt hatte, versuchte ich, diese beiden Zeilen in mein .zshrc:

unset LD_LIBRARY_PATH  
unset DYLD_LIBRARY_PATH

Aber die nervige Nachricht erscheint immer noch.

Ich gehe zu einem sudoGastkonto und habe diese Nachricht nicht erhalten. Ich denke, ich habe eine benutzerdefinierte Bibliothek installiert ... Aber ich weiß nicht, wie ich das debuggen soll.

BPm
quelle

Antworten:

6

Haben Sie andere DYLD_-Variablen festgelegt? Führen Sie setohne Parameter aus, um alle Variablen anzuzeigen, und deaktivieren Sie alle Elemente, die dieses Präfix enthalten.

Beachten Sie, dass dies anscheinend nur eine Problemumgehung für einen Fehler ist. Diese Nachrichten sollten nur gedruckt werden, wenn Sie DYLD_PRINT_WARNINGS aktiviert haben.

Auch das Update auf 10.8.1 scheint diesen Ärger behoben zu haben.

gabedwrds
quelle
1
ML Bug, soweit ich das beurteilen kann. Diese DYLD_-Variablen können wichtig sein. Wenn Sie sie entfernen, wird möglicherweise das beschädigt, wofür sie festgelegt wurden.
gabedwrds
2
Nun, der Fehler ist, dass Sie diese Nachrichten nur sehen sollen, wenn Sie die Umgebungsvariable DYLD_PRINT_WARNINGS festlegen, aber aus irgendeinem Grund druckt Mountain Lion sie so oder so.
gabedwrds
2
10.8.1 Das Problem wurde nicht behoben
Matteo
2
Das Deaktivieren aller DYLD_-Umgebungsvariablen ist keine Lösung, da sie aus einem bestimmten Grund vorhanden sind. Es ist ein Fehler und wir bleiben dabei, bis Apple ihn behebt.
Matteo
2
Ich habe dieses Problem am 10.8.3
Alex Szatmary
3

In zsh:

 sudo () { ( unset LD_LIBRARY_PATH DYLD_LIBRARY_PATH; exec command sudo $* ) }

Dies erzeugt eine Unter-Shell, in der die Umgebungsvariablen, über die sich sudo beschwert, nicht festgelegt sind, und führt dann sudo aus.

Zu den Vorteilen gegenüber einigen anderen Antworten gehören:

  • Entfernt LD_LIBRARY_PATH und DYLD_LIBRARY_PATH nicht aus Ihrer interaktiven Shell-Umgebung (für Nicht-Sudo-Befehle, die dies benötigen).
  • Durch die Verwendung einer Subshell wird sichergestellt, dass LD_LIBRARY_PATH und DYLD_LIBRARY_PATH in Ihrer Master-Shell unverändert bleiben, wenn Sie das Sudo während der Ausführung unterbrechen (z. B. mit Strg-C) (im Gegensatz zum Skript in einer anderen Antwort, mit der sie in der interaktiven Shell gesetzt und deaktiviert werden) ).
  • Durch die Verwendung von exec wird sichergestellt, dass die ansonsten nicht benötigte übergeordnete Shell beim Aufrufen von sudo sofort beendet wird, sodass während der Ausführung des Befehls keine zusätzlichen Prozesse hängen bleiben.

Ich überlasse es dem Leser als Übung, nach Bash et al.

Pinko
quelle
"Ich überlasse es dem Leser als Übung, auf Bash et al. Zu portieren." Weil die meisten Apple-Benutzer ZSH über den vorinstallierten Bash (Sarkasmus) verwenden.
Jonathan Dumaine
2

Workaround in den Apple Support-Foren von yokyoh1987 gefunden,

https://discussions.apple.com/thread/4143805?start=30&tstart=0

in Ihrem .profile / .bashrc / .bash_profile (hängt von Ihrer Terminaleinstellung ab):

# setze DYLD_ * für meine normalen Programme
DYLD_LIBRARY_PATH = '..'

# setze ein alternatives sudo
thesudo ()
{
# Sichern Sie die Variablen DYLD_ *
local BACK = $ DYLD_LIBRARY_PATH

# nicht gesetzt DYLD_ *
Deaktivieren Sie DYLD_LIBRARY_PATH

# sudo anrufen
/ usr / bin / sudo "$ @"

# DYLD_ * wiederherstellen, nachdem sudo fertig ist
export DYLD_LIBRARY_PATH = $ BACK
}}

# sudo umleiten
alias sudo = thesudo
Brendon-Van-Heyzen
quelle
Das ist ein kluges kleines Stück Umweltmanagement.
bmike
Ein Problem bei dieser Lösung besteht darin, dass Ihre DYLD_LIBRARY_PATH-Variable in Ihrer interaktiven Shell stillschweigend nicht gesetzt wird, wenn Sie das sudo unterbrechen (z. B. über Strg-c), da der Wiederherstellungsvorgang am Ende nicht ausgeführt wurde. Die Verwendung einer Unterschale (siehe meine andere Antwort auf diese Frage) löst dieses Problem.
Pinko
-3

Sie haben wahrscheinlich Ihren LD_LIBRARY_PATH eingestellt.

user37093
quelle
2
Wie das Plakat schreibt, hat er / sie bereits unset LD_LIBRARY_PATHund das Problem bleibt bestehen.
Myhd