我有一个软件,需要使用./configure-make-make install
循环从其源代码进行安装。是否可以“虚拟化”该软件,以便可以进行不同的软件安装(使用不同的选项)并使用它?
例如,在一个实例中,我可能希望使用terrible.cc
并Makefile
编译。而在另一个实例中,我可能排除该文件并包含其他文件。并且可能会有多个这样的模块。本质上,这意味着运行同一软件的多个实例,但每个实例都安装了不同的配置。
此外,这些安装不会“静态”完成。为了说明这一点,请考虑多个用户telnet
登录到 Linux 计算机,编译多个实例Apache
并运行它们。因此,用户 John 的实例Apache
与用户 Adam 的实例是透明的,尽管两者都Apache
在同一物理服务器上执行。但是,我不知道在任何给定时间有多少用户会登录。(但也许我可以确定一个上限。)
这在实践中可行吗?如能提供详细的回复和可能的 URL,我将不胜感激。
答案1
我们不可能说出实现目标的最佳方法,因为这在很大程度上取决于您想要使用的软件及其构建环境的灵活性。
不过,在一般情况下,我首先会尝试检查是否可以使用./configure
来为各个版本创建安装前缀。例如
--prefix /opt/yoursoft/var1
然后将编译后的二进制文件放入/opt/yoursoft/var1/bin
或类似的东西中。
根据软件完整构建的内容,您可能需要在各个文件夹下完成lib
、etc
等等文件夹。bin
var*
正确执行此操作后,您可以从各自的目录启动软件变体。
使用虚拟化技术要复杂得多,因为你必须维护完整操作系统的多个副本,并在每个副本上安装软件的变体。你可以使用多种变体来实现这一点,包括 VirtualBox 等桌面风格类型,或使用 Xen 或 KVM 的服务器风格方法(请参阅本 Ubuntu 指南)。
答案2
如果您希望用户和机器的行为就像他们拥有对计算机资源的完全访问权限(或几乎完全访问权限)而实际上没有完全访问权限一样,那么您需要使用虚拟化为您的用户创建多个 VM(并且每个 VM 都会为您的应用程序拥有自己的 IP,如果它提供需要端口的服务)或者您需要查看某种类似监狱的沙盒机制(如果运行某种“重复”但需要使用相同端口的应用程序,这仍然会导致一些网络争用问题)。
否则,他们将能够编译并运行直接安装在其主目录中的应用程序,就像在 Unix 的“旧时代”所做的那样。听起来您描述的是将应用程序安装到系统和本地计算机目录中,这是系统管理员的任务。您需要将它们限制在其主目录中,或者为它们提供虚拟机以在其中肆意运行。