A resposta fornecida por Ryan Thomson estava indo para o caminho certo. Ainda não seria capaz de fazer o trabalho (A razão detalhes é dada abaixo).
A maneira correta (e mais fácil) de fazer isso é usar -o
com apt
para passar a opção dpkg e forçar dpkg
a perguntar se você deseja manter os arquivos de configuração modificados ou os originais. O comando será assim -
sudo apt-get --reinstall -o Dpkg::Options::="--force-confask" install foo
Isso faria uma pergunta como
Configuration file '/etc/foo/foo.conf'
==> Modified (by you or by a script) since installation.
Version in package is the same as at last installation.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** foo.conf (Y/I/N/O/D/Z) [default=N] ?
Você precisa pressionar Y ou I para instalar o arquivo de configuração original do mantenedor do pacote. Você pode até mesmo pressionar D para ver quais são as mudanças ou iniciar um shell de root com a opção Z para corrigir você mesmo.
Observação: Após a substituição, você encontrará o arquivo modificado como at /etc/foo/foo.conf.dpkg-old
Por que outras opções não funcionariam?
Porque as outras opções no dpkg não funcionam bem. As opções que lida com os arquivos de configuração de um pacote são
-
--force-confmiss
-
--force-confnew
-
--force-confold
-
--force-confdef
--force-confmiss
não funcionaria quando a versão do pacote não muda. De man-page
Se um conffile foi modificado e a versão do pacote foi alterada, sempre instale a nova versão sem avisar, a menos que o - force-confdef também seja especificado. Nesse caso, a ação padrão é o preferido.
--force-confmiss
funciona com conffiles ausentes. Também irá falhar quando a versão não mudar. Citando página de manual
confmiss: Se um conffile estiver faltando e a versão do pacote for alterada, sempre instale o conffile ausente sem avisar. Isso é perigoso, pois significa não preservar uma alteração (remoção) feita no arquivo
--force-confold
manterá a versão modificada somente se a versão for alterada . Para o mesmo pacote, também irá falhar. Citando página de manual
confold: Se um conffile foi modificado e a versão do pacote foi alterada, sempre mantenha a versão antiga sem avisar, a menos que o - force-confdef também seja especificado. a ação padrão é preferida.
--force-confdef
também falhará porque a ação padrão é manter o arquivo mais antigo (indicado na mensagem mostrada com --force-confask
. Ele possui a linha (Y/I/N/O/D/Z) [default=N]
, o que significa que a retenção é padrão. Consulte acima ). E se --force-confnew
for especificado, mas a versão não for alterada, isso também não funcionará. Citando página de manual
confdef: Se um conffile foi modificado e a versão do pacote foi alterada, sempre escolha a ação padrão sem avisar. Se não houver nenhuma ação padrão, ela será interrompida para perguntar ao usuário, a menos que - force-confnew ou - force-confold também seja fornecido. Nesse caso, ele será usado que para decidir a ação final.
Apenas --force-confask
funcionará, porque ele fará a pergunta explicitamente, mesmo quando a versão for a mesma. Citando página de manual
confask: Se um conffile tiver sido modificado, sempre ofereça substituí-lo pela versão do pacote, mesmo que a versão do pacote não tenha mudado (desde o dpkg 1.15.8). Se algum dos - força-confiscar , - força-confnew , - força-confold , ou - força- confdef também é dado, ele será usado para decidir a ação final.
Espero que isso ajude.