A resposta fornecida por Ryan Thomson estava indo para o caminho certo. Ainda assim, não seria capaz de fazer o trabalho (o motivo é detalhado abaixo).
A maneira correta (e mais fácil) de fazer isso é usar -o
com apt
a opção pass 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é pressionar D para ver quais são as alterações ou iniciar um shell raiz com a opção Z para se corrigir.
Nota: Após a substituição, você encontrará o arquivo modificado comoat /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 tratam dos 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 fosse alterada. Da página de manual
Se um conffile foi modificado e a versão no pacote mudou, sempre instale a nova versão sem avisar, a menos que o --force-confdef também esteja especificado, nesse caso a ação padrão é preferida.
--force-confmiss
funciona com arquivos de configuração ausentes. Também falhará quando a versão não for alterada. Citando a página de manual
confmiss: Se um conffile estiver ausente e a versão do pacote mudar, sempre instale o conffile ausente sem avisar. Isso é perigoso, pois significa não preservar uma alteração (remoção) feita no arquivo
--force-confold
reterá a versão modificada somente se a versão for alterada . Para o mesmo pacote, ele também falhará. Citando a página de manual
confold: Se um conffile foi modificado e a versão no pacote foi alterada, sempre mantenha a versão antiga sem avisar, a menos que o --force-confdef também seja especificado, nesse caso a ação padrão é preferida.
--force-confdef
também falhará porque a ação padrão é reter o arquivo mais antigo (indicado na mensagem mostrada com --force-confask
. Ele possui uma linha (Y/I/N/O/D/Z) [default=N]
que significa que a retenção é o padrão. Veja acima). E se --force-confnew
for especificado, mas a versão não mudar, isso também não funcionará. Citando a página de manual
confdef: se um conffile foi modificado e a versão do pacote mudou, sempre escolha a ação padrão sem avisar. Se não houver ação padrão, ele será interrompido para perguntar ao usuário, a menos que --force-confnew ou --force-confold também seja fornecido; nesse caso, ele será usado para decidir a ação final.
Apenas --force-confask
funcionará, porque fará a pergunta explicitamente, mesmo quando a versão for a mesma. Citando a página de manual
confask: Se um conffile foi modificado, sempre ofereça-o para substituí-lo pela versão no pacote, mesmo que a versão no pacote não tenha sido alterada (desde o dpkg 1.15.8). Se alguma das opções --force-confmiss , --force-confnew , --force-confold ou --force-confdef também for fornecida, ela será usada para decidir a ação final.
Espero que ajude.
foo
, e sebar
dependerfoo
e eu não quiser removê-lobar
?