Wie wird das installierte Programm configure --prefix = XX korrekt in ein anderes Verzeichnis verschoben?

684
ShenLei

Betrachten Sie zwei gemeinsame Benutzer: A & B, keiner hat Sudo-Privileg.

/home/A A A rwx------ /home/B B B rwx------ 

A wollte git aus dem Quellcode bauen:

cd /home/A/third-src wget & extract git.source ./configure --prefix=/home/A/third/git make install # install without root export PATH & LD_LIBRARY_PATH # Here A can use git correctly 

Jetzt wollte B A's Idiot wiederverwenden, also fragte B root an

cp -r /home/A/third/git /home/B/third/git chown -R B:B /home/B/third/git 

B hat PATH & LD_LIBRARY_PATH für B's git exportiert und erwartet, dass er git richtig verwendet, aber es funktioniert nicht !! git beschwert sich nicht, die Datei in / home / A / third / git lesen zu dürfen:

git init fatal: unable to access '/home/A/third/git/etc/gitconfig': Permission denied 

Es scheint, dass --prefix einen absoluten Pfad in ausführbare Dateien einfügt.

strings bin/git # it really lists /home/A/third/git 

Wie man es repariert? Gibt es eine kanonische Möglichkeit, lokal installierte Programme ohne Root zu nutzen?

Danke im Voraus.

1

1 Antwort auf die Frage

1
Abhijatya Singh

Es gibt ein Problem mit Ihrer Berechtigung, das Benutzer, Gruppen usw. umfasst. Hier einige Gründe für das Verhalten von Git:

  1. Git liest die Konfigurationseinstellungen aus einer Vielzahl von Pfaden, und <USER>einige haben keinen Zugriff.
  2. Git versucht, die root-Konfigurationseinstellung anstelle der Konfigurationseinstellungen zu lesen, da das Startskript den Befehl su verwendet und die Umgebungsvariablenoption (-m) nicht zurückgesetzt wird:

    /bin/su -m $USER -c "cd $BASE/logs && $BASE/bin/startup.sh &> /dev/null"

Sie können einige Dinge versuchen, die zu beheben sind:

  1. Korrigieren Sie die Berechtigung:

    chown <USER>.<GROUP> -R /home/<USER>/.config

    chown <USER>.<GROUP> -R /home/<USER>/.gitconfig

  2. Rekompilieren mit Standardoptionen:

Der zweite Teil Ihrer Antwort lautet: Wie können zwei Benutzer ein lokal installiertes Programm gemeinsam nutzen?

Es gibt einige Möglichkeiten, an die ich jetzt denken kann:

  1. Fügen Sie Benutzer B zu Benutzer A Access Control List (ACL) mit dem Befehl setfacl hinzu .
  2. Erstellen Sie eine separate Gruppe mit den richtigen Berechtigungseinstellungen usw., und fügen Sie A und B in dieser Gruppe hinzu.
  3. Installieren Sie das Programm in diesem gemeinsamen Raum, den beide verwenden können. Wie ein nicht standardmäßiger Pfad, der ein Verzeichnis enthalten kann, auf das beide zugreifen können, oder eine separate Partition, auf die je nach Ihren Bedürfnissen Zugriff besteht.