Как делают я склонный - получаю dist-обновление-y без подсказки конфигурации личинки?

На Делают склонными - становятся (или способность) выполненным с-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                                                        │                              
64
задан 13 April 2017 в 15:24

5 ответов

Предыдущие решения не работали с 16.04. Это работает из этот ответ о переполнении стека :

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold"  install grub-pc
0
ответ дан 13 April 2017 в 15:24

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

Я оставил опции Dpkg force-confnew для других пакетов, которые не являются 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
0
ответ дан 13 April 2017 в 15:24

Файл /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. Если вы столкнетесь с таким пакетом, сообщите об ошибке.

0
ответ дан 13 April 2017 в 15:24

В последние несколько дней я обсуждаю ту же проблему с 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. В любом случае, просто добавлю это.

0
ответ дан 13 April 2017 в 15:24

После долгих испытаний единственное, что сработало, это:

dpkg-reconfigure debconf -f noninteractive -p critical
UCF_FORCE_CONFFOLD=YES apt -o Dpkg::Options::="--force-confdef" -o DPkg::Options::="--force-confold" -y dist-upgrade

Для того, что я делал (Ubuntu 16.04 в Vagrant с инициализацией), DEBIAN_FRONTEND=noninteractive был недостаточно. Спасибо другим в этой теме, мне нужно было добавить UCF_FORCE_CONFFOLD=YES для grub-pc

3
ответ дан 9 August 2020 в 06:28

Другие вопросы по тегам:

Похожие вопросы: