fix failure to recompile with rpmrebuild and file conflicts between rpmrebuild and rpm-build

This commit is contained in:
dongyuzhen 2024-01-15 21:36:06 +08:00
parent a992c10f57
commit dbd36e98b9
3 changed files with 119 additions and 2 deletions

View File

@ -0,0 +1,50 @@
From b1ef9afb58b2a2ba2224d777a57ffbf0666eff3f Mon Sep 17 00:00:00 2001
From: lirui <lirui130@huawei.com>
Date: Thu, 28 Jan 2021 10:09:57 +0800
Subject: [PATCH] Add macros _binaries_in_noarch_packages_terminate_build and
_build_id_links
Some noarch packages use macro _binaries_in_noarch_packages_terminate_build to
package binary files. But when rpmrebuild can't read macro
_binaries_in_noarch_packages_terminate_build, it causes a problem, so add macro
_binaries_in_noarch_packages_terminate_build to the noarch package.
On the compilation environment, the macro _build_id_links is compat,and the
compiled package does not contain build-id. But during rpmrebuild, build-id
will be generated, but the buildroot directory is read-only, causing failure,
so set macro _build_id_links to none
---
rpmrebuild.sh | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/rpmrebuild.sh b/rpmrebuild.sh
index df48362..545b348 100755
--- a/rpmrebuild.sh
+++ b/rpmrebuild.sh
@@ -226,10 +226,19 @@ function RpmBuild
return 1
}
fi
- eval "$change_arch" $BUILDCMD --define "'buildroot $BUILDROOT'" "$RPMREBUILD_rpm_defines" -bb "$RPMREBUILD_rpm_verbose" "$RPMREBUILD_additional" "${FIC_SPEC}" || {
- Error "(RpmBuild) package '${RPMREBUILD_PAQUET}' $BuildFailed"
- return 1
- }
+
+ # Add macros %_binaries_in_noarch_packages_terminate_build to the noarch architecture
+ if [ "$pac_arch" = "noarch" ]; then
+ eval "$change_arch" $BUILDCMD --define "'buildroot $BUILDROOT'" --define "'_build_id_links none'" --define "'%_binaries_in_noarch_packages_terminate_build 0'" "$RPMREBUILD_rpm_defines" -bb "$RPMREBUILD_rpm_verbose" "$RPMREBUILD_additional" "${FIC_SPEC}" || {
+ Error "package '${RPMREBUILD_PAQUET}' $BuildFailed"
+ return 1
+ }
+ else
+ eval "$change_arch" $BUILDCMD --define "'buildroot $BUILDROOT'" --define "'_build_id_links none'" "$RPMREBUILD_rpm_defines" -bb "$RPMREBUILD_rpm_verbose" "$RPMREBUILD_additional" "${FIC_SPEC}" || {
+ Error "package '${RPMREBUILD_PAQUET}' $BuildFailed"
+ return 1
+ }
+ fi
return 0
}
--
2.33.0

View File

@ -1,6 +1,6 @@
Name: rpmrebuild Name: rpmrebuild
Version: 2.18 Version: 2.18
Release: 3 Release: 4
Summary: A tool to build a rpm file from the rpm database Summary: A tool to build a rpm file from the rpm database
License: GPLv2+ License: GPLv2+
URL: http://rpmrebuild.sourceforge.net URL: http://rpmrebuild.sourceforge.net
@ -8,9 +8,15 @@ Source0: https://downloads.sourceforge.net/rpmrebuild/%{name}-%{version}.
Patch6000: backport-Set-the-directory-mode-to-instead-of-omit.patch Patch6000: backport-Set-the-directory-mode-to-instead-of-omit.patch
Patch9000: Add-macros-_binaries_in_noarch_packages_terminate_bu.patch
Patch9001: use-backups-of-rpmbuild-and-rpmspec-to-avoid-conflicts.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch BuildArch: noarch
Requires: rpm grep bash cpio textutils rpm-build BuildRequires: rpm-build
Requires: grep bash cpio textutils
%define _binaries_in_noarch_packages_terminate_build 0
%description %description
%{name} allows to build an rpm file from an installed rpm, or from %{name} allows to build an rpm file from an installed rpm, or from
@ -36,6 +42,8 @@ install -d -p $RPM_BUILD_ROOT%{_mandir}/fr/man1/
mv $RPM_BUILD_ROOT%{_mandir}/fr_FR.UTF-8/man1/* $RPM_BUILD_ROOT%{_mandir}/fr/man1/ mv $RPM_BUILD_ROOT%{_mandir}/fr_FR.UTF-8/man1/* $RPM_BUILD_ROOT%{_mandir}/fr/man1/
rm -rf $RPM_BUILD_ROOT%{_mandir}/fr_FR.UTF-8/man1/ rm -rf $RPM_BUILD_ROOT%{_mandir}/fr_FR.UTF-8/man1/
cp /usr/bin/rpmbuild $RPM_BUILD_ROOT%{_bindir}/rpmbuild-rebuild
cp /usr/bin/rpmspec $RPM_BUILD_ROOT%{_bindir}/rpmspec-rebuild
%files %files
%defattr(-,root,root) %defattr(-,root,root)
@ -49,6 +57,8 @@ rm -rf $RPM_BUILD_ROOT%{_mandir}/fr_FR.UTF-8/man1/
%{_prefix}/lib/rpmrebuild/plugins/*.plug %{_prefix}/lib/rpmrebuild/plugins/*.plug
%{_prefix}/lib/rpmrebuild/locale/* %{_prefix}/lib/rpmrebuild/locale/*
%{_prefix}/lib/rpmrebuild/optional_tags.cfg %{_prefix}/lib/rpmrebuild/optional_tags.cfg
%{_bindir}/rpmbuild-rebuild
%{_bindir}/rpmspec-rebuild
%files help %files help
%defattr(-,root,root) %defattr(-,root,root)
@ -58,6 +68,9 @@ rm -rf $RPM_BUILD_ROOT%{_mandir}/fr_FR.UTF-8/man1/
%{_mandir}/fr/man1/*.gz %{_mandir}/fr/man1/*.gz
%changelog %changelog
* Mon Jan 15 2024 dongyuzhen <dongyuzhen@h-partners.com> - 2.18-4
- fix failure when recompiling noarch rpm and remove the require to rpm-build
* Mon Feb 13 2023 dongyuzhen <dongyuzhen@h-partners.com> - 2.18-3 * Mon Feb 13 2023 dongyuzhen <dongyuzhen@h-partners.com> - 2.18-3
- backport the patch from upstream - backport the patch from upstream

View File

@ -0,0 +1,54 @@
From 407ceacb5f5b987db692b48be9adc97d41f7544a Mon Sep 17 00:00:00 2001
From: lirui <lirui130@huawei.com>
Date: Mon, 26 Apr 2021 09:36:10 +0800
Subject: [PATCH] Use backups of rpmbuild and rpmspec to avoid conflicts
Because the rpmrebuild package contains the rpmbuild and rpmspec commands,
when you install the rpmrebuild and RPM -build packages at the same time,
the upgrade of one of the packages will fail due to the same name file conflict.
So rename the rpmbuild and rpmspec commands and package them.
---
rpmrebuild.sh | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/rpmrebuild.sh b/rpmrebuild.sh
index 545b348..efa6074 100755
--- a/rpmrebuild.sh
+++ b/rpmrebuild.sh
@@ -202,6 +202,9 @@ function RpmBuild
if [ -x /usr/bin/rpmbuild ]
then
BUILDCMD=/usr/bin/rpmbuild
+ elif [ -x /usr/bin/rpmbuild-rebuild ]
+ then
+ BUILDCMD=/usr/bin/rpmbuild-rebuild
else
BUILDCMD=rpm
@@ -251,11 +254,20 @@ function RpmFileName
QF_RPMFILENAME=$(eval "$change_arch" rpm "$RPMREBUILD_rpm_defines" --eval %_rpmfilename) || return
#Debug " QF_RPMFILENAME=$QF_RPMFILENAME"
# from generated specfile
- RPMFILENAME=$(eval "$change_arch" rpm "$RPMREBUILD_rpm_defines" --specfile --query --queryformat "${QF_RPMFILENAME}" "${FIC_SPEC}") || return
-
+ if [ -x /usr/bin/rpmspec ]
+ then
+ RPMFILENAME=$(eval $change_arch rpm "$RPMREBUILD_rpm_defines" --specfile --query --queryformat "${QF_RPMFILENAME}" "${FIC_SPEC}") || return
+ else
+ RPMFILENAME=$(eval $change_arch rpmspec-rebuild "$RPMREBUILD_rpm_defines" --query --queryformat "${QF_RPMFILENAME}" "${FIC_SPEC}") || return
+ fi
# workaround for redhat 6.x / rpm 3.x
local arch
- arch=$(eval "$change_arch" rpm "$RPMREBUILD_rpm_defines" --specfile --query --queryformat "%{ARCH}" "${FIC_SPEC}")
+ if [ -x /usr/bin/rpmspec ]
+ then
+ arch=$(eval $change_arch rpm "$RPMREBUILD_rpm_defines" --specfile --query --queryformat "%{ARCH}" "${FIC_SPEC}")
+ else
+ arch=$(eval $change_arch rpmspec-rebuild "$RPMREBUILD_rpm_defines" --query --queryformat "%{ARCH}" "${FIC_SPEC}")
+ fi
if [ "$arch" = "(none)" ]
then
Debug ' workaround for rpm 3.x'
--
2.33.0