Як зробити apt-get -y dist-upgrade без підказки grub config?


63

Заздалегідь зробіть apt-get (або здатність) запускати з -y, але не вимагати заміни файлів конфігурації?

Я зробив наступне:

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

На верстаті:

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

У мене все ще з'являється запит, який конфігураційний файл я хочу використовувати. Це рядки, що надходять до підказки:

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

тоді:

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

Незадовільний спосіб вирішення: ехо grub-pc hold | sudo dpkg --set-selection перед першою командою apt-get
fratrik

Я отримую цю саму проблему і спробував багато різних перестановок / написання Dpkg :: Опції :: =, жодна з яких не спрацювала. Я також спробував додати рядки до файлу /etc/apt/apt.conf.d/local, як зазначено, і вони не працювали. Це здається регресом в Precision.
Скотт Річі

+1 - спасибі за запитання - напрочуд легко знайти цю тему до цієї прикрої проблеми
cwd

Відповіді:


94

/etc/default/grubФайл створюється в пакеті установки часу, який необхідний , тому що вона інтегрується з DebConf. Це означає, що він не може розглядатися як файл конфіденційності dpkg, і тому обробка файлу конфігураційного файлу dpkg не знає про це.

Натомість він використовує ucfбільш складний інструмент Debian для обробки конфігурації. На жаль, це не розуміє параметри dpkg, тому налаштування Dpkg::Options::="--force-confdef"не допоможе. Однак у нього є свій спосіб робити невідкладні оновлення, однак через змінні UCF_FORCE_CONFFNEWта UCF_FORCE_CONFFOLDсередовище.

ucfвикористовує debconfдля запиту, тому встановлення інтерфейсу debconf noninteractiveтакож замовчуватиме повідомлення. Якщо ви дійсно хочете неінтерактивних оновлень, вам це все одно доведеться робити - довільні пакети можуть задавати питання deconcon (хоча вони, як правило, під час оновлення не будуть).

Ви можете встановити інтерфейс debconf як одноразовий, додавши DEBIAN_FRONTEND=noninteractiveдо свого оточення, або можете його постійно встановити, запустивши dpkg-reconfigure debconfта вибравши неінтерактивний фронт. Якщо ви використовуєте неінтерактивний інтерфейс, ви отримаєте відповідь за замовчуванням на будь-які питання, які може задати пакет.

Адже ucfвідповідь за замовчуванням - "зберегти існуючий файл".

Таким чином, повна команда зробити дійсно, 100% гарантоване ¹ не вимагає оновлення.

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

¹: Пакети технічно можливо використовувати інший метод спонукання, ніж debconf, але це суперечить політиці Debian. Якщо ви натрапили на такий пакет, подайте помилку.


8
Зауважте, що якщо ви тестуєте це на оболонці, команда sudo, здається, видалить змінну DEBIAN_FRONTEND, тобто вам потрібна sudo DEBIAN_FRONTEND = неінтерактивна apt-get -y dist-upgrade, тоді як DEBIAN_FRONTEND = неінтерактивна sudo apt-get -y dist-upgrade не вдасться
Скотт Річі

добре працював для мене, дякую
cwd

Також зауважте, що це вважається помилкою, і вони випускають нові зображення AMI, які не повинні мати цю проблему: bugs.launchpad.net/ubuntu/+bug/1009294
Скотт Річі

І нові AMI тепер випущені.
Скотт Річі

@ScottRitchie - ваш коментар також працює для автоматизації встановлення пакету ganglia-webfrontend. У ньому з'являється запит на перезавантаження апачу для обробки нового файлу конф, але ця помилка під час спроби автоматизувати встановлення ganglia - додав ваш коментар до фронту та виправив проблему
Джеремі Гаек

19

відмовившись від відповіді RAOF і, витративши незліченну кількість годин на пошук в Інтернеті, щоб мати змогу здійснити цілковитне оновлення та дистрибутив на Ubuntu 12.04, я придумав це завдяки тому, що ця публікація ( https: // помилки .launchpad.net / ubuntu / + source / grub / + bug / 239674 / comments / 1 ) вказує на те, що grub дотримується UCF, а не Dpkg Options, коли ви хочете використовувати меню зберігачів grub menu.lst замість будь-якого можливого локального меню .lst правки.

Я залишив параметри Dpkg примусового обмеження для інших пакетів, які не збиваються.

#!/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
Це було єдине, що працювало на мене. Дякую!
вс

1
Отже, скажімо, ви також використовуєте unattended-upgradesта відредагували конфігурацію grub: як встановити UCF_FORCE_CONFFNEWцей контекст? Або вам потрібно буде не оновлювати групу в чорному списку?
thom_nic


1

Я спіткнувся з тим же номером на Ubuntu 18.04 останні кілька днів. Запускаючи новий екземпляр EC2 (зокрема ami-00035f41c82244dab), я запускаю скрипт автоматизованого забезпечення (через конфігурацію даних користувача, що постачається під час ініціалізації), одним з перших кроків якого є запуск apt оновлення / оновлення.

Сценарій блокується, коли користувачу пропонується змінити файли GRUB - спочатку / etc / default / grub, а потім /boot/grub/menu.lst. Оскільки це працює в режимі без нагляду, коли він подається як дані користувача, процес зупиняється і ніколи не відновлюється.

Як багато я можу сказати, з багатьох Googling, здається, це проблема, яка вже давно працює GRUB в тій чи іншій формі, застосовуються виправлення, а потім остання регресує.

Зрештою, єдиний спосіб, який я зміг успішно застосувати, - це наступний некрасивий злом у моєму сценарії забезпечення. Будемо сподіватися, що це може змусити когось іншого зв'язати!

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

Я можу лише припустити, що проблема, з якою я зіткнулася, досить специфічна для наявної на даний момент версії Ubuntu 18.04 AMI, і будь-яка оновлена ​​версія, що включає новіші пакети GRUB, може не піддаватися тій самій проблемі. Зокрема, характер змін, /etc/default/grubякі можуть бути застосовні до новіших версій AMI. Просто поклавши це все одно.


Спробуйте запустити наступний sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade
однолайн

Також ось останній помилка (регресія), згаданий вище: bugs.launchpad.net/cloud-images/+bug/1747464
DarkNeuron
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.