100% неинтерактивный дистрибутив Debian

38

Есть ли способ сделать apt-get dist-upgradeв Debian, который не только автоматически отвечает «да» на все задаваемые вопросы, но также использует разумные значения по умолчанию в качестве ответов на вопросы, достаточно сложные, чтобы требовать всплывающих диалоговых окон? Я думаю о раскладке клавиш, которая появляется при обновлении libc6, и выборе образа ядра.

Цель состоит в том, чтобы иметь возможность удаленно инициировать довольно крупную dist-upgrade- даже для машины, которая сильно отстала от времени - и вообще не приходиться нянчиться с ней, если только что-то не ужасно, катастрофически неправильно.

Конечно, это возможно?

Заранее спасибо!

Алекс Балашов
источник
Для тех, кто хочет только обновить (а не dist-upgrade) в Ubuntu, попробуйте пакет автоматического обновления .
Джо Лисс

Ответы:

42

Если вы установите DEBIAN_FRONTEND=noninteractive(чтобы запретить появление запросов debconf) и добавили force-confoldи force-confdefк своему /etc/dpkg/dpkg.cfgфайлу, у вас должен быть совершенно неинтерактивный опыт установки пакетов. Любой пакет, который все еще запрашивает у вас информацию, имеет критическую ошибку релиза (и я говорю, что и как наркоман автоматизации, и как разработчик Debian).

romble
источник
это не сработало для меня. apt-listchangesбыл открыт less.
Магнетар
@magnetar: Это проблема с apt-listchanges, а не apt. Удалите apt-listchanges или настройте его соответствующим образом.
Вомбл
1
Попробуйте: env APT_LISTCHANGES_FRONTEND = нет apt-get dist-upgrade -u -y
Х.-Дирк Шмитт
21

Флориан Лохофф опубликовал способ получить то, что предложил womble, в одной команде:

DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::="--force-confnew" \
--force-yes \
-fuy \
dist-upgrade

Конечно, вы также можете использовать -o Dpkg::Options::="--force-confnew --force-confdef"(ищите confnew на справочной странице dpkg). Я не уверен, в каких случаях это будет иметь значение, хотя. Я лично нуждаюсь в неинтерактивном обновлении, чтобы обновлять ванильные образы, и в этом случае я полагаю, всегда --force-confdefразумно выбирать новый файл конфигурации (без ).

Джо Лисс
источник
W: --force-yes is deprecated, use one of the options starting with --allow instead.
Алекс
3

Несмотря на то, что ответ Womble выше, как правило, хороший, он не сработал для меня, и мне пришлось провести дополнительное исследование, чтобы остаться без присмотра. Я думал, что поделюсь результатом в сжатой форме, чтобы сделать вещи проще для будущих посетителей.

Ниже приведен скрипт, который будет работать в соответствии с рекомендациями по обновлению примечаний к выпуску Debian 8 (в основном), а также с флагами и переменными среды, которые сделают его необслуживаемым. ( echos только для отладки и могут быть удалены - хотя я рекомендую сохранить их, так что если скрипт застрянет, вы будете знать, где)

#!/bin/bash

apt-get remove apt-listchanges --assume-yes --force-yes &&

#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&

#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&

echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&

echo "executing autoremove" &&
apt-get -fuy --force-yes autoremove &&

echo "executing clean" &&
apt-get --force-yes clean &&

echo "executing update" &&
apt-get update &&

echo "executing upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy upgrade &&

echo "executing dist-upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy dist-upgrade
Том Клино
источник
1
Примечание: «--force-yes Force yes; это опасный параметр, который заставляет apt продолжать работу без запроса, если он делает что-то потенциально опасное. Его нельзя использовать, кроме как в очень особых ситуациях. Использование force-yes может потенциально уничтожить ваша система! Элемент конфигурации: APT :: Get :: force-yes. Это устарело и заменено на --allow-downgrades, --allow-remove-essential, --allow-change-hold-packages в 1.1. "
Алекс
1

> = Апт 1.1

Если вы используете Апт 1,1 или выше, --force-yesявляется устаревшим , поэтому вы , чтобы использовать опции , начиная с --allowвместо этого, например --allow-downgrades, --allow-remove-essential, --allow-change-held-packages.

Итак, команда:

DEBIAN_FRONTEND=noninteractive \
  apt-get \
  -o Dpkg::Options::=--force-confold \
  -o Dpkg::Options::=--force-confdef \
  -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
  dist-upgrade

Примечание: используйте, --force-confoldчтобы сохранить старые и --force-confnewсохранить новые конфиги.

Источник: CFE-2360: Информировать о версии модуля пакета apt_get .

Связанный:

kenorb
источник
-4

Со apt-get(8)страницы руководства :

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

Для справки, -yопция работает yum(8)также.

koenigdmj
источник
5
Я знаю об этом. Я использую этот флаг, и он успешно отвечает «да» на стандартные вопросы APT Y / N о продолжении перезаписи существующих конфигов и т. Д. И т. Д. Это не те вопросы, на которые я ссылаюсь. Когда я делаю apt-get -y dist-upgrade, он по-прежнему выдает мне некоторые «диалоговые» подсказки о том, что он рассматривает как «большие тикеты», например, изменения в раскладке клавиатуры, перезапуск службы, связанной с libc6, и т. Д. Я искал дополнительный флаг для выключи это тоже.
Алекс Балашов