* [PATCH 1/2] lib/oe/package_manager: update default rpm config %_prefer_color
2020-05-08 2:30 [V2][PATCH 0/2] update default rpm prefer_color Changqing Li
@ 2020-05-08 2:30 ` Changqing Li
2020-05-08 2:30 ` [PATCH 2/2] rpm: fix file conflicts for MIPS64 N32 Changqing Li
2020-05-08 3:02 ` ✗ patchtest: failure for update default rpm prefer_color Patchwork
2 siblings, 0 replies; 4+ messages in thread
From: Changqing Li @ 2020-05-08 2:30 UTC (permalink / raw)
To: openembedded-core
From: Changqing Li <changqing.li@windriver.com>
* %_prefer_color is used by rpm to determine which color's ELF file
is preferred to be installed.
Here are file colors:
0 is unknown or other
1 is Elf32
2 is Elf64
4 is MIPS64 n32 (this color is added by oe-core's patch)
if default value set to 7, all colors are preferred color, always
be last-in-wins.
For this scenario, when we have 64bits python3 installed first,
then install 32bits python3 later, 64bits python3 will be overwrited,
and sys.path will point to /usr/lib, not /usr/lib64, this may cause
some python3 modules not work. so fixed by remove setting of default
value 7, and use default value 2 of rpm
* other distro like fedora also use the default %_prefer_color 2
Signed-off-by: Changqing Li <changqing.li@windriver.com>
---
meta/lib/oe/package_manager.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py
index b066041..c055d2b 100644
--- a/meta/lib/oe/package_manager.py
+++ b/meta/lib/oe/package_manager.py
@@ -805,8 +805,6 @@ class RpmPM(PackageManager):
open(platformconfdir + "macros", 'w').write("%_transaction_color 7\n")
if self.d.getVar('RPM_PREFER_ELF_ARCH'):
open(platformconfdir + "macros", 'a').write("%%_prefer_color %s" % (self.d.getVar('RPM_PREFER_ELF_ARCH')))
- else:
- open(platformconfdir + "macros", 'a').write("%_prefer_color 7")
if self.d.getVar('RPM_SIGN_PACKAGES') == '1':
signer = get_signer(self.d, self.d.getVar('RPM_GPG_BACKEND'))
--
2.7.4
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/2] rpm: fix file conflicts for MIPS64 N32
2020-05-08 2:30 [V2][PATCH 0/2] update default rpm prefer_color Changqing Li
2020-05-08 2:30 ` [PATCH 1/2] lib/oe/package_manager: update default rpm config %_prefer_color Changqing Li
@ 2020-05-08 2:30 ` Changqing Li
2020-05-08 3:02 ` ✗ patchtest: failure for update default rpm prefer_color Patchwork
2 siblings, 0 replies; 4+ messages in thread
From: Changqing Li @ 2020-05-08 2:30 UTC (permalink / raw)
To: openembedded-core
From: Changqing Li <changqing.li@windriver.com>
The following error occurred when prefer_color set to 2:
Error: Transaction check error:
file /sbin/ldconfig conflicts between attempted installs of
ldconfig-2.31+git0+71f2b249a2-r0.mips64_n32 and
lib32-ldconfig-2.31+git0+71f2b249a2-r0.mips32r2
file /usr/bin/gencat conflicts between attempted installs of
lib32-libc6-utils-2.31+git0+71f2b249a2-r0.mips32r2
...
This was because:
transactions_color = 001 (ELF32) & 010 (ELF64) & 100 (ELF32 N32 MIPS64)
FColor = Current file color (001) & transaction_color (111)
oFcolor = Previous file color (100) & transaction_color (111)
when "neither preferred" happened, handled as conflicts. this is too
restrictive for three way conflicts(mips64/mips64 n32/mips(32)).
Fixed by perform a 'last-in-wins' resolution when "neither is preferred".
refer:
https://github.com/rpm-software-management/rpm/issues/193
https://git.openembedded.org/openembedded-core/commit/meta/recipes-devtools/rpm?id=36c225704daa58b98a4b7f2ef315eb944d8628b5
Signed-off-by: Changqing Li <changqing.li@windriver.com>
---
...ction.c-fix-file-conflicts-for-MIPS64-N32.patch | 58 ++++++++++++++++++++++
meta/recipes-devtools/rpm/rpm_4.14.2.1.bb | 1 +
2 files changed, 59 insertions(+)
create mode 100644 meta/recipes-devtools/rpm/files/0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch
diff --git a/meta/recipes-devtools/rpm/files/0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch b/meta/recipes-devtools/rpm/files/0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch
new file mode 100644
index 0000000..b515075
--- /dev/null
+++ b/meta/recipes-devtools/rpm/files/0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch
@@ -0,0 +1,58 @@
+From 1ed066fc6fa7d7afffe3545c4e3ea937529e6c49 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Thu, 7 May 2020 17:40:58 +0800
+Subject: [PATCH] lib/transaction.c: fix file conflicts for MIPS64 N32
+
+This patch is from:
+https://github.com/rpm-software-management/rpm/issues/193
+
+Error: Transaction check error:
+ file /sbin/ldconfig conflicts between attempted installs of
+ldconfig-2.31+git0+71f2b249a2-r0.mips64_n32 and
+lib32-ldconfig-2.31+git0+71f2b249a2-r0.mips32r2
+...
+
+This was because:
+transactions_color = 001 (ELF32) & 010 (ELF64) & 100 (ELF32 N32 MIPS64)
+FColor = Current file color (001) & transaction_color (111)
+oFcolor = Previous file color (100) & transaction_color (111)
+
+In handleColorConflict, it only deal with conditons "new preferred" or
+"old preferred". But not deal with the situation where neither is the
+preferred type. so for tri-lib system, like mips64/mips64 n32/mips(32),
+"Transaction check error" occurred.
+
+Fixed by performing a 'last-in-wins' resolution when "neither is preferred".
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ lib/transaction.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/lib/transaction.c b/lib/transaction.c
+index 67b9db5..82386b8 100644
+--- a/lib/transaction.c
++++ b/lib/transaction.c
+@@ -391,7 +391,18 @@ static int handleColorConflict(rpmts ts,
+ rpmfsSetAction(ofs, ofx, FA_CREATE);
+ rpmfsSetAction(fs, fx, FA_SKIPCOLOR);
+ rConflicts = 0;
+- }
++ }else {
++ /*
++ * If neither is already skipped, we skip the old one, and
++ * install the new one (last in wins).
++ */
++ if (ofs && !XFA_SKIPPING(rpmfsGetAction(ofs, ofx)) &&
++ fs && !XFA_SKIPPING(rpmfsGetAction(fs, fx))) {
++ rpmfsSetAction(ofs, ofx, FA_SKIPCOLOR);
++ rpmfsSetAction(fs, fx, FA_CREATE);
++ }
++ rConflicts = 0;
++ }
+ }
+ }
+
+--
+2.7.4
+
diff --git a/meta/recipes-devtools/rpm/rpm_4.14.2.1.bb b/meta/recipes-devtools/rpm/rpm_4.14.2.1.bb
index 17255dc..3e2c6d1 100644
--- a/meta/recipes-devtools/rpm/rpm_4.14.2.1.bb
+++ b/meta/recipes-devtools/rpm/rpm_4.14.2.1.bb
@@ -44,6 +44,7 @@ SRC_URI = "git://github.com/rpm-software-management/rpm;branch=rpm-4.14.x \
file://0001-mono-find-provides-requires-do-not-use-monodis-from-.patch \
file://0001-Rip-out-partial-support-for-unused-MD2-and-RIPEMD160.patch \
file://0001-rpmplugins.c-call-dlerror-prior-to-dlsym.patch \
+ file://0001-lib-transaction.c-fix-file-conflicts-for-MIPS64-N32.patch \
"
PE = "1"
--
2.7.4
^ permalink raw reply related [flat|nested] 4+ messages in thread