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

13

Eu gosto de usar o "servidor cloudstack faca criar ..." para criar uma nova VM. Meu modelo de inicialização começa com uma "atualização do apt-get" e "atualização do apt-get -y".

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 realmente dois problemas:

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

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

Mojo
fonte

Respostas:

15

Você pode passar argumentos para evitar solicitações. 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 essas perguntas "O que você deseja fazer com o arquivo de configuração modificado" sejam padronizadas 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 interromper o sistema se mantidos em espera e não são compatíveis com a versão atualizada do pacote. Teste-o antes de implantar em soluções de automação.

Jossef Harush
fonte
5

Se você absolutamente não deseja responder a nenhuma pergunta interativa, defina a DEBIAN_FRONTENDvariável de 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ê ficará com os arquivos nomeados como *.dpkg-newpara todos os locais em que um arquivo de configuração foi intocado. Em seguida, você pode resolver manualmente as alterações ou enviar sua configuração local para o sistema usando um sistema de gerenciamento de configuração ou o que for.

Em segundo lugar, nem sei qual deve ser a resposta certa para a pergunta

Pressionar a tecla D exibirá a diferença, que você poderá inspecionar. Se você tiver certeza de que nunca alterou esse arquivo manualmente, é provável que escolher Y para substituí-lo seja seguro (você verificou seus backups atualizando RIGHT !! ). A escolha de N mantém apenas o arquivo antigo, que também é seguro, 95% das vezes, a menos que o pacote tenha alterações importantes, que geralmente são abordadas nas notas de alterações / liberações que você também leu antes de executar o comando upgrade / dist-upgrade.

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

Zoredache
fonte
Você aconselha DEBIAN_FRONTEND = sobre não-interativo --force-yes? Parece que o padrão é NÃO, e "sim" provavelmente está correto nesse caso. (Eu não posso bater qualquer chaves já que não há stdin.)
Mojo