Come posso apt-get -y dist-upgrade senza un prompt di configurazione di grub?


63

Per far eseguire apt-get (o aptitude) con -y ma non richiedere la sostituzione dei file di configurazione?

Ho fatto quanto segue:

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

Sulla macchina:

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

Ricevo ancora un messaggio che mi chiede quale file di configurazione voglio usare. Queste sono le linee che precedono il prompt:

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

poi:

                         ┌───────────────────────────────────────────────────────┤ 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                                                        │                              

Soluzione alternativa insoddisfacente: echo grub-pc hold | sudo dpkg --set-selections prima del primo comando apt-get
fratrik

Ottengo questo stesso problema e ho provato molte diverse permutazioni / ortografie di Dpkg :: Options :: =, nessuna delle quali ha funzionato. Ho anche provato ad aggiungere le righe al file /etc/apt/apt.conf.d/local come indicato, e non hanno funzionato neanche. Questa sembra essere una regressione in Precise.
Scott Ritchie,

+1 - grazie per
avermelo

Risposte:


95

Il /etc/default/grubfile viene generato al momento dell'installazione del pacchetto, necessario perché si integra con debconf. Ciò significa che non può essere trattato come un file conf di dpkg, quindi la gestione dei file di configurazione di dpkg non lo conosce.

Invece, usa ucfuno strumento Debian più sofisticato per gestire la configurazione. Questo, sfortunatamente, non comprende le opzioni di dpkg, quindi l'impostazione Dpkg::Options::="--force-confdef"non aiuta. Ha il suo modo di fare aggiornamenti senza prompt, attraverso le variabili di ambiente UCF_FORCE_CONFFNEWe UCF_FORCE_CONFFOLD.

ucfutilizza debconfper la richiesta, quindi impostando l'interfaccia debconf su noninteractiveanche silenzierà il messaggio. Se vuoi davvero aggiornamenti non interattivi, dovrai farlo comunque - i pacchetti arbitrari possono porre domande debconf (anche se generalmente non lo faranno durante gli aggiornamenti).

Puoi impostare l'interfaccia debconf come una tantum aggiungendola DEBIAN_FRONTEND=noninteractiveal tuo ambiente, oppure puoi impostarla permanentemente eseguendo dpkg-reconfigure debconfe selezionando il frontend non interattivo. Se stai usando il frontend non interattivo otterrai la risposta predefinita per qualsiasi domanda che un pacchetto potrebbe porre.

Per ucf, la risposta predefinita è "mantenere il file esistente".

Quindi, il comando completo per eseguire un aggiornamento senza prompt davvero garantito al 100 %¹.

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

¹: È tecnicamente possibile che i pacchetti utilizzino un altro metodo di prompt rispetto a debconf, ma questo è contro la politica di Debian. Se ti imbatti in un tale pacchetto, invia un bug.


8
Nota che se lo stai testando su una shell, il comando sudo sembra rimuovere la variabile DEBIAN_FRONTEND, cioè hai bisogno di sudo DEBIAN_FRONTEND = apt-get -y dist-upgrade non interattivo mentre DEBIAN_FRONTEND = sudo apt-get -y dist-upgrade non interattivo fallirà
Scott Ritchie,

ha funzionato bene per me, grazie
cwd

Si noti inoltre che questo è considerato un bug e stanno rilasciando nuove immagini AMI che non dovrebbero avere questo problema: bugs.launchpad.net/ubuntu/+bug/1009294
Scott Ritchie,

E le nuove AMI sono ora rilasciate.
Scott Ritchie,

@ScottRitchie: il tuo commento funziona anche per aiutare ad automatizzare l'installazione del pacchetto ganglia-webfrontend. Ha una richiesta di chiedere un riavvio di apache per elaborare il nuovo file conf ma questo si interrompe quando si tenta di automatizzare l'installazione di gangli - ha aggiunto il tuo commento in primo piano e risolto il problema
Jeremy Hajek

19

uscendo dalla risposta di RAOF e dopo aver trascorso innumerevoli ore a cercare sul web per essere in grado di eseguire un aggiornamento completamente manuale e un dist-upgrade su Ubuntu 12.04, ho pensato a questo grazie al fatto che questo post ( https: // bugs .launchpad.net / ubuntu / + source / grub / + bug / 239674 / commenti / 1 ) sottolinea che grub aderisce alle opzioni UCF e non Dpkg quando si desidera utilizzare i gestori dei pacchetti grub menu.lst invece di qualsiasi menu locale possibile .lst edit.

ho lasciato le opzioni di conferma forzata di Dpkg per altri pacchetti che non sono 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

1
Questa è stata l'unica cosa che ha funzionato per me. Grazie!
wes

1
Supponiamo che anche tu stia utilizzando unattended-upgradese abbia modificato alcune configurazioni di GRUB: come si imposta UCF_FORCE_CONFFNEWin quel contesto? O avresti bisogno di blacklist grub da essere aggiornato?
thom_nic,


1

Ho litigato con lo stesso problema su Ubuntu 18.04 negli ultimi giorni. All'avvio di una nuova istanza EC2 (in particolare ami-00035f41c82244dab), eseguo uno script di provisioning automatizzato (tramite la configurazione dei dati utente fornita al momento dell'inizializzazione), uno dei primi passi da eseguire per eseguire update / upgrade apt.

Lo script viene bloccato quando viene richiesto all'utente di modificare i file GRUB - prima / etc / default / grub e poi /boot/grub/menu.lst. Poiché questo viene eseguito in modalità automatica quando fornito come Dati utente, il processo si blocca e non viene mai ripristinato.

Da un sacco di googling, sembra che questo sia stato un problema di lunga data di GRUB in una forma o nell'altra, con correzioni applicate e poi di nuovo regredendo, per quanto posso dire.

Alla fine, l'unica soluzione che sono stato in grado di applicare con successo è il seguente brutto hack nel mio script di provisioning. Spero che potrebbe tirar fuori qualcun altro da un legame!

#!/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

Posso solo supporre che il problema che ho riscontrato sia piuttosto specifico della versione AMI di Ubuntu 18.04 attualmente disponibile e qualsiasi versione aggiornata che includa i pacchetti GRUB più recenti potrebbe non essere soggetta allo stesso problema. In particolare, /etc/default/grubè probabile che la natura delle modifiche non sia applicabile alle nuove versioni dell'AMI. Mettendo questo fuori comunque.


Prova a eseguire il seguente one-liner:sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade
DarkNeuron

Inoltre, ecco il bug più recente (regressione) di cui sopra: bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.