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

How to modify a Fedora package and fix bugs

我有一个来自 Fedora 的旧游戏,在一个名为 6 的包中。它有一个错误,我想添加几个简单的功能。我在这里询问了过程的一部分,(参见 )得到了一些答案,发现学习曲线对我的旧大脑来说太过分了。文档往往想要涵盖一个包可以做的所有事情,而我很难从中挑选出我需要的部分。

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

它会从这个开始(它可以工作,甚至可能是标准的):

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

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

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

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

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

您可以再试一次,点击面板中间,注意它不会崩溃。

之前没有注意到这个错误,我并不感到惊讶。交换通常只在有经验的玩家之间启用。我怀疑有经验的玩家会在顶行或底行对付另一个人时先下棋。

你处理得很好。您实际上只缺少一件事。安装 src.rpm 之后:

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

您在 ~/rpmbuild/SPECS 中有 six.spec six-SOMETHING.tar.gz~/rpmbuild/SOURCES

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

然后就是:

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

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

模拟六.src.rpm

(一种更快更脏的方法是调用 rpmbuild -ba 直接构建 rpm,但 mock 是一种更简洁的方法)。

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

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

我今天很高兴 auto-player 进行构建。我在 SentryPeer 上的工作得到了回报! :-)

怎么解释!我需要修补一些代码和 autoconf/automake 链接。这里是:

获取 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 带有 6-0.5。3.tar.gz(与 [=94= 上的代码不同) ] 在 - 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

rpms 应该构建,但 auto-player 是一个额外的程序,如您所知,默认情况下未构建。

这将创建一个 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

进入顶层并运行再次配置re-generate Makefile:

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

这些应该都不错

返回测试文件夹:

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

打开 auto-player.cpp 并在第 6 行添加它(缺少它,所以不确定它是如何编译的):

#include <stdlib.h>

保存文件。

构建程序:

make auto-player

运行它:

./auto-player filename player1 player2

根据代码是 运行s like:

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

告诉我你过得怎么样!

谢谢!

-- https://sentrypeer.org