Назад | Перейти на главную страницу

100% неинтерактивное обновление Debian dist-upgrade

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

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

Неужто это возможно?

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

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

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

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

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

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

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

Если вы используете Apt 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.

Связанный:

Из 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) также.