我的公司使用一个小型过时的集群(CentOS 5.4)来进行数字运算(更具体地说是有限元计算)。他们使用的是商业软件包,并且对 Linux 不了解。只要机器在运行,他们就不想更改机器上的任何内容,我认为这是一项节省时间的策略。我愿意不是拥有行政管理权。
我可以让他们安装较小的软件包,但不能将 python 版本从 2.4 更改为 2.6+,因此我决定编译当前版本 ( ./configure --prefix=/home/mysuser/root2
),并遇到了一些依赖项问题(例如 readline、zlib、curses 的版本错误) 、bz2 ...或未找到包)。我还需要更新 gcc,它抱怨缺少GMP
,MPFR
和MPC
。
这样做的原因是我想编译其他测试软件以在这些机器上运行。我该如何有效地安装所需的软件包以编译我需要使用的软件?我在其他地方使用架构Linux并且会发现能够沿着这条线做一些事情非常方便
pacman --root /home/myuser/root2 -S <package>
但我不知道这是否可能或聪明。
答案1
您的管理层明智地不要尝试升级正在基于专有软件包执行重要功能的工作集群。
向后移植包既耗时又危险,也就是说,并不总是可行。如果您可以在原始 CentOS 5.4 存储库或某些 CentOS 5.4 向后移植存储库中找到要安装的软件包,则可以避免时间损失。虽然一台主机上可以同时拥有多个版本的 GCC(嵌入式系统/交叉编译人员一直在这样做),但在单个运行时环境中拥有多个 glibc 并不是一件小事。
因此,最好建议您在一个单独的、较新的环境中工作,其中包含您需要的包,并找到某种方法在新环境中测试旧环境的输出。无论如何,不要冒险破坏旧环境中的任何东西,否则您可能需要所有 stackexchange.com 声誉点来找到下一份工作;-)
答案2
当您没有 root 权限时,从发行版安装软件包通常很困难,因为它们采用固定的目录布局,并且依赖系统往往需要一些带有 setuid 或 setgid 程序的软件包,而您无法以非 root 身份安装这些软件包。
从源代码编译通常是最简单的方法。 (如果您追求速度,您可以为您的特定处理器型号选择最佳编译选项。)
要组织您编译的包(或通过提取 tarball 安装),我建议使用存放或者更强大但更复杂收起。它们的基本操作模式是将每个包安装在单独的目录中,然后创建符号链接将它们全部放在一起。这是使用 stow 的典型编译和安装会话:
tar xzf foobar-42.tar.gz
cd foobar-42
./configure --prefix=~/software/stow/foobar-42
make
make install
cd ~/software/stow
stow foobar-42
最后一个命令从 下的文件和目录创建符号~/software/stow
链接~/software
。例如,如果~/software/stow/foobar-42
包含lib/foobar
目录和文件bin/foobar
和man/man1/foobar.1
,那么您最终将得到符号链接
~/software/bin/foobar -> ../stow/foobar-42/bin/foobar
~/software/lib/foobar -> ../stow/foobar-42/lib/foobar
~/software/man/man1/foobar.1 -> ../../stow/foobar-42/man/man1/foobar.1
要卸载程序,请stow -D foobar-42
在目录中运行~/software/stow
,然后删除~/software/stow/foobar-42
.要使程序暂时不可用(例如尝试另一个版本),只需运行该stow -D
部分即可。