如何修改 Fedora 软件包并修复错误
How to modify a Fedora package and fix bugs
我有一个来自 Fedora 的旧游戏,在一个名为 6 的包中。它有一个错误,我想添加几个简单的功能。我在这里询问了过程的一部分,(参见 )得到了一些答案,发现学习曲线对我的旧大脑来说太过分了。文档往往想要涵盖一个包可以做的所有事情,而我很难从中挑选出我需要的部分。
我真正希望的是一个完整的工作流程(希望只是一个命令列表并提及所涉及的目录)。
它会从这个开始(它可以工作,甚至可能是标准的):
- 使用 rpm -qi 6 查找 SRPM | grep 来源
- 使用 rpm -i six-0.5.3-38 获取。fc35.src.rpm
结果:~/rpmbuild 中的源代码和规范文件
我修改测试新版本后需要填写的步骤如下:
- 构建新的 SRPM(模拟可以做到这一点吗?)
- 构建新的 RPM 并在本地安装它们(我将根据需要进行测试和重复)
- 报告错误和修复,可能作为拉取请求
如果需要,可以重新组织这些步骤。我知道 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)
告诉我你过得怎么样!
谢谢!
我有一个来自 Fedora 的旧游戏,在一个名为 6 的包中。它有一个错误,我想添加几个简单的功能。我在这里询问了过程的一部分,(参见
我真正希望的是一个完整的工作流程(希望只是一个命令列表并提及所涉及的目录)。
它会从这个开始(它可以工作,甚至可能是标准的):
- 使用 rpm -qi 6 查找 SRPM | grep 来源
- 使用 rpm -i six-0.5.3-38 获取。fc35.src.rpm
结果:~/rpmbuild 中的源代码和规范文件
我修改测试新版本后需要填写的步骤如下:
- 构建新的 SRPM(模拟可以做到这一点吗?)
- 构建新的 RPM 并在本地安装它们(我将根据需要进行测试和重复)
- 报告错误和修复,可能作为拉取请求
如果需要,可以重新组织这些步骤。我知道 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)
告诉我你过得怎么样!
谢谢!