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