Установка Yum повреждает библиотеку на Redhat Ubi8

Я работаю над минимальным контейнером Redhat Ubi8. Моя цель — установить .rpm из файла вместе с его зависимостями. Ubi8-minimal предоставляет только те, которые не могут установить локальные .rpm. Поэтому я установил, используяmicrodnf install yumкоторый проходит нормально. Среди вывода это показывает, чтоlibmodulemdобновляется:

      Updating: libmodulemd;2.13.0-2.fc34;x86_64;Clients_Fedora_34_Fedora_34_Updates

Но при первом вызовеyumЯ получил:

      [root@7fc9c0e586b1]# yum --version
Traceback (most recent call last):
  File "/usr/bin/yum", line 57, 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: /lib64/libmodulemd.so.2: undefined symbol: g_ptr_array_extend_and_steal

После этогоmicrodnfтоже имеет эту проблему и больше не может использоваться:

      [root@7fc9c0e586b1]# microdnf --version
microdnf: symbol lookup error: /lib64/libmodulemd.so.2: undefined symbol: g_ptr_array_extend_and_steal

поэтому я больше не могу управлять никакими пакетами и установками.

Как я могу это исправить и заставить yum работать на Ubi8?

Подробности

Вот что я нахожу в свежем контейнере после запускаpodman --it --rm docker.io/redhat/ubi8-minimal bash

/etc/yum.repos.d/ubi.repo

Вот содержимое/etc/yum.repos.d/ubi.repo.

      [ubi-8-baseos]
name = Red Hat Universal Base Image 8 (RPMs) - BaseOS
baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi8/8/$basearch/baseos/os
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
gpgcheck = 1

[ubi-8-baseos-debug]
name = Red Hat Universal Base Image 8 (Debug RPMs) - BaseOS
baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi8/8/$basearch/baseos/debug
enabled = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
gpgcheck = 1

[ubi-8-baseos-source]
name = Red Hat Universal Base Image 8 (Source RPMs) - BaseOS
baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi8/8/$basearch/baseos/source/SRPMS
enabled = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
gpgcheck = 1

[ubi-8-appstream]
name = Red Hat Universal Base Image 8 (RPMs) - AppStream
baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi8/8/$basearch/appstream/os
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
gpgcheck = 1

[ubi-8-appstream-debug]
name = Red Hat Universal Base Image 8 (Debug RPMs) - AppStream
baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi8/8/$basearch/appstream/debug
enabled = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
gpgcheck = 1

[ubi-8-appstream-source]
name = Red Hat Universal Base Image 8 (Source RPMs) - AppStream
baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi8/8/$basearch/appstream/source/SRPMS
enabled = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
gpgcheck = 1

[ubi-8-codeready-builder]
name = Red Hat Universal Base Image 8 (RPMs) - CodeReady Builder
baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi8/8/$basearch/codeready-builder/os
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
gpgcheck = 1

[ubi-8-codeready-builder-debug]
name = Red Hat Universal Base Image 8 (Debug RPMs) - CodeReady Builder
baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi8/8/$basearch/codeready-builder/debug
enabled = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
gpgcheck = 1

[ubi-8-codeready-builder-source]
name = Red Hat Universal Base Image 8 (Source RPMs) - CodeReady Builder
baseurl = https://cdn-ubi.redhat.com/content/public/ubi/dist/ubi8/8/$basearch/codeready-builder/source/SRPMS
enabled = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
gpgcheck = 1

Это также единственный файл .repo в каталоге. Я не включал активно какие-либо другие репозитории.

переполис микроднф --включено

Вот результатmicrodnf repolist --enabledкоманда.

      repo id                                                                                            repo name
Clients_Extra-Software_Fedora                                                                      Fedora
Clients_Fedora_34_Fedora_34_Everything                                                             Fedora 34 Everything
Clients_Fedora_34_Fedora_34_Updates                                                                Fedora 34 Updates
Clients_RPM_Fusion_Fedora_34_RPM_Fusion_Free_OS                                                    RPM Fusion Free OS 34
Clients_RPM_Fusion_Fedora_34_RPM_Fusion_Free_Updates                                               RPM Fusion Free Updates 34
Clients_RPM_Fusion_Fedora_34_RPM_Fusion_Nonfree_OS                                                 RPM Fusion Nonfree OS 34
Clients_RPM_Fusion_Fedora_34_RPM_Fusion_Nonfree_Updates                                            RPM Fusion Nonfree Updates 34
Clients_Trinity_Desktop_Environment_Fedora_34_Trinity_Desktop_Environment_Fedora_34_noarch         Trinity Desktop Environment Fedora 34 noarch
Clients_Trinity_Desktop_Environment_Fedora_34_Trinity_Desktop_Environment_Fedora_34_x86_64         Trinity Desktop Environment Fedora 34 x86_64
ubi-8-appstream                                                                                    Red Hat Universal Base Image 8 (RPMs) - AppStream
ubi-8-baseos                                                                                       Red Hat Universal Base Image 8 (RPMs) - BaseOS
ubi-8-codeready-builder                                                                            Red Hat Universal Base Image 8 (RPMs) - CodeReady Builder

Это меня очень сбивает с толку, поскольку оно не соответствует содержимомуubi.repo.

2 ответа

Когда любая команда dnf приводит к неопределенному символу, ваш менеджер пакетов сильно неисправен. Тег fc34 подразумевает обновления на основе Fedora 34, которые не будут работать с дистрибутивом на основе el8. Узнайте, что использует репозитории Fedora, здесь.

Просмотрите документацию, чтобы получить подсказки о том, как запустить полную команду dnf в контейнере. RHEL 8 при создании контейнеров использует установку yum в функцию chroot, чтобы делать это даже с микроконтейнерами. От хостера:

      yum install \
    --installroot $micromount \
    --releasever 8 \
    --setopt install_weak_deps=false \
    --nodocs -y \
    httpd

Где$micromountэто смонтированная корневая файловая система контейнера,--releasever 8это el-версия контейнера, иhttpdэто пакет, который вы хотите установить. Также восстановите установку dnf, возможно, с помощьюyum reinstall libmodulemd microdnf

Благодаря подсказкам Джона Маховальда , указывающим на участие репозиториев fc34, обходным решением является исключение репозиториев Fedora при установке:

      microdnf install --disablerepo="Clients_*" yum

Это приводит к рабочемуyumмонтаж:

      [root@4f6b589029d5]# yum --version
4.7.0
  Installed: dnf-0:4.7.0-8.el8.noarch at Mon Aug 22 06:56:42 2022
  Built    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> at Fri Mar 18 15:21:28 2022

  Installed: rpm-0:4.14.3-23.el8.x86_64 at Tue Jul 26 12:26:21 2022
  Built    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> at Tue Apr  5 18:38:09 2022

Причиной, по которой это необходимо в первую очередь, является взаимодействие контейнера сsubscription-managerхост-системы, которая проецирует информацию о подписке в работающий контейнер. Однако, кроме упоминаний других пользователей и моего собственного опыта, я не нашел никакой первичной документации по этому поводу.

Другие вопросы по тегам