我对某些专有软件有疑问:它是很久以前创建的,需要 RHEL5 和一组类似的库基序22,PCRE v1、Fortran诸如此类的事情。它极大地限制了我需要遵循的操作系统的选择,因为 Centos/RHEL7 是我能够在野外找到所需的库集的最后一个。它们的数量很大(超过 200 个,并且有一些依赖性)。
现在,当我有升级的想法时,我有一个选择:是安装 RHEL/Centos 7 还是想办法将专有软件及其库隔离在其容器内。软件执行数学计算,与特殊硬件配合使用,并执行频繁但网络使用率低的操作。
虚拟机的想法不是一个好的选择,因为软件是安装它的工作站的唯一目的,所以我需要向软件提供它的全部计算能力。
这里最好的选择是什么?基本上我需要将旧的专有软件和旧的库集(即使是 i686 架构)安装到 x64 Linux 机器中,但它应该与系统库分开。我不需要任何其他东西来限制网络、CPU、GPU、RAM 或其他限制。只是安装问题。
我正在考虑flatpak
设置的风格,但它需要彻底的理解和广泛的测试——由于缺乏时间,我现在无法承担这些。那么,您能建议我什么可以适用于该目的吗?
谢谢。
答案1
虚拟机的想法不是一个好的选择,因为软件是安装它的工作站的唯一目的,所以我需要向软件提供它的全部计算能力。
这是一个谬论:现代虚拟化非常高效。 (您会注意到,AWS/Google Cloud Services/Alibaba Cloud/Azure/Digital Ocean/Oracle Cloud/...每年产生的 1000 亿美元收入是提高效率的强大财务激励。)
特别是如果它只是 i686,它就没有利用 CPU 必须使计算速度更快的现代指令集。该软件不利于使用您的 CPU 能力,并且不在虚拟机中运行它也不会带来任何明显的改善!
此外,如果它在运行 RHEL5 的系统上运行,损失几个百分点的性能(即使发生这种情况!)也不会是什么大问题 - 现代计算机必须比软件最初运行的机器快得多。
所以,是的,虚拟机确实是一个非常好的方法。
你也可以尝试容器(阅读:podman
或docker
)在现代内核上运行旧用户区(Linux 发行版系统)。我会先尝试一下;它的工作量非常低(假设是 RHEL8/Centos/Fedora/Alma/Rocky Linux 或衍生版本):
sudo dnf install podman
podman run -it --rm centos:centos5
将为您提供一个系统,您可以在其中安装您想要的任何 centos5/RHEL5 依赖项。它以您的用户身份在您的本机内核上运行,因此直接在主机操作系统上“正常”执行软件与在容器中运行软件之间实际上没有区别 – 容器只会看到不同的文件系统、用户和 IPC 设置(如果您想要那个)。
但老实说,RHEL5 太老了,当您需要处理实际硬件时,虚拟机可能是您唯一的机会)。
无论您做什么,您都应该考虑滚动一个可以部署在任何计算机上的标准化虚拟机映像。否则,有一天你醒来时会发现没有仍然有效的参考系统,即使你想做一些非虚拟机的事情!
从长远来看,你的软件正在遭受所谓的比特旋转。 Motif22 清楚地表明,除了在几年内构建虚拟化 X 服务器之外,您别无选择——例如,对底层显示硬件的假设如今对于许多现代系统来说已经不再有效。如果这个东西主要做数学计算,找人来记录 UI(是的,这可能只是意味着一堆屏幕截图 - 我不知道这个东西有多复杂!),然后估计需要花费多少精力将 UI 移植到现代的东西。您还需要挖掘实际数学例程的资源。你说它是 FORTRAN——那太好了!很可能相同的代码在现代编译器上编译得很好,而且运行速度更快。将 GUI + Core 移植到现代系统仍然需要付出一些努力(已经做到了),但这是值得的 - 只需相对较少的努力即可获得很大的加速,并且可能会获得更好的用户体验是您的回报。 (以及直接在现代环境中运行的可能性,即使容器和微型虚拟机现在已经不是什么大问题了。)