Como o dpkg sabe que um arquivo de configuração foi deletado?

3

Recentemente, tive um problema estranho em instalar o zsh ( apt-get install zsh ), mas ele não instalaria os arquivos de configuração - especificamente /etc/zsh/zshenv e amigos.

Após algum tempo e esforço considerável, consegui rastrear esta entrada de log:

deferred_configure '/etc/zsh/zshenv' (= '/etc/zsh/zshenv') useredited=1 distedited=0 what=202

E esta explicação:

Removing the file counts as 'editing' it, because for many configuration files the absence of a file is meaningful.

Agora, como acontece, eu tinha excluído o diretório /etc/zsh , então tudo isso faria sentido - exceto que eu também fiz apt-get remove zsh !!

Então, considerando que eu desinstalei o zsh, quando eu for reinstalá-lo, por que é surpreendido pela ausência de arquivos de configuração? Eles não estariam presentes em um sistema novo - ou seja, sem um zsh instalado - então, como ele sabe que eles estavam lá anteriormente?

E como faço para parar?

Eu sei que posso passar --force-confmiss , mas esse não é o ponto. Na verdade, não acredito que isso possa ser feito ao usar apt-get em qualquer caso.

Eu não quero alterar a forma como os programas são instalados. Em vez disso, quero saber como o dpkg determina que os arquivos que não deveriam existir em primeiro lugar foram excluídos pelo usuário. Qual é a diferença entre um arquivo que foi excluído e um que nunca existiu? É algo a ver com apt-get --purge ?

    
por Sod Almighty 11.02.2016 / 21:04

2 respostas

2

Da página de manual do dpkg:

--remove package (...) Remove an installed package. This removes everything except conffiles, which may avoid having to reconfigure the package if it is reinstalled later (conffiles are configuration files that are listed in the DEBIAN/conffiles control file).

Você não removeu completamente o zsh , mas algumas informações permaneceram no sistema. O status do pacote será "d" (removido) e não "p" (removido ou nunca visto).

Você precisa limpar o pacote para remover também os conffiles, para reinstalar os pacotes como novos.

Nota: se você está curioso, pode verificar /var/lib/dpkg/ para ver o que o sistema sabe sobre seus pacotes.

    
por 11.02.2016 / 22:36
0

Você precisa remover os arquivos de configuração estranhos.

  1. Você deve instalar dctrl-tools ou grep-status ( não ambos) você pode usar o comando grep-status em um script para excluir os arquivos de configuração estranhos

  2. o seguinte comando será útil:

    aptitude purge ~c
    

    É um til, não um traço. Eu ouvi dizer que aptitude purge ?config-files também funcionará, mas eu não sei sobre isso.

    Você pode substituir purge por search se não se sentir seguro primeiro.

por 24.04.2016 / 23:25