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

63

Por Faça o apt-get (ou aptitude) executado com -y, mas não solicite a substituição dos 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

Ainda recebo um prompt 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                                                        │                              
fratrik
fonte
Solução insatisfatória: eco grub-pc hold | sudo dpkg --set-selections antes do primeiro comando apt-get
fratrik
Eu recebo esse mesmo problema e tentei muitas permutações / ortografia diferentes do Dpkg :: Options :: =, nenhuma das quais funcionou. Também tentei adicionar as linhas ao arquivo /etc/apt/apt.conf.d/local, conforme indicado, e elas também não funcionaram. Isso parece ser uma regressão no Precise.
Scott Ritchie
+1 - obrigado por perguntar - foi surpreendentemente fácil de encontrar esta discussão para este problema irritante
cwd

Respostas:

95

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

Em vez disso, ele usa ucfuma ferramenta Debian mais sofisticada para lidar com a configuração. Infelizmente, isso não entende as opções do dpkg, portanto, a configuração Dpkg::Options::="--force-confdef"não ajudará. Porém, ele tem sua própria maneira de fazer atualizações sem aviso prévio, através das variáveis ​​de ambiente UCF_FORCE_CONFFNEWe UCF_FORCE_CONFFOLD.

ucfusa debconfpara solicitar, portanto, configurar a interface debconf para noninteractivetambém silenciará a mensagem. Se você realmente deseja atualizações não interativas, precisará fazer isso de qualquer maneira - pacotes arbitrários podem fazer perguntas sobre o debconf (embora elas geralmente não sejam feitas durante as atualizações).

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

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

Portanto, seria o comando completo para fazer uma atualização realmente 100% garantida - sem aviso prévio.

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

Nota: É tecnicamente possível para os pacotes usar outro método de solicitação além do debconf, mas isso é contra a política Debian. Se você se deparar com esse pacote, arquive um bug.

RAOF
fonte
8
Observe que se você estiver testando isso em um shell, o comando sudo parece remover a variável DEBIAN_FRONTEND, ou seja, você precisa do sudo DEBIAN_FRONTEND = não-interativo apt-get -y dist-upgrade enquanto DEBIAN_FRONTEND = sudo não interativo apt-get -y dist-upgrade falhará
Scott Ritchie
funcionou bem para mim, obrigado
cwd
Observe também que este é considerado um bug e eles estão lançando novas imagens AMI que não devem ter esse problema: bugs.launchpad.net/ubuntu/+bug/1009294
Scott Ritchie
E as novas AMIs são agora lançadas.
Scott Ritchie
@ ScottRitchie - seu comentário também funciona para ajudar a automatizar a instalação do pacote ganglia-webfrontend. Ele tem um aviso para pedir uma reinicialização do Apache para processar o novo arquivo conf mas esta quebra quando se tenta automatizar a instalação de gânglios - acrescentou o seu comentário para a frente e resolveu o problema
Jeremy Hajek
19

saindo da resposta do RAOF e depois de passar inúmeras horas pesquisando na web para poder executar uma atualização completamente manual e dist-upgrade no Ubuntu 12.04, eu vim com isso graças ao fato deste post ( https: // bugs .launchpad.net / ubuntu / + source / grub / + bug / 239674 / comments / 1 ) aponta que o grub adere ao UCF e não às opções do Dpkg quando deseja usar o mantenedor de pacotes grub menu.lst em vez de qualquer menu local possível .st edições.

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
metral
fonte
11
Essa foi a única coisa que funcionou para mim. Obrigado!
quer
11
Então, digamos que você também esteja usando unattended-upgradese editou algumas configurações do grub: como você define UCF_FORCE_CONFFNEWesse contexto? Ou você precisaria atualizar o grub da lista negra?
thom_nic
3

As soluções anteriores não funcionariam com 16.04. Isso funciona a partir desta 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
StringsOnFire
fonte
1

Eu tenho discutido com o mesmo problema no Ubuntu 18.04 nos últimos dias. Ao iniciar uma nova instância do EC2 (especificamente ami-00035f41c82244dab), executei um script de provisionamento automatizado (via configuração de dados do usuário fornecida no momento da inicialização), uma das primeiras etapas para executar a atualização / atualização adequada.

O script é bloqueado enquanto o usuário é solicitado sobre os arquivos GRUB modificados - primeiro / etc / default / grub e depois /boot/grub/menu.lst. Como isso está sendo executado em um modo autônomo quando fornecido como Dados do Usuário, o processo é interrompido e nunca se recupera.

De muitas pesquisas no Google, parece que esse foi um problema de longa duração do GRUB, de uma forma ou de outra, com correções sendo aplicadas e depois regredindo novamente, tanto quanto eu sei.

Por fim, a única solução alternativa que consegui aplicar com êxito é o seguinte corte feio no meu script de provisionamento. Espero que isso possa tirar outra pessoa do sério!

#!/bin/bash 

apt update

### Workaround: Pre-update /etc/default/grub and remove /boot/grub/menu.lst to avoid 'file changed' prompts from blocking completion of unattended update process
patch /etc/default/grub <<'EOF'
10c10
< GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0"
---
> GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 nvme.io_timeout=4294967295"
19c19
< GRUB_TERMINAL=console
---
> #GRUB_TERMINAL=console
EOF
rm /boot/grub/menu.lst

apt upgrade -y

### Workaround part 2: re-generate /boot/grub/menu.lst
/usr/sbin/update-grub-legacy-ec2 -y

Só posso assumir que o problema que encontrei é bastante específico da versão AMI do Ubuntu 18.04 disponível atualmente, e qualquer versão atualizada que incorpore pacotes GRUB mais recentes pode não estar sujeita ao mesmo problema. Em particular, /etc/default/grubé provável que a natureza das alterações não se aplique a versões mais recentes da AMI. Apenas colocando isso lá fora de qualquer maneira.

John Rix
fonte
Tente executar a seguinte linha:sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade
DarkNeuron
Além disso, aqui está o bug mais recente (regressão) mencionado acima: bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron