Sys-Admin Forum

РЕШЕНО: Дублирующиеся пакеты в YUM (duplicate packages in yum)

Столкнулся с нестандартным случаем, при попытке обновить системные пакеты получаю куча ошибок связанных с тем, что имеются дублирующиеся пакеты.

В случае выполнения команды сканирования системных пакетов на дублирующиеся пакеты, я получил такой вывод:

# package-cleanup --dupes
kbd-misc-1.15.5-11.el7.noarch
kbd-misc-1.15.5-13.el7.noarch
cyrus-sasl-md5-2.1.26-17.el7.x86_64
cyrus-sasl-md5-2.1.26-21.el7.x86_64
iputils-20160308-10.el7.x86_64
iputils-20121221-6.el7_1.1.x86_64
libhbalinux-1.0.16-4.el7.x86_64
libhbalinux-1.0.17-2.el7.x86_64
totem-3.22.1-1.el7.x86_64
totem-3.8.2-5.el7.x86_64
numactl-libs-2.0.9-6.el7_2.x86_64
numactl-libs-2.0.9-5.el7_1.x86_64
libvirt-daemon-driver-nwfilter-1.2.8-16.el7_1.5.x86_64
libvirt-daemon-driver-nwfilter-3.2.0-14.el7_4.3.x86_64
rsyslog-8.24.0-12.el7.x86_64
libpurple-2.10.11-5.el7.x86_64
libpurple-2.10.7-22.el7.x86_64
libsndfile-1.0.25-10.el7.x86_64
libsndfile-1.0.25-9.el7.x86_64
libsndfile-1.0.25-9.el7.i686
libsndfile-1.0.25-10.el7.i686
abrt-2.1.11-48.el7.centos.x86_64
abrt-2.1.11-22.el7.centos.0.1.x86_64

Вывод не полный, но фактически было более 900 пакетов, которые конфликтовали между собой

Причина: На ПК более года не обновляли систему, затем решили это проделать, запустили команду yum update -y но ждать надоело и выключили принудительно ПК в процессе установки новых пакетов :facepalm:. Теоретически данный случай может произойти также в случае аварийного отключения электропитания.

Последствия: Дублирующиеся и конфликтующие старые пакеты с новыми. При этом система продолжала штатно работать. За исключением только, что не смогла загрузиться с обновлённого ядра.

Решение: В случае если таких пакетов не много то в Интернет источниках пишут, что данную проблему можно решить командой:

package-cleanup --cleandupes

Но в “моём” случае это не помогло и решалась проблема очень нудно и долго.

  1. Выполнял команду package-cleanup --dupes

  2. Выбираем пакеты, которые более старые и удаляем их:

rpm -e kbd-misc-1.15.5-11.el7.noarch cyrus-sasl-md5-2.1.26-17.el7.x86_64 
  1. В случае получения ошибки связанные с зависимостями с другими пакетами, выполняем принудительное удаление старого пакета из RPM базы:
rpm -e --nodeps --justdb abrt-2.1.11-22.el7.centos.0.1.x86_64
  1. По завершению данного процесса выполняем очистку кэша и пробуем обновить пакеты:
yum clean all && yum update -y

Спасибо! Возникла аналогичная ситуация - помогло.
Небольшая автоматизация:

  • сохраняем вывод в файл:
package-cleanup --dupes | sort | uniq > /tmp/fixit.tx
  • удаляем диагностические сообщения - оставляем только имена пакетов - они должны располагаться рядом, более старая версия - выше.

  • сохраним сценарий (вдруг пригодится!), например, как fixit.sh (chmod +x не забываем) :

#!/bin/bash
i=0
while read -t 64; do
  i=$((i+1))
  if (( i == 1 )); then
    rpm -e --nodeps $REPLY
  else
    echo "keep this version - $REPLY"
    i=0
  fi
done
  • и натравим на вход ему подготовленный файл:
./fixit.sh < /tmp/fixit.txt
1 Симпатия