Пакет установлен и не установлен одновременно

Пакет установлен и не установлен одновременно

Некоторое время назад я попытался установить Steam на свой сервер CentOS 5 и перепробовал почти все, что нашел в Интернете, и, похоже, мне удалось оставить libstdc++ установленным и не установленным одновременно.

CPanel не может обновиться, так как не находит нужную установленную версию, а yum не может установить ее, так как она уже установлена.

Как мне исправить эту ситуацию и достичь стабильного состояния?

# yum install libstdc++-4.1.2-55.el5
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * contrib: mirror.wiredtree.com
addons                                                   | 1.9 kB     00:00
base                                                     | 1.1 kB     00:00
centosplus                                               | 1.9 kB     00:00
contrib                                                  | 1.9 kB     00:00
extras                                                   | 2.1 kB     00:00
updates                                                  | 1.9 kB     00:00
wiredtree                                                |  951 B     00:00
Excluding Packages in global exclude list
Finished
Setting up Install Process
Package matching libstdc++-4.1.2-55.el5.i386 already installed. Checking for update.
Nothing to do

# yum remove libstdc++-4.1.2-55.el5
Loaded plugins: fastestmirror
Setting up Remove Process
No Match for argument: libstdc++-4.1.2-55.el5
Loading mirror speeds from cached hostfile
 * contrib: mirror.wiredtree.com
addons                                                   | 1.9 kB     00:00
base                                                     | 1.1 kB     00:00
centosplus                                               | 1.9 kB     00:00
contrib                                                  | 1.9 kB     00:00
extras                                                   | 2.1 kB     00:00
updates                                                  | 1.9 kB     00:00
wiredtree                                                |  951 B     00:00
Excluding Packages in global exclude list
Finished
Package(s) libstdc++-4.1.2-55.el5 available, but not installed.
No Packages marked for removal


# yum reinstall libstdc++-4.1.2-55.el5
Loaded plugins: fastestmirror
Setting up Reinstall Process
Loading mirror speeds from cached hostfile
 * contrib: mirror.wiredtree.com
addons                                                   | 1.9 kB     00:00
base                                                     | 1.1 kB     00:00
centosplus                                               | 1.9 kB     00:00
contrib                                                  | 1.9 kB     00:00
extras                                                   | 2.1 kB     00:00
updates                                                  | 1.9 kB     00:00
wiredtree                                                |  951 B     00:00
Excluding Packages in global exclude list
Finished
No Match for argument: libstdc++-4.1.2-55.el5
Package(s) libstdc++-4.1.2-55.el5 available, but not installed.
Nothing to do

# yum --showduplicates list libstdc++ | expand
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * contrib: mirror.wiredtree.com
Excluding Packages in global exclude list
Finished
Installed Packages
libstdc++.i386                      4.3.2-7                            installed
Available Packages
libstdc++.i386                      4.1.2-55.el5                       base

решение1

Благодаря Энтони Гейгану, который указал мне правильное направление, я смог найти работающее решение.

rpm -e --justdb --nodeps libstdc++

Это позволит удалить пакет из базы данных, не трогая файлы, после чего все yum installбудет работать просто.

решение2

Ради интереса я бы сначала попробовал удалить пакет с помощью rpmкоманды:

rpm -e libstdc++

Однако я подозреваю, что rpmвнутренняя база данных повреждена и указанная выше команда не сработает, поэтому я бы попробовал перестроить ее базу данных с помощью:

rpm --rebuilddb

решение3

Это может произойти на x86_64 и multilib пакете. yum remove libstdc++пытается удалить 64-битную версию, но она не установлена. Поэтому в такой ситуации вам следует обратиться к пакету с arch. То есть:

yum remove libstdc++-4.1.2-55.el5.i386

решение4

У меня была похожая ситуация на моем хостере.

# yum --showduplicates list coreutils-libs

вернул две версии одного и того же пакета, по-видимому, установленные одновременно.

Installed Packages
coreutils-libs.x86_64                  8.4-37.el6_7.3                 @updates
coreutils-libs.x86_64                  8.4-43.el6                     installed
Available Packages
coreutils-libs.x86_64                  8.4-43.el6                     base

Когда я попробовал

# yum remove coreutils-libs

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

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

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

В моем случае я также мог видеть, что у меня былоcoreutils-8.4-37.el6_7.3пакет установлен, поэтому релиз -37.el6_7.3, вероятно, был правильным (т.е. подлежащим сохранению).

Когда я сказалнямчтобы удалить другой

# yum remove coreutils-libs-8.4-43.el6

все прошло без ошибок, и база данных RPM снова стала согласованной.

Связанный контент