跨不同机器的共享主目录解决方案 - 更改$ HOME变量?

时间:2017-01-14 01:55:29

标签: linux unix environment-variables shared-libraries

我在一组计算机上拥有一个帐户,这些计算机具有单独的处理器,内存和存储,但共享相同的主目录。因此,例如,如果我将ssh插入任一计算机,它们都将获取相同的bashrc文件。

系统管理员没有安装我想要使用的所有软件,因此我从源代码编译了一些软件并将其存储在主目录中的binlib等目录中并更改了我的{ {1}},PATH个变量包含这些变量。每台机器,至少到最近,都安装了不同的操作系统(或至少是版本),我被告知一台机器上的编译代码不一定能给出相同的结果。因此我的(非常hacky)解决方案如下:

  • 在$ HOME中创建两个目录:LD_LIBRARY_PATH~/server1home, 每个都有自己的~/server2homebin等组合 编译库。
  • 编辑我的lib以检查我所在的服务器并设置路径变量以查找服务器的二进制文件和库的正确目录。

最近,我们搬家了,服务器重新启动了,我相信他们现在都运行相同的操作系统。我的大多数设置都被重新启动打破了,所以我必须重新制作它。原则上,我不需要在每台机器上有任何不同的东西,除了有更多的处理器和内存来运行代码之外,它们可能是完全相同的。据我所知,他们没有相同的硬件,所以我仍然不知道他们是否可以安全地运行相同的二进制文件。这样的设置是否可以安全地运行需要数字精确的代码?

或者,这次我会以不同的方式重做我的黑客行为。我有很多dotfiles仍然进入.bashrc,而不是我的$HOME目录,情况总是有点混乱。我想知道是否有可能在登录时重新定义serverXhome,基于$HOME,然后除了共享$ HOME中的两个hostname目录之外什么都没有,所有内容都重复在这些新的主目录中。这可能是在没有管理权限的情况下设置的吗?我想我可以创建一个在登录时运行的.profile脚本,并将serverXhome更改为指向正确的目录,然后在该目录中获取新的$HOME以设置所有其余的环境变量。这是解决这个问题的正确方法还是存在一些需要警惕的陷阱?

TL; DR:我有两台独立机器的主目录。在一台机器上编译的二进制库和可执行文件是否可以安全地运行在另一台否则,是否有策略在每台计算机上重新定义.bashrc以指向共享主目录的子目录,并为每个目录分别创建二进制文件?

PS:我不确定这在超级用户堆栈交换中是否更具相关性。如果我在那里发布更好的运气,请告诉我。

1 个答案:

答案 0 :(得分:1)

如果两台计算机具有相同的处理器体系结构,通常编译的二进制文件应该同时适用于这两种计算机。

现在有很多因素可以发挥作用,结果将在很大程度上取决于您要运行的程序类型,但一般来说,如果安装了相同的共享库,那么您的程序将以相同的方式工作

在不同的发行版或给定发行版的不同版本中,很可能是已安装的库集或它们的版本不同,这意味着您的程序将在构建它们的机器上运行,但可能不是另一个。

如果你可以控制它们的构建方式,你可以重建你的应用程序,使其具有静态链接而不是动态,这意味着它们将在构建时嵌入所需的所有库,从而产生更大的可执行文件,但提供了更多改善了兼容性。

如果以上操作不起作用,并且您需要为每台计算机使用不同的程序集,我建议单独保留$HOME环境变量,并仅根据$PATH更改.bashrc在你所使用的机器上。

您可以在export PATH=$HOME/$(hostname)/bin:$PATH export LD_LIBRARY_PATH=$HOME/$(hostname)/lib:$LD_LIBRARY_PATH 中使用简短的片段:

{{1}}

然后您需要的是一个文件夹,其中包含您可以连接到的每台计算机的机器主机名。如果多台计算机共享相同的操作系统和体系结构,则创建符号链接将为您节省一些空间。