我倾向于将一些有用的程序复制到我登录的每个服务器上。我有大量配置文件、静态编译的 zsh(以防我需要新版本)、vim、python、版本控制二进制文件等。我有一个脚本可以检查它们,如果它们比系统范围的版本新,则将所有二进制文件链接到 ~/bin,并进行所有必要的设置 - 我在任何类型的主机/发行版上都有所需的设置。
当我在所有主机上使用相同的登录名时,这一直运行良好。不幸的是,现在我无法在某些主机上使用我的标准登录名。如何修改我的环境以在不重新编译的情况下以相同的方式工作?例如,在正常部署中,我需要重新编译 python 以生成/home/yyy/priv_env/python/lib
主库路径,但在所有其他主机上我需要/home/xxx/...
。当然可以用来解决这种情况PYTHONPATH
,但是还有其他二进制文件从编译阶段就采用了默认路径 - 比如 zsh 模块。有没有办法解决这个问题而不必考虑许多 shell 变量?
理想情况下,我会在环境中使用私有 chroot,将所有需要的目录映射到我需要的位置。但 chroot 当然不适用于非 root 用户。
我还考虑过设置一个链接,/tmp/${random_preselected_string}
并将${HOME}/priv_env
所有路径设置为指向该/tmp/...
链接。只要没有人在那里创建同名文件,这种方法就有效。此外,如果登录会话较长,可能会受到 tmp 自动清理程序的影响。
您还有更好的想法吗?
答案1
我会研究如何将 $HOME 指定为软件在运行时评估的路径的一部分。不过这很可能需要修补代码……
答案2
这不会有太大帮助,但一般来说,源代码构建的理念是它们针对的是主机的库配置。通过静态链接在另一台机器上生成的可移植二进制文件不能保证能正常工作,也不是规范的做法。通常,您应该在每台目标机器上编译自定义二进制文件。
作为后备,我将前缀设置为/usr/local
,但同样,我看到了您的困境,没有根访问权限等等。