Estou fazendo instalações de pacotes autônomas/não interativas via
DEBIAN_FRONTEND=noninteractive apt-get install -y my_package
Isso funciona conforme esperado na maioria dos casos, mas ainda me fornece um prompt interativo se houver conflito no arquivo de configuração, por exemplo, algo assim:
Configuration file '/etc/foo'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
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
Eu sei que posso escolher a resposta passando uma opção adequada dpkg
para apt-get
via-o
, por exemplo
DEBIAN_FRONTEND=noninteractive apt-get -o DPkg::Options::=--force-confdef install -y my_package
No entanto, as opções correspondentes oferecidas por dpkg
parecem não incluir uma forma de abortar a instalação em caso de conflito, que é o que eu precisaria.
Como posso instalar um pacote de forma não interativa apt-get
e falhar se um conflito de configuração for encontrado?
O seguinte também seria aceitável para mim:
- Verifique de forma não interativa antes de ligar
apt-get
se haverá um conflito - Mantenha as versões dos arquivos de configuração no disco (como
--confold
), mas saia com um código de saída diferente de zero ou tenha outra maneira de detectar isso posteriormente.
Não verifiquei isso no seu cenário, mas
dpkg
devo abortar se precisar solicitar informações e não conseguir ler sua entrada padrão; entãodeve ser abortado com um erro se houver um conflito no arquivo de configuração.
Se isso não funcionar, você sempre pode procurar sobras de conflitos: dependendo de suas
--conf
opções,dpkg
deixará a versão antiga com.dpkg-old
sufixo ou a nova versão com.dpkg-new
sufixo. Portanto, você pode procurar novos.dpkg-*
arquivos/etc
após uma tentativa de instalação para determinar se houve algum conflito.