Como faço para o apt-get -y dist-upgrade sem um prompt de configuração do grub?

56

Per Tornar apt-get (ou aptitude) executado com -y mas não solicitar a substituição de arquivos de configuração?

Eu fiz o seguinte:

ec2run ami-3c994355 --region us-east-1 -n 1 -t m1.large -z us-east-1d

Na máquina:

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

Eu ainda recebo um aviso perguntando qual arquivo de configuração eu quero usar. Estas são as linhas que vêm antes do prompt:

Setting up grub-pc (1.99-21ubuntu3.1) ...

então:

                         ┌───────────────────────────────────────────────────────┤ Configuring grub-pc ├───────────────────────────────────────────────────────┐                              
                         │ A new version of configuration file /etc/default/grub is available, but the version installed currently has been locally modified.  │                              
                         │                                                                                                                                     │                              
                         │ What do you want to do about modified configuration file grub?                                                                      │                              
                         │                                                                                                                                     │                              
                         │                                     install the package maintainer's version                                                        │                              
    
por fratrik 05.06.2012 / 19:27

3 respostas

82

O arquivo /etc/default/grub é gerado no momento da instalação do pacote, o que é necessário porque ele se integra ao debconf. Isso significa que ele não pode ser tratado como um arquivo conf do dpkg e, portanto, a manipulação do arquivo de configuração do dpkg não o conhece.

Em vez disso, ele usa ucf , uma ferramenta Debian mais sofisticada para manipular a configuração. Isso, infelizmente, não entende as opções do dpkg, então definir Dpkg::Options::="--force-confdef" não ajudará. Ele tem sua própria maneira de fazer upgrades sem prompt, através das variáveis de ambiente UCF_FORCE_CONFFNEW e UCF_FORCE_CONFFOLD .

ucf usa debconf para solicitar, então configurar a interface debconf para noninteractive também irá silenciar a mensagem. Se você realmente quer atualizações não-interativas, você precisará fazer isso de qualquer maneira - pacotes arbitrários podem fazer perguntas debconf (embora geralmente não sejam feitas durante as atualizações).

Você pode definir a interface debconf como única, adicionando DEBIAN_FRONTEND=noninteractive ao seu ambiente, ou pode defini-la permanentemente executando dpkg-reconfigure debconf e selecionando o front-end não interativo. Se você estiver usando o front-end não interativo, receberá a resposta padrão para qualquer pergunta que um pacote possa fazer.

Para ucf , a resposta padrão é "manter o arquivo existente".

Assim, o comando completo para fazer uma atualização 100% garantida¹ sem prompts seria.

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

It's: tecnicamente é possível que os pacotes usem outro método de solicitação do que o debconf, mas isso é contra a política do Debian. Se você encontrar um pacote desse tipo, envie um bug.

    
por RAOF 06.06.2012 / 05:28
16

saindo da resposta da RAOF e depois de passar incontáveis horas pesquisando na web para poder realizar uma atualização e um "hands-off" completos dist-upgrade no Ubuntu 12.04, eu vim com isso graças ao fato deste post ( link ) aponta que o grub adere ao UCF e não ao Dpkg Options quando você quer usar o mantenedor de pacotes grub menu.lst ao invés de qualquer possível menu local.lst edits.

eu deixei as opções force-confnew do Dpkg para outros pacotes que não são grub.

#!/bin/bash

unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /boot/grub/menu.lst

export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get -o Dpkg::Options::="--force-confnew" --force-yes -fuy dist-upgrade
    
por metral 28.02.2013 / 20:31
2

As soluções anteriores não funcionariam com o 16.04. Isso funciona de esta resposta no estouro de pilha :

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold"  install grub-pc
    
por StringsOnFire 08.01.2017 / 16:37