你能帮我解决我的软件依赖问题吗?

dun*_*nxd 12 unix rpm dependencies

这是一个关于编译依赖和包管理的规范问题

我有一个关于在 *nix 服务器上编译端口/软件或安装 RPM 的问题。当我尝试这样做时,我收到了很多关于缺少依赖项的消息。

服务器故障社区可以帮忙吗?

dun*_*nxd 10

欢迎来到服务器故障。一般来说,这类问题不是这里的主题。预计大多数系统管理员在通过修改自己的工作站成为系统管理员之前就已经面临这个问题。但是,来自 Windows 背景的系统管理员可能没有遇到过这种情况,因此需要考虑以下几点:

为什么不使用包管理器在您的服务器上安装软件?

包管理器为您处理yumapt处理这些依赖项。此外,它们还可用于管理服务器上软件的更新。大多数 *nix 版本都会默认安装一个包管理器,特别是在预装操作系统的 VPS 上。如果您真的对此不熟悉,请在您的生产系统上使用其中之一,并节省为您的测试环境编译或安装前沿 RPM 的冒险。

但是我需要使用比我的包管理器中可用的包更新的包!

大多数包管理器可以配置为使用不同的存储库——您可能会发现有一个提供了您需要的包版本,并且仍然允许您利用包管理器的功能。

我需要的包无法通过任何存储库或包管理器获得

在这种情况下,您可能确实需要弄清楚依赖关系(或者吸收它并使用更稳定/更通用的软件版本)。您可能应该在测试环境中执行以下操作,并仔细记录您的操作:

  • 确保阅读您正在安装的软件的文档 - 这可能会列出您首先需要安装的内容,但不会列出软件的要求。
  • 用你的包管理器安装所需的东西-在大多数情况下,这些是可用的。
  • 完成此操作后,请尝试安装。
  • 如果您仍然看到有关缺少依赖项的消息,请记下所有依赖项,然后再次尝试使用您的包管理器安装尽可能多的依赖项。
  • 如果未找到依赖项,则必须将其视为子任务并递归处理(查找源 tarball、查找依赖项、安装)。
  • 这是一个迭代过程。

我还是有问题!

如果您已按照上述所有步骤操作但仍然遇到问题,那么您可能遇到了一些其他服务器故障人员可能很乐意提供帮助的奇怪问题。创建一个新问题,详细说明您尝试安装的软件、版本以及您看到的确切错误消息。

针对主要包管理系统的具体建议

RPM(RHEL/Fedora 和克隆)和 DEB(Debian/Ubuntu 和克隆)包管理

  • yum whatprovides filename 是查找在 RHEL 类型系统上提供特定文件或库的包的绝佳方法。
  • 尽量不要./configure && make && make install盲目使用!包管理的发明正是出于这个原因,以防止由于无法追踪许多冲突文件的安装而导致的尴尬和无法维护的混乱。
  • 许多库分为两部分:二进制(例如共享对象)和开发(头文件)。因此,您需要同时使用libfoolibfoo-devel(或-dev)包。
  • 考虑使用fpm( https://github.com/jordansissel/fpm ) 将 tarball 转换为整洁的 RPM 和 DEB
  • 如果您正在推出自己的软件包,则您是负责更新、测试和维护的人。如果你没有基础设施,那么你的目标肯定太高了。

按文件名查找 RPM 的依赖项

如果您知道安装过程抱怨的文件名,http://rpmfind.net是一个查找软件包名称的好地方。但是,不建议匹配和混合来自不同发行版的包。