如何正确地将 configure --prefix=XX 安装的程序移动到其他目录?

如何正确地将 configure --prefix=XX 安装的程序移动到其他目录?

考虑两个普通用户:A 和 B,都没有 sudo 权限。

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

A 想从源代码构建 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 想要重用 A 的 git,所以 B 要求 root

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

B 为 B 的 git 导出了 PATH 和 LD_LIBRARY_PATH,并且预期可以正确使用 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. 由于启动脚本时使用带有不重置环境变量选项 (-m) 的 su 命令,因此 Git 尝试读取根配置设置而不是配置设置:

    /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. 添加用户致用户A 访问控制列表 (ACL) 列表使用设置命令。
  2. 创建一个具有适当权限设置等的单独组,并将 A 和 B 都添加到该组中。
  3. 在两个都可以使用的公共空间中安装程序。例如非标准路径,其中可能包含一个可以访问两者的目录,或者一个可以访问每个目录的单独分区,具体取决于您的需要。

相关内容