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

Рассмотрим два обычных пользователя: 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 ответ

Решение

Существует проблема с вашим разрешением, которая включает пользователя, группу и т. Д. Вот некоторые причины поведения 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. Установите программу в том общем пространстве, которое могут использовать оба. Как нестандартный путь, который может включать в себя каталог, который имеет доступ к обоим, или отдельный раздел, который имеет доступ к каждому из них в зависимости от ваших потребностей.
Другие вопросы по тегам