From d0dc7e0b5c59a8410aeb632188efd44f45ee1f9b Mon Sep 17 00:00:00 2001 From: dongyuzhen Date: Mon, 15 Jan 2024 21:13:08 +0800 Subject: [PATCH] fix failure to recompile with rpmrebuild and file conflicts between rpmrebuild and rpm-build (cherry picked from commit 0769ea737c8338dec13e85a7aec77165e20fd091) --- ...ries_in_noarch_packages_terminate_bu.patch | 50 +++++++++++++++++ rpmrebuild.spec | 19 ++++++- ...build-and-rpmspec-to-avoid-conflicts.patch | 53 +++++++++++++++++++ 3 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 Add-macros-_binaries_in_noarch_packages_terminate_bu.patch create mode 100644 use-backups-of-rpmbuild-and-rpmspec-to-avoid-conflicts.patch diff --git a/Add-macros-_binaries_in_noarch_packages_terminate_bu.patch b/Add-macros-_binaries_in_noarch_packages_terminate_bu.patch new file mode 100644 index 0000000..8ae311a --- /dev/null +++ b/Add-macros-_binaries_in_noarch_packages_terminate_bu.patch @@ -0,0 +1,50 @@ +From b1ef9afb58b2a2ba2224d777a57ffbf0666eff3f Mon Sep 17 00:00:00 2001 +From: lirui +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 2da043e..8b7f33d 100755 +--- a/rpmrebuild.sh ++++ b/rpmrebuild.sh +@@ -216,10 +216,19 @@ function RpmBuild + return 1 + } + fi +- eval $change_arch $BUILDCMD --define "'buildroot $BUILDROOT'" $rpm_defines -bb $rpm_verbose $additional ${FIC_SPEC} || { +- Error "(RpmBuild) package '${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'" $rpm_defines -bb $rpm_verbose $additional ${FIC_SPEC} || { ++ Error "package '${PAQUET}' $BuildFailed" ++ return 1 ++ } ++ else ++ eval $change_arch $BUILDCMD --define "'buildroot $BUILDROOT'" --define "'_build_id_links none'" $rpm_defines -bb $rpm_verbose $additional ${FIC_SPEC} || { ++ Error "package '${PAQUET}' $BuildFailed" ++ return 1 ++ } ++ fi + + return 0 + } +-- +2.33.0 + diff --git a/rpmrebuild.spec b/rpmrebuild.spec index 19bf594..0b56728 100644 --- a/rpmrebuild.spec +++ b/rpmrebuild.spec @@ -1,6 +1,6 @@ Name: rpmrebuild Version: 2.16 -Release: 10 +Release: 11 Summary: A tool to build a rpm file from the rpm database License: GPLv2+ URL: http://rpmrebuild.sourceforge.net @@ -14,10 +14,15 @@ Patch9004: fix-cap-from-fs-does-not-work.patch Patch9005: fix-comment-missing-n-does-not-work.patch Patch9006: fix-r-does-not-work.patch Patch9007: fix-errors-found-from-shellcheck-scan.patch +Patch9008: Add-macros-_binaries_in_noarch_packages_terminate_bu.patch +Patch9009: use-backups-of-rpmbuild-and-rpmspec-to-avoid-conflicts.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) 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 %{name} allows to build an rpm file from an installed rpm, or from @@ -43,6 +48,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/ 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 %defattr(-,root,root) @@ -56,6 +63,8 @@ rm -rf $RPM_BUILD_ROOT%{_mandir}/fr_FR.UTF-8/man1/ %{_prefix}/lib/rpmrebuild/plugins/*.plug %{_prefix}/lib/rpmrebuild/locale/* %{_prefix}/lib/rpmrebuild/optional_tags.cfg +%{_bindir}/rpmbuild-rebuild +%{_bindir}/rpmspec-rebuild %files help %defattr(-,root,root) @@ -65,6 +74,12 @@ rm -rf $RPM_BUILD_ROOT%{_mandir}/fr_FR.UTF-8/man1/ %{_mandir}/fr/man1/*.gz %changelog +* Mon Jan 15 2024 dongyuzhen - 2.16-11 +- Type:bugfix +- CVE:NA +- SUG:NA +- DESC:fix failure when recompiling noarch rpm and remove the require to rpm-build + * Fri Jan 12 2024 dongyuzhen - 2.16-10 - Type:bugfix - CVE:NA diff --git a/use-backups-of-rpmbuild-and-rpmspec-to-avoid-conflicts.patch b/use-backups-of-rpmbuild-and-rpmspec-to-avoid-conflicts.patch new file mode 100644 index 0000000..74b6ff1 --- /dev/null +++ b/use-backups-of-rpmbuild-and-rpmspec-to-avoid-conflicts.patch @@ -0,0 +1,53 @@ +From 407ceacb5f5b987db692b48be9adc97d41f7544a Mon Sep 17 00:00:00 2001 +From: lirui +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 2da043e..5800cca 100755 +--- a/rpmrebuild.sh ++++ b/rpmrebuild.sh +@@ -192,6 +192,9 @@ function RpmBuild + if [ -x /usr/bin/rpmbuild ] + then + local BUILDCMD=/usr/bin/rpmbuild ++ elif [ -x /usr/bin/rpmbuild-rebuild ] ++ then ++ local BUILDCMD=/usr/bin/rpmbuild-rebuild + else + + local BUILDCMD=rpm +@@ -231,10 +234,19 @@ function RpmFileName + local QF_RPMFILENAME=$(eval $change_arch rpm $rpm_defines --eval %_rpmfilename) || return + #Debug " QF_RPMFILENAME=$QF_RPMFILENAME" + # from generated specfile +- RPMFILENAME=$(eval $change_arch rpm $rpm_defines --specfile --query --queryformat "${QF_RPMFILENAME}" ${FIC_SPEC}) || return +- ++ if [ -x /usr/bin/rpmspec ] ++ then ++ RPMFILENAME=$(eval $change_arch rpm $rpm_defines --specfile --query --queryformat "${QF_RPMFILENAME}" ${FIC_SPEC}) || return ++ else ++ RPMFILENAME=$(eval $change_arch rpmspec-rebuild $rpm_defines --query --queryformat "${QF_RPMFILENAME}" ${FIC_SPEC}) || return ++ fi + # workaround for redhat 6.x / rpm 3.x +- local arch=$(eval $change_arch rpm $rpm_defines --specfile --query --queryformat "%{ARCH}" ${FIC_SPEC}) ++ if [ -x /usr/bin/rpmspec ] ++ then ++ local arch=$(eval $change_arch rpm $rpm_defines --specfile --query --queryformat "%{ARCH}" ${FIC_SPEC}) ++ else ++ local arch=$(eval $change_arch rpmspec-rebuild $rpm_defines --query --queryformat "%{ARCH}" ${FIC_SPEC}) ++ fi + if [ "$arch" = "(none)" ] + then + Debug ' workaround for rpm 3.x' +-- +2.33.0 +