如何修改 Fedora 软件包并修复错误



我有一个来自Fedora的旧游戏,在一个名为six的软件包中。 它有一个错误,我想添加几个简单的功能。 我在这里询问了这个过程的一部分,(请参阅如何处理源代码RPM中的构建依赖关系?)得到了一些答案,并发现学习曲线对于我的旧大脑来说太多了。 文档往往希望涵盖包可以做的所有事情,我很难挑选出我需要的部分。

我真正希望的是一个完整的工作流程(希望只是一个命令列表和所涉及的目录的提及)。

它将从这个开始(它有效,甚至可能是标准的):

  • 查找转速为 -qi six 的 SRPM | grep 源
  • 使用 rpm -i 六-0.5.3-38.fc35.src 获取.rpm

结果:~/rpmbuild 中的源和规范文件

我需要填写的是修改和测试新版本后的以下步骤:

  • 构建新的SRPM(可以模拟这样做吗?
  • 构建新的 RPM 并在本地安装它们(我将根据需要进行测试和重复)
  • 报告错误和修复,可能作为拉取请求

如果需要,可以重新组织这些步骤。 我知道 mock 可以从 SRPM 构建 RPM,但我没有看到如何直接从源代码到安装,并且在 mock 之外构建失败(qt-mta 存在一些问题)。

我希望有一个命令列表,这些命令可以协同工作来做这些事情。 我已经做了我能花一周时间理解各个手册页之间的术语不匹配的工作。 或者只是奇怪的用法(为什么SRPM的重建构建二进制RPMS,而不是SRPM?

顺便说一句,如果你想看看我提到的错误,

  • 安装六
  • 启动它
  • 将黑色设置为人类
  • 将白色设置为专家
  • 设置已启用交换
  • 单击顶部(或底部)行中的任何十六进制,然后观看六个报告崩溃并退出。

您可以重试,单击板的中间,并注意到它不会崩溃。

我并不感到惊讶,这个错误以前没有被注意到。 交换通常仅在有经验的玩家之间启用。 我怀疑一个有经验的玩家会在顶排或底排对另一个人迈出第一步。

你处理得很好。你实际上只错过了一件事。安装 src 后.rpm:

rpm -i 六-0.5.3-38.fc35.src.rpm

你在~/rpmbuild/SPECSsix.specsix-SOMETHING.tar.gz~/rpmbuild/SOURCES

快速而肮脏的方法是 解开那six-SOMETHING.tar.gz.修改文件并将其打包回去。进入与原始焦油球相同的结构。

然后只是:

rpmbuild -bs ~/rpmbuild/SPECS/six.spec

这将生成 src.rpm然后您可以使用 mock 构建它:

模拟六.src.rpm

(一种更快、更脏的方法是调用直接构建 RPM 的rpmbuild -ba,但 mock 是一种更干净的方法)。

处理软件包中修复的标准方法是添加补丁。 https://rpm-packaging-guide.github.io/#patching-software 但是,如果您不关心可持续性和长期安全性,那么上面的路径就可以了。

如果你想对Fedora six的软件包提交一个错误,你可以在这里做 https://bugz.fedoraproject.org/six

我今天玩得很开心。我在SentryPeer上的工作得到了回报!:-)

怎么解释!我需要修补一些代码和自动确认/自动制作链接。这里是:

获取 src rpm:

sudo dnf download --source six -y

安装 rpm-build:

sudo dnf install rpm-build
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

安装 src rpm(它将位于您运行步骤 1 的目录中):

rpm -ivh six-0.5.3-38.fc35.src.rpm

按照https://src.fedoraproject.org/rpms/six/blob/rawhide/f/six.spec 安装构建要求,例如它需要:

BuildRequires: make
BuildRequires:  gcc
BuildRequires:  kdelibs3-devel
BuildRequires:  desktop-file-utils

所以做:

sudo dnf install make gcc kdelibs3-devel desktop-file-utils

运行 rpmbuild 命令,使其应用所有补丁等,因为 src rpm 附带 six-0.5.3.tar.gz(这与 GitHub 上的代码不同 - https://github.com/melisgl/six 我无法编译):

这些文件我的意思是:

localhost ~/rpmbuild/BUILD/six-0.5.3/tests $ ls ../../../SOURCES/
six-gcc43.patch
six-0.5.3.tar.gz
six-fix-DSO.patch

跑:

rpmbuild -ba ~/rpmbuild/SPECS/six.spec

应该构建 RPM,但如您所知,自动播放器是一个额外的程序,默认情况下不会构建。

这将创建一个 BUILD 文件夹。

cd ~/rpmbuild/BUILD/six-0.5.3/tests

编辑第 84 行 Makefile.am 并将其添加到 $(LIB_KFILE) 之后的位:

-lqt-mt

所以它看起来像:

-lm $(LIB_KFILE) -lqt-mt

并在 Makefile.in 的第 374 行执行相同的操作

默认情况下,它没有链接到libqt-mt。

进入顶层并再次运行配置以重新生成生成文件:

cd ~/rpmbuild/BUILD/six-0.5.3
./configure
make clean
make
make check

这些都应该很好

返回测试文件夹:

cd ~/rpmbuild/BUILD/six-0.5.3/tests

打开自动播放器.cpp并在第 6 行添加它(缺少这个,所以不确定它是如何编译的):

#include <stdlib.h>

保存文件。

构建程序:

make auto-player

运行它:

./auto-player filename player1 player2

根据代码运行如下:

void play(char *filename, Poi<HexPlayer> vert, Poi<HexPlayer> hori)

让我知道你过得怎么样!

谢谢!

-- https://sentrypeer.org

相关内容

最新更新