Вопрос или проблема
Я использую Centos 6.2 x86_64
Пытаюсь установить ruby 2.1.2
---> Пакет libselinux-devel.x86_64 0:2.0.94-5.2.el6 будет установлен
--> Обработка зависимости: libsepol-devel >= 2.0.32-1 для пакета: libselinux-devel-2.0.94-5.2.el6.x86_64
--> Обработка зависимости: pkgconfig(libsepol) для пакета: libselinux-devel-2.0.94-5.2.el6.x86_64
---> Пакет zlib.i686 0:1.2.3-29.el6 будет установлен
--> Запуск проверки транзакции
---> Пакет keyutils-libs.i686 0:1.4-3.el6 будет установлен
---> Пакет libselinux.i686 0:2.0.94-5.2.el6 будет установлен
---> Пакет libsepol-devel.x86_64 0:2.0.41-4.el6 будет установлен
---> Пакет nss-softokn-freebl.i686 0:3.12.9-11.el6 будет установлен
--> Завершено разрешение зависимостей
Ошибка: Защищенные версии multilib: openssl-1.0.0-20.el6.i686 != openssl-1.0.1e-16.el6_5.7.x86_64
Вы можете попробовать использовать --skip-broken, чтобы обойти проблему
Вы можете попробовать выполнить: rpm -Va --nofiles --nodigest
Если я получу установленные пакеты:
[root@test tmp]# rpm -qa | grep openssl
openssl-1.0.1e-16.el6_5.7.x86_64
openssl098e-0.9.8e-17.el6.centos.x86_64
Я не видел openssl-1.0.0-20.el6.i686
Как я могу его удалить?
Ошибка означает, что вы пытаетесь установить другую версию для одной архитектуры, чем та, что у вас установлена для другой. Решение состоит в том, чтобы обновить текущую версию вашего пакета до версии, которая будет установлена для другой архитектуры. В вашем случае это означает понижение openssl-1.0.1e-16.el6_5.7.x86_64
до openssl-1.0.0-20.el6.x86_64
, затем попробуйте команду еще раз, но это не оптимально. Вместо этого, возможно, у вас отключены некоторые репозитории, которые нужно включить, чтобы получить правильную версию пакета для обеих архитектур.
Ответ или решение
Прежде чем перейти к решению возникшей проблемы с библиотеками multilib, важно понимать, что именно представляет собой ошибка "Protected multilib versions". Данная ошибка возникает, когда происходит конфликт между версиями одного и того же пакета, которые устанавливаются для различных архитектур системы, например, i686 (32-бит) и x86_64 (64-бит). Эти конфликты вызывают проблемы при установке или обновлении пакетов и требуют тщательного рассмотрения и разрешения.
Теория: Понимание проблемы
CentOS — один из популярных дистрибутивов Linux, и его система управления пакетами (RPM и yum) должна справляться с установкой пакетов для различных архитектур. Multilib — это механизм, позволяющий установку 32-битных и 64-битных пакетов на одной системе, что бывает необходимо для обеспечения совместимости с некоторыми 32-битными приложениями на 64-битной архитектуре.
В вашем случае, при попытке установить Ruby 2.1.2, система обнаружила конфликт между двумя версиями openssl: openssl-1.0.0-20.el6.i686
и openssl-1.0.1e-16.el6_5.7.x86_64
. Проблема заключается в том, что вы одновременно пытаетесь иметь разные версии openssl для различных архитектур, что является недопустимым в рамках одного RPM-системного окружения.
Пример: Реализация поиска решения
Из предоставленных логов видно, что установлены следующие пакеты openssl:
openssl-1.0.1e-16.el6_5.7.x86_64
openssl098e-0.9.8e-17.el6.centos.x86_64
Заметьте, что версия i686 очевидно не установлена на систему, или же она установлена, но не отображается в результатах rpm -qa | grep openssl
. Это значит, что либо нужен дополнительный поиск, либо какой-то неявный конфликт скрыт от глаз.
Приложение: Практические шаги для решения проблемы
-
Поиск и удаление проблемного пакета:
Выполните более детальный поиск пакетов, чтобы удостовериться, что проблемная версия действительно существует на системе или была некорректно указана.
rpm -qa | grep openssl rpm -qa | grep i686
Если вы найдете
openssl-1.0.0-20.el6.i686
, его нужно удалить:sudo rpm -e openssl-1.0.0-20.el6.i686
-
Проверка и обновление репозиториев:
Убедитесь, что у вас включены все необходимые репозитории для правильного обновления пакетов. Иногда возможно, что нужные репозитории, предоставляющие необходимые версии пакетов, отключены.
sudo yum repolist all # Для включения: sudo yum-config-manager --enable <название_репозитория>
-
Обновление или переустановка проблемных пакетов:
После того, как вы удалили проблемы и обеспечили доступность необходимых репозиториев, выполните установку или обновление openssl и зависимостей:
sudo yum update openssl sudo yum install openssl.i686
Если установка пакетов приводит к другим конфликтам, возможно придется использовать параметр
--skip-broken
, но это скорее временное решение. Лучше все-таки устранить конфликт, чтобы система оставалась стабильной. -
Проверка корректности установки:
Повторно проверьте установленные пакеты и их версии, чтобы убедиться, что все установлено правильно и конфликты устранены:
rpm -qa | grep openssl
Заключение
Процесс устранения конфликтов зависимостей multilib требует внимательности и точности, поскольку ошибки могут повлиять на стабильность всей системы. В вашем случае, уделите особое внимание совместимости версий и настройке репозиториев. Регулярное обновление системы и установка пакетов из доверенных источников значительно снижает риск повторного возникновения подобных ситуаций.