在 linux 中修补 lksctp RPM

Patching lksctp RPM in linux

我正在使用自家定制的 Linux,它是 Oracle Linux 6 的衍生产品,但我需要从 lksctp-tools-1.0.17-2 中获取所有补丁。el7.src.rpm 并在我的 lksctp-tools-1.0.11-1 rpm 包中打补丁。

我发现1.0.17-2.el7版本有两个新补丁:

lksctp-tools-1.0.17-sctp_status-fix-hostname-resolution.patch
lksctp-tools-1.0.6-libdir.patch

我将上述补丁复制到我构建构建环境的补丁目录中,在构建新 RPM 的过程中,我遇到了最后一个补丁失败的问题:

Patch #5 (lksctp-tools-1.0.17-sctp_status-fix-hostname-resolution.patch):
+ /bin/cat /workdirs/BuildUser/build/RPM/SOURCES/lksctp-tools-1.0.17-sctp_status-fix-hostname-resolution.patch
+ /usr/bin/patch -p1 --fuzz=0
patching file src/apps/sctp_status.c
+ echo 'Patch #6 (lksctp-tools-1.0.6-libdir.patch):'
Patch #6 (lksctp-tools-1.0.6-libdir.patch):
+ /bin/cat /workdirs/BuildUser/build/RPM/SOURCES/lksctp-tools-1.0.6-libdir.patch
+ /usr/bin/patch -p1 --fuzz=0
patching file src/withsctp/withsctp.in
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file src/withsctp/withsctp.in.rej
error: Bad exit status from /workdirs/BuildUser/tmp/rpm-tmp.nJHnek (%prep)

我已经在我的规范文件中提到了这些补丁:

Name: lksctp-tools
Version: %{pack_version}
Release: ~RELEASE~
License: LGPL
Group: System Environment/Libraries
URL: http://lksctp.sourceforge.net
Source0: %{name}-%{file_version}.tar.gz
Patch0: lksctp-tools-linux-3.4.38-sctp.patch
Patch1: lksctp-tools-sctp-per-association-stats.patch
Patch2: lksctp-tools-fix-deprecated-SO_RCVBUF-SO_SNDBUF-testcase.patch
Patch3: lksctp-tools-Avoid-using-file-descriptor-0-to-get-ENOTSOCK.patch
Patch4: lksctp-tools-test_fragments-increase-message-size-since-it-succeeds.patch
Patch5: lksctp-tools-1.0.17-sctp_status-fix-hostname-resolution.patch
Patch6: lksctp-tools-1.0.6-libdir.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
BuildRequires: gcc
BuildRequires: libtool, automake, autoconf
%prep
%setup -q -n %{name}-%{file_version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1

补丁失败,因为源不匹配。在使用 rpm 实现自动化之前,确保您可以自己手动应用补丁,按照规范文件 中给出的顺序。另一个可能的问题 - 较新的源 RPM 是否用其中一个新补丁替换了旧补丁?