Jak mogę apt-get -y dist-upgrade bez monitu o konfigurację grub?

63

Czy chcesz, aby apt-get (lub aptitude) działał z opcją -y, ale nie monitował o zamianę plików konfiguracyjnych?

Zrobiłem następujące:

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

Na maszynie:

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

Nadal pojawia się monit z pytaniem, którego pliku konfiguracyjnego chcę użyć. Oto linie poprzedzające monit:

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

następnie:

                         ┌───────────────────────────────────────────────────────┤ 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
źródło
Niezadowalające obejście: echo grub-pc hold | sudo dpkg --set-selections przed pierwszym poleceniem apt-get
fratrik
Otrzymuję ten sam problem i próbowałem wielu różnych permutacji / pisowni Dpkg :: Options :: =, z których żaden nie działał. Próbowałem również dodać wiersze do pliku /etc/apt/apt.conf.d/local, jak wskazano, i one również nie działały. To wydaje się być regresem w Precyzji.
Scott Ritchie,
+1 - dziękuję za pytanie - zaskakująco łatwo było znaleźć ten wątek na ten irytujący problem
cwd

Odpowiedzi:

94

/etc/default/grubPlik jest generowany w czasie instalacji pakietu, który jest konieczny, ponieważ integruje się z debconf. Oznacza to, że nie można go traktować jako pliku conf dpkg, a więc obsługa plików konfiguracyjnych dpkg nie wie o tym.

Zamiast tego wykorzystuje ucfbardziej wyrafinowane narzędzie Debiana do obsługi konfiguracji. To niestety nie rozumie opcji dpkg, więc ustawienie Dpkg::Options::="--force-confdef"nie pomoże. Ma jednak swój własny sposób dokonywania bezzwłocznych aktualizacji za pomocą zmiennych środowiskowych UCF_FORCE_CONFFNEWi UCF_FORCE_CONFFOLD.

ucfużywa debconfdo monitowania, więc ustawienie interfejsu debconf na noninteractiverównież wyciszy wiadomość. Jeśli naprawdę chcesz aktualizacji nieinteraktywnych, i tak musisz to zrobić - dowolne pakiety mogą zadawać pytania debconf (chociaż zazwyczaj nie będą to robić podczas aktualizacji).

Możesz ustawić interfejs debconf jako jednorazowy, dodając DEBIAN_FRONTEND=noninteractivedo swojego środowiska, lub możesz ustawić go na stałe, uruchamiając dpkg-reconfigure debconfi wybierając nieinteraktywną nakładkę. Jeśli używasz nieinteraktywnej nakładki, otrzymasz domyślną odpowiedź na wszelkie pytania, które może zadać pakiet.

Dla ucfdomyślna odpowiedź brzmi „zachować istniejący plik”.

Tak więc pełne polecenie wykonania naprawdę, w 100% gwarantowanej¹ aktualizacji bez monitowania byłoby.

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

¹: Technicznie możliwe jest, aby pakiety używały innej metody monitowania niż debconf, ale jest to sprzeczne z polityką Debiana. Jeśli natrafisz na taki pakiet, zgłoś błąd.

RAOF
źródło
8
Zauważ, że jeśli testujesz to na powłoce, polecenie sudo wydaje się usuwać zmienną DEBIAN_FRONTEND, tzn. Potrzebujesz sudo DEBIAN_FRONTEND = nieinteraktywny apt-get -y dist-upgrade, podczas gdy DEBIAN_FRONTEND = nieinteraktywny sudo apt-get -y dist-upgrade nie powiedzie się
Scott Ritchie
działało dobrze dla mnie, dziękuję
cwd
Zauważ również, że jest to uważane za błąd i udostępniają nowe obrazy AMI, które nie powinny mieć tego problemu: bugs.launchpad.net/ubuntu/+bug/1009294
Scott Ritchie
A nowe AMI są teraz wypuszczone.
Scott Ritchie
@ScottRitchie - twój komentarz działa również, aby pomóc zautomatyzować instalację pakietu ganglia-webfrontend. Pojawia się monit o ponowne uruchomienie apache w celu przetworzenia nowego pliku conf, ale to się psuje, gdy próbuje zautomatyzować instalację zwojów - dodał twój komentarz z przodu i naprawił problem
Jeremy Hajek
19

wychodząc z odpowiedzi RAOF i po spędzeniu niezliczonych godzin na wyszukiwaniu w sieci, aby móc przeprowadzić całkowicie bezdotykową aktualizację i aktualizację na Ubuntu 12.04, wymyśliłem to dzięki temu, że ten post ( https: // błędy .launchpad.net / ubuntu / + source / grub / + bug / 239674 / comments / 1 ) zwraca uwagę, że grub jest zgodny z UCF, a nie z opcjami Dpkg, gdy chcesz używać menu grub. opiekunów pakietów zamiast menu lokalnego .lst edycje.

zostawiłem opcje Dpkg wymuszonego sprawdzenia dla innych pakietów, które nie są 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
źródło
1
To była jedyna rzecz, która działała dla mnie. Dzięki!
wes
1
Powiedzmy, że używasz unattended-upgradesi edytowałeś trochę konfiguracji gruba: jak ustawić UCF_FORCE_CONFFNEWw tym kontekście? A może chcesz zaktualizować gruba na czarnej liście?
thom_nic,
3

Poprzednie rozwiązania nie działały z 16.04. Działa to z odpowiedzi na przepełnienie stosu :

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold"  install grub-pc
StringsOnFire
źródło
1

W ostatnich dniach miałem problem z tym samym problemem na Ubuntu 18.04. Po uruchomieniu nowej instancji EC2 (w szczególności ami-00035f41c82244dab) uruchamiam skrypt automatycznego udostępniania (za pośrednictwem konfiguracji danych użytkownika dostarczonej w momencie inicjalizacji), której jednym z pierwszych kroków jest uruchomienie apt update / upgrade.

Skrypt jest blokowany, gdy użytkownik jest monitowany o zmodyfikowane pliki GRUB - najpierw / etc / default / grub, a następnie /boot/grub/menu.lst. Ponieważ działa on w trybie nienadzorowanym, gdy jest dostarczany jako Dane użytkownika, proces zatrzymuje się i nigdy nie odzyskuje.

Z wielu Googlingów wydaje się, że był to od dawna problem GRUB w takiej czy innej formie, z poprawkami, które zostały zastosowane, a następnie ponownie się cofnęły, o ile wiem.

Ostatecznie jedynym obejściem, które udało mi się zastosować z powodzeniem, jest następujący brzydki hack w moim skrypcie udostępniania. Mam nadzieję, że może to jednak wydostać kogoś z więzienia!

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

Mogę tylko założyć, że napotkany problem jest dość specyficzny dla aktualnie dostępnej wersji AMI Ubuntu 18.04, a każda zaktualizowana wersja zawierająca nowsze pakiety GRUB może nie podlegać temu samemu problemowi. W szczególności charakter zmian /etc/default/grubprawdopodobnie nie będzie miał zastosowania do nowszych wersji AMI. W każdym razie po prostu to tam zamieszczam.

John Rix
źródło
Spróbuj uruchomić następujący liniowiec:sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade
DarkNeuron
Oto także najnowszy błąd (regresja) wspomniany powyżej: bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron