Как мне apt-get -y dist-upgrade без приглашения конфигурации grub?


63

Per Make apt-get (или aptitude) запускается с ключом -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-selections перед первой командой apt-get
fratrik

Я получил эту же проблему и перепробовал много разных вариантов написания Dpkg :: Options :: =, ни одна из которых не сработала. Я также попытался добавить строки в файл /etc/apt/apt.conf.d/local, как указано, и они тоже не работали. Это похоже на регрессию в Precise.
Скотт Ричи

+1 - спасибо, что спросили - было на удивление легко найти эту
ветку

Ответы:


95

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

Вместо этого он использует ucfболее сложный инструмент Debian для обработки конфигурации. Это, к сожалению, не понимает параметров dpkg, поэтому настройка Dpkg::Options::="--force-confdef"не поможет. Тем не менее, у него есть свой собственный способ обновления без подсказок через переменные среды UCF_FORCE_CONFFNEWи UCF_FORCE_CONFFOLD.

ucfиспользуется debconfдля запроса, поэтому установка интерфейса debconf noninteractiveтакже отключит сообщение. Если вы действительно хотите неинтерактивные обновления, вам все равно придется это делать - произвольные пакеты могут задавать вопросы debconf (хотя, как правило, этого не происходит во время обновлений).

Вы можете установить интерфейс 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. У него есть запрос на перезагрузку apache для обработки нового файла conf, но он ломается при попытке автоматизировать установку ganglia, - добавил ваш комментарий вперед и исправил проблему
Джереми Хайек,

19

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

я оставил опции принудительного открытия Dpkg для других пакетов, которые не являются 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
Это было единственное, что сработало для меня. Спасибо!
Вт

1
Допустим, вы также используете unattended-upgradesи отредактировали некоторую конфигурацию grub: как вы устанавливаете UCF_FORCE_CONFFNEWв этом контексте? Или вам нужно занести в черный список grub от обновления?
thom_nic


1

Последние несколько дней я обсуждаю ту же проблему с Ubuntu 18.04. При запуске нового экземпляра EC2 (в частности, ami-00035f41c82244dab) я запускаю сценарий автоматической инициализации (через конфигурацию пользовательских данных, предоставленную во время инициализации), одним из первых шагов которой является запуск apt update / upgrade.

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

Похоже, что из-за большого количества поисков в Google это была давняя проблема 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
DarkNeuron

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