【问题标题】:How to deal with build dependencies in source RPM?如何处理源 RPM 中的构建依赖项?
【发布时间】:2022-03-13 01:02:50
【问题描述】:

我通常不使用 Fedora 或 RPM,所以在这里我是盲目的。这里有很多类似的问题,但我发现没有一个与我陷入困境的确切点有关。

我有 Fedora 上一个旧游戏程序的源 RPM(“六”是游戏)。我想添加一些功能,但首先我想确保我知道如何编译它,以便将来出现新问题。我还没有进行任何更改。

我并非完全无助——当我这样做时

rpmbuild --recompile six-*.src.rpm

我收到了关于缺少依赖项的投诉:“kdelibs3-devel”,但是

dnf install kdelibs3-devel

处理好了。

但是,现在的投诉更加细微。当我重试 rpmbuild 时,它以

结束
checking crt_externs.h usability... no
checking crt_externs.h presence... no
checking for crt_externs.h... no
checking for _NSGetEnviron... no
checking for vsnprintf... yes
checking for snprintf... yes
checking for X... libraries /usr/lib64, headers .
checking for IceConnectionNumber in -lICE... yes
checking for libXext... yes
checking for pthread_create in -lpthread... yes
checking for extra includes... no
checking for extra libs... no
checking for libz... -lz
checking for libpng... -lpng -lz -lm
checking for libjpeg6b... no
checking for libjpeg... no
configure: WARNING: libjpeg not found. disable JPEG support.
checking for perl... /usr/bin/perl
checking for Qt... configure: error: Qt (>= Qt 3.3 and < 4.0) (library qt-mt) not found. Please check your installation!
For more details about this problem, look at the end of config.log.
Make sure that you have compiled Qt with thread support!
error: Bad exit status from /var/tmp/rpm-tmp.y8dvN5 (%build)  

RPM build errors:
    user mockbuild does not exist - using root
    user mockbuild does not exist - using root
    user mockbuild does not exist - using root
    user mockbuild does not exist - using root
    Bad exit status from /var/tmp/rpm-tmp.y8dvN5 (%build)

这里有几件事情看起来很奇怪,但明显的大问题是未能找到介于 3.3 和 4.0 之间的 Qt。这显然是为 Fedora 维护者编译的,所以应该可以使用正确的东西,但我不知道它的确切名称是什么,也不知道如何找到它并使其可用。

请帮忙。 .

【问题讨论】:

  • 我还要注意系统确实安装了 libjpeg-turbo。我想知道是否有 libjpeg 可用(dnf 似乎不这么认为)。
  • 仅供参考,如果您宁愿与原始来源斗争,Internet Archive 仍然有它们。奇怪的是,当我下载一个*.tar.gz 文件时,它实际上只是一个*.tar 文件。
  • 原始源代码不会使用现代 gcc 编译器构建;你需要 Fedora 添加的补丁。
  • 因此,斗争

标签: qt package fedora rpm yum


【解决方案1】:

最好的办法是使用更高级别的工具。具体来说,使用mock。这是一个工具:

  • 管理构建环境(chroot 或基于容器), 所以你不必担心,
  • 处理诸如构建依赖项之类的事情,因此您不必担心,并且
  • 确保您的构建是“干净的”,而不是受您自己的用户环境影响,因此您不必担心。

简而言之:mock --rebuild six-*.src.rpm

【讨论】:

  • 更高级别的工具涉及额外的学习曲线。我很确定我永远不会再这样做了,所以我希望出现一个更简单的答案。我什至对 Fedora 本身也不感兴趣,只是对六个补丁和运行感兴趣。我可能能够将非 gui 版本迁移到 Ubuntu。
  • 我不认为这种概括是真的。许多更高级别的工具是包装器,可以简化事情并减少手动工作。这里的情况非常普遍。
  • 你在开玩笑吧。您的描述已经包括了两件我从未使用过或几乎忘记的东西:容器和 chroot。大概他们只是这个桶的第一滴。我期待更多,包括模拟本身。诚然,一旦它开始工作,我希望它会非常顺利,但不会有续集让我享受它。
  • 您最终将需要了解这些内容,以便为任何操作系统有效地打包软件。但是使用这个工具,您将不得不了解他们更少。我已经编辑了我的答案以澄清。
  • 哇!该命令做了很多事情,而且它确实看起来像是构建了 32 位和 64 位 RPM。一堆警告(我认为来自 gcc)和一些测试等,但没有致命错误。回答接受。谢谢。
【解决方案2】:

如果您看到有关缺少特定库的错误,您可以使用dnf 本身来查找名称。例如,在 Fedora 35 上:

$ sudo dnf repoquery --whatprovides '*qt-mt*'
qt3-0:3.3.8b-88.fc35.i686
qt3-0:3.3.8b-88.fc35.x86_64
qt3-devel-0:3.3.8b-88.fc35.i686
qt3-devel-0:3.3.8b-88.fc35.x86_64

我猜你只需要dnf install qt3-devel

至于 libjpeg,你安装了libjpeg-turbo-devel 吗?配置程序通常会寻找 -devel 的东西,而不仅仅是库 (libjpeg)。如果您安装了它,但它仍然没有被拾取,可能是该软件与libjpeg-turbo 不兼容。解决这个问题将是一个单独的挑战。

【讨论】:

  • 要查看软件包需要什么,您可以使用dnf repoquery --requires ...
  • 一点点进步:确实安装 libjped-turbo-devel 使重建变得更干净了。但是 dnf 坚持认为 qt-3.3 和 qt-3.3-devel 都已经安装了。并且重建继续失败并显示相同的最终消息。
  • 所以我想知道要求 qt3 是否足够具体。来自 dnf 的消息包括:软件包 qt3-devel-3.3.8b-88.fc35.x86_64 已安装,软件包 qt3-3.3.8b-88.fc35.x86_64 已安装。我应该要求别的吗?它们看起来很像您在询问 qt-mt 时发现的,但并不完全相同。
【解决方案3】:

使用 mock 使我能够构建包,但我无法弄清楚如何对其进行进一步的工作,因为 mock 留下的 chroot 似乎不起作用。于是我换种方式问了这个问题here,得到了一个非常好的答案(第二个)。

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 2014-12-09
    • 2020-01-03
    • 2010-09-06
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多