Установка 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
хост-системы, которая проецирует информацию о подписке в работающий контейнер. Однако, кроме упоминаний других пользователей и моего собственного опыта, я не нашел никакой первичной документации по этому поводу.