Как dpkg узнает, что файл конфигурации был удален?

470
Sod Almighty

У меня недавно была странная проблема, когда я устанавливал zsh( apt-get install zsh), но он не устанавливал файлы конфигурации - особенно /etc/zsh/zshenvи друзей.

После некоторого времени и усилий мне удалось отследить эту запись в журнале:

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

И это объяснение:

Удаление файла считается «редактированием», потому что для многих файлов конфигурации отсутствие файла имеет смысл.

Теперь, как это происходит, я уже удалил /etc/zshкаталог, так что это все имеет смысл - за исключением того, что я также сделал apt-get remove zsh!!

Итак, учитывая, что я удалил zsh, когда я пришел, чтобы переустановить его, почему он удивился отсутствию файлов конфигурации? Они не будут присутствовать в новой системе, то есть без установленной zsh, так как он узнал, что они были там ранее?

И как мне это остановить?

Я знаю, что могу пройти --force-confmiss, но это не главное. Действительно, я не верю, что это может быть сделано при использовании apt-getв любом случае.

Я не хочу менять способ установки программ. Вместо этого я хочу знать, как dpkg определяет, что файлы, которые он не ожидал существовать в первую очередь, были удалены пользователем. В чем разница между файлом, который был удален, и файлом, который никогда не существовал? Это как-то связано apt-get --purge?

3

2 ответа на вопрос

3
Giacomo Catenazzi

From dpkg man page:

--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).

So you didn't remove completely the zsh, but some information remained into the system. The status the package will be "d" (removed) and not "p" (purged or never seen).

You need to purge the package to remove also the conffiles, so to reinstall the packages as new.

Note: if you are curious, you can check /var/lib/dpkg/ to see what the system knows about your packages.

Понимаю. Спасибо за помощь. Sod Almighty 8 лет назад 0
0
Kevin Benko

You need to remove the extraneous config files.

  1. You should install dctrl-tools or grep-status (not both) you can use that grep-status command in a script to delete the extraneous config files

  2. the following command will be useful, instead:

    aptitude purge ~c 

    It is a tilde, not a dash. I have heard that aptitude purge ?config-files will also work, but I don't know about that.

    You can replace purge with search if you don't feel safe, first.

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