apt-get não funciona mais depois de excluir manualmente as pastas de um aplicativo instalado anteriormente

0

Eu tenho lutado todo o final de semana para atualizar um banco de dados postgresql existente da versão 8.4 para a 9.1. Eu tenho (tinha) as duas versões de bancos de dados depois que atualizei meu sistema operacional de 10.0.4 para 12.04.

Eu finalmente fiquei exasperado e, em um momento de julgamento, removi à força todos os 8,4 arquivos relacionados da minha máquina, usando:

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

Eu decidi que a melhor maneira de removê-lo seria 'apt-get remove postgresql-8.4'

Bem, quando tentei isso, o apt-get reportou:

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)

Como faço para limpar o postgresql 8.4 da minha máquina?

[[Editar]]

Depois que eu tentei apt-get install --reinstall postgresql-8.4 , recebo o seguinte erro:

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)
    
por Homunculus Reticulli 18.11.2012 / 21:47

4 respostas

3

OK, isso foi realmente desagradável porque há um ninho de dependência lá que simplesmente não vai embora com a rodada usual de limpeza do apt-get, apt-get -f install, etc. O único caminho em volta deste (Eu recriei seu problema em uma VM e testei) é apenas colocar um diretório ali para o apt se livrar de em primeiro lugar.

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

Com um diretório vazio para o apt to remove, tanto a limpeza inicial do pacote pai quanto a remoção automática dos pacotes filhos foram concluídas sem erros na minha VM.

    
por Jim Salter 18.11.2012 / 22:11
1

Então, dado que a solução fácil não funciona, aqui está uma que requer um pouco mais de trabalho e explicação, mas tem uma chance maior de sucesso.

apt no momento é muito confuso sobre seus pacotes postgres. Tão confuso até que precisamos deixar ainda mais confuso.

Ao instalar / remover pacotes, certos scripts podem ser executados, são scripts de pós-instalação, pré-instalação etc. e residem em /var/lib/dpkg/info . Para fazer o trabalho de remoção mesmo quando esses scripts falham porque você atrapalhou seu sistema, você pode adicionar uma linha que diz exit 0 logo após a primeira linha em cada um desses scripts para os pacotes afetados. Não edite outros scripts.

A remoção com apt-get remove --purge irá funcionar no que diz respeito ao apt, mas isso deixará alguma bagunça para trás. Para remover essa bagunça, você deve reinstalar os pacotes removidos usando os scripts postrm / prerm castrados e removê-los adequadamente desta vez.

    
por Dennis Kaarsemaker 18.11.2012 / 22:16
0

É melhor começar por reinstalar o 8.4:

sudo apt-get install --reinstall postgresql-8.4

Depois, você pode removê-lo com

sudo apt-get remove --purge postgresql-8.4

Se a reinstalação falhar, mostre-nos o erro.

    
por Dennis Kaarsemaker 18.11.2012 / 21:48
0

Para remover o postgresql e começar do zero, isso funcionou para mim:
Lista todos os pacotes postgresql instalados.

dpkg -l | grep post  

Em seguida, apt-get purga todos os pacotes postgresql retornados pelo comando acima:
Exemplo:

apt-get purge postgresql postgresql-client postgresql-client-common postgresql-common postgresql-contrib postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6  
    
por AAL 09.05.2018 / 15:56