Как правильно перенести сконфигурированную программу --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:
- Git читает настройки конфигурации с разных путей и
<USER>
не имеет доступа к некоторым из них. Git пытается прочитать настройки корневой конфигурации вместо настроек конфигурации из-за запуска сценария с помощью команды su с параметром не сбрасывать переменные среды (-m):
/bin/su -m $USER -c "cd $BASE/logs && $BASE/bin/startup.sh &> /dev/null"
Вы можете попробовать кое-что исправить:
Исправьте разрешение:
chown <USER>.<GROUP> -R /home/<USER>/.config
chown <USER>.<GROUP> -R /home/<USER>/.gitconfig
Перекомпилируйте, используя параметры по умолчанию:
Вторая часть вашего ответа о том, как два пользователя могут совместно использовать локально установленную программу?
Есть несколько способов, о которых я могу думать прямо сейчас:
- Добавьте пользователя B в список A Access Control List (ACL) с помощью команды setfacl.
- Создайте отдельную группу с правильными настройками разрешений и т. Д. И добавьте A и B в эту группу.
- Установите программу в том общем пространстве, которое могут использовать оба. Как нестандартный путь, который может включать в себя каталог, который имеет доступ к обоим, или отдельный раздел, который имеет доступ к каждому из них в зависимости от ваших потребностей.