Como automatizar arquivos de configuração alterados durante o upgrade do apt-get no Ubuntu 12

10

Eu gosto de usar "faca cloudstack server create ..." para criar uma nova VM. Meu modelo de bootstrap começa com um "apt-get update" e "apt-get -y upgrade".

A atualização é interrompida com:

10.190.113.11 Configuration file '/etc/nscd.conf'
10.190.113.11  ==> Modified (by you or by a script) since installation.
10.190.113.11  ==> Package distributor has shipped an updated version.
10.190.113.11    What would you like to do about it ?  Your options are:
10.190.113.11     Y or I  : install the package maintainer's version
10.190.113.11     N or O  : keep your currently-installed version
10.190.113.11       D     : show the differences between the versions
10.190.113.11       Z     : start a shell to examine the situation
10.190.113.11  The default action is to keep your current version.
10.190.113.11 *** nscd.conf (Y/I/N/O/D/Z) [default=N] ?

Portanto, existem dois problemas:

Primeiramente, posso obter o apt-get para fazer algo por padrão? Obviamente, não há como fornecer uma resposta.

Em segundo lugar, eu nem sei qual deve ser a resposta certa para a pergunta. O arquivo de configuração que está substituindo veio de um modelo. Eu ainda não procurei o que "nscd" faz. (Presumivelmente, "Y" é a resposta correta, mas a pesquisa envolvida no momento da pergunta é assustadora.)

    
por Mojo 01.08.2013 / 00:35

2 respostas

9

Você pode transmitir argumentos para evitar receber prompts. Isso funciona para mim;

apt-get update
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

--force-confold (minha escolha) fará com que estas "O que você deseja fazer sobre o arquivo de configuração modificado" perguntas padrão para N (mantenha sua versão atualmente instalada)

--force-confold: do not modify the current configuration file, the new version is installed with a .dpkg-dist suffix. With this option alone, even configuration files that you have not modified are left untouched. You need to combine it with --force-confdef to let dpkg overwrite configuration files that you have not modified.
--force-confnew: always install the new version of the configuration file, the current version is kept in a file with the .dpkg-old suffix.
--force-confdef: ask dpkg to decide alone when it can and prompt otherwise. This is the default behavior of dpkg and this option is mainly useful in combination with --force-confold.
--force-confmiss: ask dpkg to install the configuration file if it’s currently missing (for example because you have removed the file by mistake).

Aviso - alguns arquivos de configuração modificados podem quebrar seu sistema se forem mantidos para trás & não é compatível com a versão atualizada do pacote. Teste-o antes de implementar em soluções de automação.

    
por 21.03.2017 / 08:11
4

Se você não quiser responder a nenhuma pergunta interativa, defina a variável DEBIAN_FRONTEND front end como noninteractive .

Isso pode ser tão fácil quanto DEBIAN_FRONTEND=noninteractive apt-get upgrade .

Você não receberá mensagens e os padrões serão escolhidos. Na maioria dos casos, isso significa que seus arquivos de configuração não serão alterados e você terá arquivos com o nome *.dpkg-new para todos os locais onde um arquivo de configuração não foi tocado. Você pode, então, resolver manualmente as alterações ou empurrar sua configuração local para o sistema usando um sistema de gerenciamento de configuração ou qualquer outra coisa.

Secondly, I don't even know what the right answer to the question should be

Pressionar a tecla D exibirá a diferença, que você poderá inspecionar. Se você tiver certeza de que nunca alterou manualmente esse arquivo, é provável que escolha Y para substituí-lo (verificou se os seus backups foram atualizados RIGHT !! ). Escolher N apenas mantém o arquivo antigo que também é seguro em 95% do tempo, a menos que o pacote tenha grandes mudanças, que são geralmente abordadas nas notas de changelog / release que você leu antes de executar o comando upgrade / dist-upgrade.

Depois disso, simplesmente tente o comando primeiro em seu ambiente de teste. Veja se as coisas não funcionam. Se você realmente não tem certeza de obter o diff, e leia a documentação para o pacote e pesquisa.

    
por 01.08.2013 / 00:47