Как удалить пакет в CentOS, не удаляя связанные с ним зависимости

Это странно, но такое иногда бывает нужно. Мне, например, потребовалось перейти с системной библиотеки libmysql на встроенную в PHP (MySQL Native Driver), т.е. ненадолго удалить одну из базовых библиотек PHP (php-mysql и php-mysqli), чего, конечно, испугались многие пакеты, имеющие PHP в зависимостях. Итак, похоже, yum не умеет удалять пакет без удаления его зависимостей, но мы обойдёмся и без yum.

Сначала опишу проблему более подробно на конкретном примере. Если в лоб попытаться установить новый нужный пакет (например, yum install php55w-mysqlnd), то менеджер пакетов yum будет ругаться на конфликт:

--> Processing Conflict: php55w-mysql-5.5.33-1.w6.x86_64 conflicts php55w-mysqlnd

Ок, а что если удалить сначала старый пакет? Сделаем yum remove php55w-mysql и увидим, что вслед за ним удалиться phpMyAdmin:

---> Package php55w-mysql.x86_64 0:5.5.33-1.w6 will be erased
--> Processing Dependency: php-mysqli for package: phpMyAdmin-4.0.10.14-1.el6.noarch
--> Processing Dependency: php-mysql >= 5.2.0 for package: phpMyAdmin-4.0.10.14-1.el6.noarch
--> Running transaction check
---> Package phpMyAdmin.noarch 0:4.0.10.14-1.el6 will be erased

Это нехорошо. Но пакет всё-таки можно удалить без удаления зависимостей.

Для этого сначала надо найти полное имя пакета: rpm -qa | grep "php55w-mysql"

В ответ получим что-то типа: php55w-mysql-5.5.33-1.w6.x86_64

Теперь, используя это имя, действуем: rpm -e --nodeps "php55w-mysql-5.5.33-1.w6.x86_64"

Никаких подтверждений у вас не спросят, пакет сразу и бесповоротно удалится.

Теперь снова попробуем установить новый пакет: yum install php55w-mysqlnd

Установка пойдёт нормально (конфликтовать-то новому пакету уже не с чем), разве что в процессе установки менеджер пакетов yum вам пожалуется, что без его ведома кто-то нехороший нарушил зависимости:

Warning: RPMDB altered outside of yum.
** Found 2 pre-existing rpmdb problem(s), 'yum check' output follows:
phpMyAdmin-4.0.10.14-1.el6.noarch has missing requires of php-mysql >= ('0', '5.2.0', None)
phpMyAdmin-4.0.10.14-1.el6.noarch has missing requires of php-mysqli

Однако работать всё будет. В том числе phpMyAdmin, который у нас НЕ удалялся.



Прокомментируйте: