Quero reverter um arquivo de /etc/
volta para o formulário originalmente instalado. Eu editei o arquivo desde que ele foi instalado. Como posso reverter este arquivo de configuração? O Apt é inteligente o suficiente para não sobrescrever os arquivos de configuração editados, então como posso dizer que quero fazer isso?
Por uma questão de argumento, digamos que eu quero reverter o arquivo /etc/foo.conf
do pacote foo
.
configuration
apt
Ryan C. Thompson
fonte
fonte
foo
, e sebar
dependerfoo
e eu não quiser removê-lobar
?Respostas:
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
comapt
a opção pass dpkg e forçardpkg
a perguntar se você deseja manter os arquivos de configuração modificados ou os originais. O comando será assim -Isso faria uma pergunta como
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 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 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--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--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--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 manualApenas
--force-confask
funcionará, porque fará a pergunta explicitamente, mesmo quando a versão for a mesma. Citando a página de manualEspero que ajude.
fonte
--force-confnew
? Eu tenteiapt-get […] -y
, mas isso não funcionou. (Se não for possível, edite também a resposta para dizê-lo.) #--force-confnew
sem perguntar? Eu acho que é o caso padrão, o que significa que ele manterá suas alterações.--force-confask
fazapt
sempre a pergunta; caso contrário, você usaria outras opções se já souber a resposta.-o Dpkg::Options::=--force-confnew
sem sucesso (como sua resposta previu) e não li a mensagem de erro quando tentei-o Dpkg::Options::="--force-confask --force-confnew"
. No entanto,apt-get --reinstall -o Dpkg::Options::=--force-confask -o Dpkg::Options::=--force-confnew install $package
substitua corretamente os arquivos de configuração de alteração de$package
. Obrigado!Se o dano já estiver feito, eis uma maneira de recuperar a versão oficial do arquivo de configuração. Primeiro, baixe o arquivo do pacote (
apt-get --download-only
como abaixo, ou na página do pacote packages.ubuntu.com ) e depois extraia seu conteúdo em um local temporário. Você pode copiar o arquivo para/etc
. Certifique-se de respeitar as permissões originais (a maioria dos arquivos/etc
pertence ao root e ao modo 644 (isto é, legível por palavras e gravável por raiz), mas cada exceção existe por um motivo importante.Observe que isso não se aplica aos arquivos de configuração que não pertencem a um pacote, como
/etc/fstab
ou/etc/passwd
. Se você os perder, estará por sua conta. (A maioria é muito dependente do sistema).Para o futuro, eu recomendo usar o etckeeper . Instale o pacote e execute
sudo etckeeper init
. Isso configura o controle de versão para todos os arquivos/etc
. Você não precisa fazer mais nada para gerenciar o etckeeper; você só precisa interagir com ele quando desejar executar uma operação de controle de versão, como consultar arquivos mais antigos. Os arquivos são automaticamente confirmados antes e depois de cada execução do apt e todas as noites (isso é configurável).Por padrão, no Ubuntu, o etckeeper usa o Bazaar . Altere a configuração
/etc/etckeeper/etckeeper.conf
antes de executar,etckeeper init
se você preferir Darcs, Git ou Mercury.Com o Bazaar, para reverter
/etc/foo.conf
para a última versão confirmada:Se você quiser voltar mais no tempo, use
sudo bzr log foo.conf
para exibir o histórico do arquivo esudo bzr revert -r 42 foo.conf
se tiver determinado querevno: 42
é a revisão à qual deseja reverter.fonte
Você pode baixar o pacote manualmente em packages.ubuntu.com , extrair o arquivo e substituir sua versão por ele.
Ou você pode:
O segundo parece muito mais brutal. Também pode apagar outras configurações se usar mais de um arquivo. O primeiro é mais cliques e esforço, mas parece muito mais seguro.
No segundo, você pode simplesmente excluir o arquivo e --reinstall pode substituí-lo. Se assim for, isso seria mais seguro.
fonte
apt-get --reinstall purge package
não machucará dependentes.Dependendo do pacote, você pode encontrar um arquivo de configuração padrão
/usr/share/doc/foo/examples
.fonte
Use Synaptic (o ajuste do Ubuntu é ainda mais conveniente, mas o synaptic é mais direto) e escolha "remover completamente o pacote". Isso excluirá todos os arquivos de configuração (você pode fazer backup desses arquivos!).
Então reinstale. Você está feito.
Com o Ubuntu Tweak, você obtém ainda mais opções para backups de limpeza, re-rolagem e configuração. Talvez você queira dar uma olhada. Está no softwarecenter.
ps: Synaptic também usa a opção "purgar" (como mencionado por Oli acima ...) - apenas com uma GUI para um manuseio mais confortável.
fonte
Finalmente encontrei a resposta que me lembrava vagamente de anos atrás:
O argumento "confnew" força o dpkg a substituir os arquivos de configuração modificados pelos fornecidos pelo pacote, e o "confmiss" faz o mesmo com os arquivos de configuração que foram excluídos.
De acordo com este chatlog , você também pode usar essas opções através do apt-get da seguinte maneira:
o que evita que você precise encontrar o arquivo deb por conta própria.
Obviamente, essas opções são perigosas e têm o potencial de remover arquivos importantes de configuração do sistema se forem mal utilizados.
fonte
--force-confnew
é que ele só instalará novos arquivos de configuração se a versão for alterada. Se você estiver reinstalando mesma versão, ele não vai instalar um novo arquivo de configuração como eu testei explicitamente--force-confmiss
só instalará um novo arquivo de configuração se a versão for alterada e a configuração estiver ausente. Conforme descrito na página do manualconfmiss: If a conffile is missing and the version in the package did change, always install the missing conffile without prompting. This is dangerous, since it means not preserving a change (removing) made to the file.