Как удалить пакет в 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, который у нас НЕ удалялся.