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

53

Per Сделать 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                                                        │                              
    
задан fratrik 05.06.2012 в 19:27
источник

3 ответа

77

Файл /etc/default/grub создается при времени установки пакета, что необходимо, поскольку оно интегрируется с debconf. Это означает, что он не может рассматриваться как файл conf 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. Если вы столкнетесь с таким пакетом, напишите ошибку.

    
ответ дан RAOF 06.06.2012 в 05:28
источник
15

выход из ответа RAOF и проведя бесчисленное количество часов в Интернете, чтобы иметь возможность полностью обновлять обновление и amp; dist-upgrade на Ubuntu 12.04, я придумал это благодаря тому, что этот пост ( Ссылка ) указывает, что 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
    
ответ дан metral 28.02.2013 в 20:31
2

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

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold"  install grub-pc
    
ответ дан StringsOnFire 08.01.2017 в 16:37