apt-get больше не работает после удаления папок ранее установленного приложения вручную

Все выходные я изо всех сил пытался обновить существующую базу данных postgresql с версии 8.4 до 9.1. У меня есть (были) обе версии баз данных после того, как я обновил свою ОС с 10.0.4 до 12.04.

Я, наконец, разозлился, и в момент истечения срока суда я принудительно удалил все 8.4 связанные файлы с моей машины, используя:

find / -type d -name 8.4 2>/dev/null | xargs rm -rf {}

Я решил, что лучше удалено это было бы `apt-get remove postgresql-8.4 '

Хорошо, когда я попробовал это, apt-get сообщил:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  postgresql-8.4
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 15.5 MB disk space will be freed.
Do you want to continue [Y/n]? y
(Reading database ... 304184 files and directories currently installed.)
Removing postgresql-8.4 ...
find: `/usr/share/postgresql/8.4/tsearch_data': No such file or directory
dpkg: error processing postgresql-8.4 (--remove):
 subprocess installed pre-removal script returned error exit status 1
Errors were encountered while processing:
 postgresql-8.4
E: Sub-process /usr/bin/dpkg returned an error code (1)

Как мне удалить postgresql 8.4 с моей машины?

[[Редактировать]]

После того, как я попробовал apt-get install --reinstall postgresql-8.4, я получаю следующую ошибку:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  oidentd ident-server
The following NEW packages will be installed:
  postgresql-8.4
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/5,599 kB of archives.
After this operation, 15.5 MB of additional disk space will be used.
Selecting previously unselected package postgresql-8.4.
(Reading database ... 304010 files and directories currently installed.)
Unpacking postgresql-8.4 (from .../postgresql-8.4_8.4.14-0ubuntu12.04.2_amd64.deb) ...
Setting up postgresql-client-8.4 (8.4.14-0ubuntu12.04.2) ...
update-alternatives: error: alternative path /usr/share/postgresql/8.4/man/man1/psql.1.gz doesn't exist.
dpkg: error processing postgresql-client-8.4 (--configure):
 subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of postgresql-8.4:
 postgresql-8.4 depends on postgresql-client-8.4; however:
  Package postgresql-client-8.4 is not configured yet.
dpkg: error processing postgresql-8.4 (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
                                                                                                          Errors were encountered while processing:
 postgresql-client-8.4
 postgresql-8.4
E: Sub-process /usr/bin/dpkg returned an error code (1)
0
задан 19 November 2012 в 00:47

4 ответа

Хорошо, это было действительно, ДЕЙСТВИТЕЛЬНО неприятно, потому что там есть гнездо зависимостей, которое просто не исчезнет с обычным циклом очистки apt-get, установки apt-get -f и т. Д. Единственный способ обойти это (Я воссоздал вашу проблему в виртуальной машине и протестировал ее) просто для того, чтобы поместить туда каталог, от которого в первую очередь избавится apt.

root@yourbox:/# mkdir -p /usr/share/postgresql/8.4/tsearch_data
root@yourbox:/# apt-get purge postgresql-8.4
root@yourbox:/# apt-get autoremove

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

0
ответ дан 19 November 2012 в 00:47

Итак, учитывая, что простое решение не работает, вот то, которое требует немного больше работы и объяснений, но имеет больше шансов на успех.

apt в настоящий момент очень смущен вашими пакетами postgres. Настолько смущенный, что нам нужно сделать его еще более запутанным.

При установке / удалении пакетов можно запускать определенные сценарии, например, сценарии после установки, предварительной установки и т. Д., И они находятся в /var/lib/dpkg/info. Чтобы удаление работало даже в случае сбоя этих сценариев из-за того, что вы испортили систему, вы можете добавить строку с надписью exit 0 сразу после первой строки в каждом из этих сценариев для затронутых пакетов. Не редактируйте другие скрипты.

Удаление с помощью apt-get remove --purge будет работать, насколько это возможно, но это оставит некоторый беспорядок. Чтобы удалить этот беспорядок, вы должны переустановить пакеты, которые вы удалили, используя стерилизованные сценарии postrm / prerm, и на этот раз удалить их должным образом.

0
ответ дан 19 November 2012 в 00:47

Чтобы удалить postgresql и начать с нуля, это сработало для меня:
Список всех установленных пакетов postgresql.

dpkg -l | grep post  

Затем apt-get purge все пакеты postgresql, возвращенные вышеуказанной командой:
Пример:

apt-get purge postgresql postgresql-client postgresql-client-common postgresql-common postgresql-contrib postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6  
0
ответ дан 19 November 2012 в 00:47

Лучше начать с переустановки 8.4:

sudo apt-get install --reinstall postgresql-8.4

Затем вы можете удалить ее с помощью

sudo apt-get remove --purge postgresql-8.4

Если переустановка не удалась, покажите нам ошибку.

0
ответ дан 19 November 2012 в 00:47

Другие вопросы по тегам:

Похожие вопросы: