这是一个典型问题关于编译依赖项和包管理。
我有一个关于在 *nix 服务器上编译 ports/软件或安装 RPM 的问题。当我尝试执行此操作时,我收到大量有关缺少依赖项的消息。
Server Fault 社区能帮忙吗?
答案1
欢迎来到 Server Fault。一般来说,这种类型的问题与此无关。大多数系统管理员在成为系统管理员之前,通过摆弄自己的工作站就已经遇到过这个问题。但是,具有 Windows 背景的系统管理员可能没有遇到过这个问题,因此需要考虑以下几点:
为什么不使用包管理器在你的服务器上安装软件?
软件包管理器(例如yum
或)apt
可为您处理这些依赖项。此外,它们还可用于管理服务器上软件的更新。大多数 *nix 版本默认安装有软件包管理器,尤其是在预装操作系统的 VPS 上。如果您对此还不是很熟悉,请在生产系统上使用其中一种,这样就无需费心为测试环境编译或安装前沿 RPM。
但是我需要使用比我的包管理器中现有的更新的包!
大多数包管理器可以配置为使用不同的存储库——您可能会发现有一个存储库提供了您需要的包版本,并且仍然允许您利用包管理器的功能。
我需要的软件包无法通过任何存储库或软件包管理器获得
在这种情况下,你可能做需要弄清楚依赖关系(或者忍耐并使用更稳定/更常见的软件版本)。您可能应该在测试环境中执行以下操作,并仔细记录您所做的事情:
- 确保阅读您正在安装的软件的文档 - 这可能会列出您需要首先安装的内容,但不会列出安装所需的内容那软件。
- 使用包管理器安装所需的东西——在大多数情况下,这些将要能得到的。
- 完成此操作后,尝试安装。
- 如果您仍然看到有关缺少依赖项的消息,请记下所有依赖项,然后再次尝试使用包管理器安装尽可能多的依赖项。
- 如果未找到依赖项,则必须将其视为子任务并递归处理它(查找源 tarball、查找依赖项、安装)。
- 这是一个反复的过程。
我仍遇到问题!
如果你已遵循上述所有步骤,并且仍然遇到麻烦,那么您可能遇到了一些奇怪的问题,其他 Server Faulters 可能会很乐意提供帮助。创建一个新问题,详细说明您要安装的软件、版本以及您看到的确切错误消息。
针对主要包管理系统的具体建议
RPM(RHEL/Fedora 及其克隆版本)和 DEB(Debian/Ubuntu 及其克隆版本)包管理
- yum whatprovides filename 是在 RHEL 类型系统上查找提供特定文件或库的包的绝佳方法。
./configure && make && make install
尽可能不要盲目使用!包管理就是为此而发明的,以防止由于无法追踪安装许多冲突文件而导致的尴尬和难以维护的混乱。- 许多库分为两部分:二进制(例如共享对象)和开发(标头)。因此,您需要
libfoo
和libfoo-devel
(或-dev
)包。 - 考虑使用
fpm
(https://github.com/jordansissel/fpm)将 tarball 转换为纯净的 RPM 和 DEB - 如果你正在推出自己的软件包,那么你就是负责更新、测试和维护的人。如果你没有这样的基础设施,那么你的目标肯定太高了。
根据文件名查找 RPM 的依赖项
http://rpmfind.net如果您知道安装程序抱怨的文件名,那么这里是查找软件包名称的好地方。但是,不建议匹配和混合来自不同发行版的软件包。