Bug 2327269

Summary: Installing and removing gpgme1.22 from epel breaks dnf
Product: [Fedora] Fedora EPEL Reporter: Juho Kuisma <juho.kuisma+redhat>
Component: gpgme1.22Assignee: Troy Dawson <tdawson>
Status: ASSIGNED --- QA Contact:
Severity: high Docs Contact:
Priority: unspecified    
Version: epel9CC: tdawson, vpvainio
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Juho Kuisma 2024-11-19 10:25:11 UTC
Description of problem:

Installing and removing gpgme1.22 from epel leaves broken symlinks in place, which break all dnf functionality.

Version-Release number of selected component (if applicable):

1.22.0-2.el9

How reproducible:

Always.

Steps to Reproduce:

$ sudo dnf install epel-release
$ sudo dnf install gpgme1.22
$ dnf --version
$ sudo dnf remove gpgme1.22
$ dnf --version

Actual results:

$ dnf --version
Traceback (most recent call last):
  File "/usr/bin/dnf", line 61, in <module>
    from dnf.cli import main
  File "/usr/lib/python3.9/site-packages/dnf/__init__.py", line 30, in <module>
    import dnf.base
  File "/usr/lib/python3.9/site-packages/dnf/base.py", line 29, in <module>
    import libdnf.transaction
  File "/usr/lib64/python3.9/site-packages/libdnf/__init__.py", line 12, in <module>
    from . import conf
  File "/usr/lib64/python3.9/site-packages/libdnf/conf.py", line 13, in <module>
    from . import _conf
ImportError: libgpgme.so.11: cannot open shared object file: No such file or directory

Expected results:

$ dnf --version
$ echo $?
0

Additional info:

Originally ran into this on a dev almalinux 9 box, but verified that I can reproduce this on rhel9 as well.

dnf tries to open:

$ sudo strace -f dnf --version 2>&1 | grep gpgme
openat(AT_FDCWD, "/lib64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/glibc-hwcaps/x86-64-v3/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/glibc-hwcaps/x86-64-v2/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/tls/x86_64/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/tls/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/tls/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/tls/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/x86_64/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib64/glibc-hwcaps/x86-64-v3/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib64/glibc-hwcaps/x86-64-v2/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib64/tls/x86_64/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib64/tls/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib64/tls/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib64/tls/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib64/x86_64/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib64/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib64/x86_64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib64/libgpgme.so.11", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "ImportError: libgpgme.so.11: can"..., 87ImportError: libgpgme.so.11: cannot open shared object file: No such file or directory

This can be fixed manually at least with:

$ sudo su
$ cd /usr/lib64
$ unlink libgpgme.so.11
$ ln -s libgpgme.so.11.24.1 libgpgme.so.11

Cheers,
Juho

Comment 1 Troy Dawson 2024-11-19 14:24:21 UTC
Well ... that's not good.
Thank you for letting me know.