100% неінтерактивне оновлення Debian dist


38

Чи є спосіб зробити apt-get dist-upgradeDebian, який не лише автоматично відповідає "так" на всі задані питання, але і використовує розумні за замовчуванням відповіді на запитання, які є досить складними, щоб вимагати появи різних інтерактивних діалогових вікон? Я тут думаю про ключові карти, які з’являються під час оновлення libc6, та вибір зображення ядра.

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

Невже це можливо?

Спасибі заздалегідь!


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

Відповіді:


42

Якщо ви встановите DEBIAN_FRONTEND=noninteractive(щоб зупинити Debconf підказки від з'являтися) і додати force-confoldі force-confdefв свій /etc/dpkg/dpkg.cfgфайл, ви повинні мати повністю неінтерактивний досвід установки пакета. Будь-який пакет, який все ще пропонує вам інформацію, має критичну помилку при випуску (і я кажу, що як наркоман з автоматизації, так і як розробник Debian).


це не спрацювало для мене. apt-listchangesбуло відкрито less.
Магнітар

@magnetar: Проблема з apt-listchanges, а не apt. Видаліть зміни apt-list або налаштуйте їх відповідним чином.
живіт

1
Спробуйте: env APT_LISTCHANGES_FRONTEND = none apt-get dist-upgrade -u -y
H.-Dirk Schmitt

21

Флоріан Лохофф опублікував спосіб змусити те, що запропонував ВІНЛЬ, в одну команду:

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

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


W: --force-yes is deprecated, use one of the options starting with --allow instead.
Алекс

3

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

Далі наводиться сценарій, який буде працювати відповідно до рекомендацій щодо оновлення дебілентів 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 так"; це небезпечний варіант, який спричинить здатність apt продовжуватись без спонукань, якщо він робить щось потенційно шкідливе. Його не слід використовувати, за винятком дуже особливих ситуацій. Використання force-yes може потенційно знищити Ваша система! Елемент конфігурації: APT :: Get :: force-yes. Це застаріле і замінено на --allow-downgrades, --allow-remove-basic, --allow-change-hold-пакети в 1.1. "
Олексій

1

> = Apt 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 .

Пов'язані:


-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).


5
Я знаю про це. Я використовую цей прапор, і він успішно відповідає "так" на стандартні питання APT Y / N щодо збереження перезаписів існуючих конфігурацій тощо, і т. Д. Це не питання, на які я звертаюсь. Коли я роблю apt-get -y dist-upgrade, він все-таки дав мені підказки "діалогового вікна" щодо того, що він вважає, великі квитки, тобто зміни клавішної карти, перезапуск служби, пов'язаної з libc6, і т.д. Я шукав додатковий прапор для вимкніть і це.
Олексій Балашов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.