如果我想在 Linux 中运行应用程序而不使用包管理器,我唯一的选择是从源代码编译它吗?

如果我想在 Linux 中运行应用程序而不使用包管理器,我唯一的选择是从源代码编译它吗?

我有 2 个想在工作中完成的副项目:

  1. 允许 wiki 用户通过企业 Active Directory (LDAP) 服务器进行身份验证。
  2. 为我的开发团队设置一个代码审查工具。

问题就在这里。工具所在的 Linux 服务器的 PHP 版本未编译 LDAP,而 Apache 服务器由于某种原因缺少 mod_proxy_html。

如果我在 Windows 上运行,我会下载相关模块,将它们放入 ext 或模块目录中,重新启动服务器,然后继续处理我的事务。但是,对于 Linux,似乎我唯一的选择是重新编译 PHP(用于 LDAP 库)或自己编译 mod_proxy_html 模块及其所有依赖项。

现在,我知道您可能在想什么:“为什么不直接使用包管理器来安装模块?”这是一个合理的问题。

  1. 该服务器只能通过带有白名单
    站点列表的代理访问公共互联网。(毕竟它是内联网服务器。)
  2. 服务器上运行的 Apache 和 PHP 来自 LAMP 包。它们不受 YUM、RPM 或任何其他 3 个字母的缩写的控制。

我能够从头开始编译 PHP,但需要很多牦牛剃毛我必须下载并编译 4 或 5 个依赖项,然后才能使用 LDAP 库编译 PHP,即便如此,我make test还是会说,“嘿,伙计。我知道你在编译这个时遇到了很多麻烦,但它看起来有点不稳定。祝你好运!”

我的问题是,为什么这是必要的?为什么我不能只下载我想要的库/模块的预编译(静态编译?)版本,将它们放在 Apache 和 PHP 可以看到它们的地方,重新启动 Apache 服务器,然后就可以高高兴兴地继续工作了。

答案1

Windows 软件分发模式之所以不那么流行,是因为二进制兼容性和库版本控制。你可以设计一个在任意数量的平台上编译软件的构建过程(通过自动检测必要的构建工具),这比支持 X 个 Unix 衍生产品和 Y 个处理器架构要容易得多。

在这种情况下,许多公司的做法是在自己的网络上安装一个软件包分发服务器,允许受限服务器访问。该服务器要么允许刷新自己的存储库,要么充当请求的代理,并在已经下载过一次的情况下提供软件包的本地版本。如果您最终构建了自己的自定义软件包,这最终也会成为中央分发点。

不幸的是,这对你来说没什么帮助,因为你下载了第三方“应用程序堆栈”,而不是使用供应商提供的解决方案。这些通常旨在让软件爱好者的生活更轻松,他们只想启动和运行某些东西,而不必投入太多精力让组件很好地相互配合,但在企业级别,你必须仔细考虑这将如何融入你的基础设施的软件生命周期。

答案2

无论您使用什么 Linux 发行版,它都很可能为其提供的软件包提供源代码。它很可能还为 LAMP 堆栈提供预构建的软件包。

这里的方法是获取包的源代码,根据您的需要进行修改并重新编译它。

你应该在客户端电脑上执行此操作,并将生成的包上传到服务器,这样就无需从互联网上下载任何内容

如果您选择安装第三方供应商提供的二进制文件,您应该获取其源代码并修改它们。

为什么你在网上找不到 php 的预编译库/模块,是因为没有必要。使用为你的发行版制作的(源)包通常更方便。

相关内容