Как правильно перенести сконфигурированную программу --prefix = XX в другой каталог?

596
ShenLei

Рассмотрим два обычных пользователя: A & B, ни один из которых не имеет привилегий sudo.

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

Я хотел собрать git из исходного кода:

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 

Теперь B хотел повторно использовать Git A, поэтому B попросил root

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

B экспортировал PATH & LD_LIBRARY_PATH для git B и ожидал, что будет использовать git правильно, но это не работает !! git жалуется на отсутствие разрешения на чтение файла в / home / A / third / git:

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

Кажется, --prefix помещает абсолютный путь в исполняемые файлы.

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

Как это исправить? Есть ли канонический способ поделиться локально установленной программой с другими без использования root?

Заранее спасибо.

1

1 ответ на вопрос

1
Abhijatya Singh

Существует проблема с вашим разрешением, которая включает пользователя, группу и т. Д. Вот несколько причин для поведения git:

  1. Git читает настройки конфигурации с разных путей и <USER>не имеет доступа к некоторым из них.
  2. Git пытается прочитать настройки корневой конфигурации вместо настроек конфигурации из-за запуска сценария с помощью команды su с параметром не сбрасывать переменные среды (-m):

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

Вы можете попробовать кое-что исправить:

  1. Исправьте разрешение:

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

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

  2. Перекомпилируйте, используя параметры по умолчанию:

Вторая часть вашего ответа о том, как два пользователя могут совместно использовать локально установленную программу?

Есть несколько способов, о которых я могу думать прямо сейчас:

  1. Добавьте пользователя B в список A Access Control List (ACL) пользователя с помощью команды setfacl .
  2. Создайте отдельную группу с соответствующими настройками разрешений и т. Д. И добавьте A и B в эту группу
  3. Установите программу в том общем пространстве, которое могут использовать оба. Как нестандартный путь, который может включать в себя каталог, который имеет доступ к обоим, или отдельный раздел, который имеет доступ к каждому из них в зависимости от ваших потребностей.

Похожие вопросы