100% неинтерактивный дистрибутив Debian
Есть ли способ сделать apt-get dist-upgrade
в Debian, который не только автоматически отвечает "да" на все задаваемые вопросы, но также использует разумные значения по умолчанию в качестве ответов на достаточно сложные вопросы, требующие появления различных интерактивных диалоговых окон? Я думаю о раскладке клавиш, которая появляется при обновлении libc6
и выбор образа ядра.
Цель состоит в том, чтобы иметь возможность удаленно инициировать довольно большой dist-upgrade
- даже для машины, которая сильно отстала от времени - и ей вообще не придется нянчиться, если только что-то не ужасно, катастрофически неправильно.
Конечно, это возможно?
Заранее спасибо!
5 ответов
Если вы установите 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"
(ищите confnew на справочной странице dpkg). Я не уверен, в каких случаях это будет иметь значение, хотя. Мне лично нужно неинтерактивное обновление, чтобы обновлять ванильные образы, и в этом случае я полагаю, всегда выбирая новый файл конфигурации (без --force-confdef
) это разумная вещь.
Несмотря на то, что ответ Womble выше, как правило, хороший, он не сработал для меня, и мне пришлось провести дополнительное исследование, чтобы остаться без присмотра. Я думал, что поделюсь результатом в сжатой форме, чтобы сделать вещи проще для будущих посетителей.
Ниже приведен скрипт, который будет работать в соответствии с рекомендациями по обновлению примечаний к выпуску Debian 8 (в основном), а также с флагами и переменными среды, которые сделают его необслуживаемым (echo
Они предназначены только для отладки и могут быть удалены - хотя я рекомендую хранить их, чтобы в случае зависания скрипта вы знали, где)
#!/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)
также.