100% nieinteraktywna aktualizacja Debiana

38

Czy istnieje sposób na wykonanie apt-get dist-upgradew Debianie odpowiedzi, która nie tylko automatycznie odpowie „tak” na wszystkie zadane pytania, ale także zastosuje rozsądne wartości domyślne jako odpowiedzi na pytania, które są na tyle skomplikowane, że wymagają wyskakujących okienek z interaktywnymi oknami dialogowymi? Myślę tutaj o mapach klawiszy, które pojawiają się podczas aktualizacji libc6, oraz o wyborze obrazu jądra.

Chodzi o to, aby móc zdalnie zainicjować dość dużą dist-upgrade- nawet w przypadku maszyny, która jest bardzo opóźniona - i nie musieć opiekować się nią w ogóle, chyba że coś jest po prostu strasznie, katastrofalnie złe.

Czy to możliwe?

Z góry dziękuję!

Alex Balashov
źródło
Dla tych, którzy chcą tylko uaktualnić (zamiast dist-upgrade) na Ubuntu, wypróbuj pakiet nienadzorowanej aktualizacji .
Jo Liss,

Odpowiedzi:

42

Jeśli ustawisz DEBIAN_FRONTEND=noninteractive(aby zatrzymać wyświetlanie monitów debconf) i dodasz force-confoldoraz force-confdefdo swojego /etc/dpkg/dpkg.cfgpliku, powinieneś mieć całkowicie nieinteraktywną instalację pakietu. Każdy pakiet, który wciąż prosi o podanie informacji, zawiera błąd krytyczny dla wydania (i mówię, że zarówno jako ćpun automatyzacji, jak i jako deweloper Debiana).

womble
źródło
to nie działało dla mnie. apt-listchangeszostał otwarty przez less.
magnetar
@magnetar: To problem z apt-listchanges, a nie apt. Odinstaluj apt-listchanges lub odpowiednio go skonfiguruj.
womble
1
Spróbuj: env APT_LISTCHANGES_FRONTEND = brak apt-get dist-upgrade -u -y
H.-Dirk Schmitt
21

Florian Lohoff opublikował sposób, aby uzyskać sugestię womble w jednym poleceniu:

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

Oczywiście możesz także użyć -o Dpkg::Options::="--force-confnew --force-confdef"(wyszukaj na stronie podręcznika dpkg w poszukiwaniu informacji). Nie jestem jednak pewien, w jakich przypadkach miałoby to znaczenie. Osobiście potrzebuję nieinteraktywnego uaktualnienia, aby zaktualizować obrazy waniliowe, w takim przypadku przypuszczam, że zawsze wybranie nowego pliku konfiguracyjnego (bez --force-confdef) jest rozsądną rzeczą.

Jo Liss
źródło
W: --force-yes is deprecated, use one of the options starting with --allow instead.
Alex
3

Chociaż powyższa odpowiedź womble jest ogólnie dobra, nie zadziałała dla mnie i musiałem przeprowadzić dodatkowe badania, aby przejść w 100% bez nadzoru. Pomyślałem, że podzielę się rezultatem w zwięzły sposób, aby ułatwić przyszłym użytkownikom.

Poniżej znajduje się skrypt, który będzie działał zgodnie z zaleceniami aktualizacji informacji o wersji debian 8 (głównie) wraz z flagami i zmiennymi środowiskowymi, które spowodują, że będzie on bezobsługowy. ( echosą tylko do debugowania i mogą zostać usunięte - chociaż zalecam ich przechowywanie, więc jeśli skrypt utknie, będziesz wiedział, gdzie)

#!/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
Tom Klino
źródło
1
Uwaga: „--force-yes Siła tak; jest to niebezpieczna opcja, która spowoduje, że apt będzie kontynuować bez pytania, czy robi coś potencjalnie szkodliwego. Nie należy jej używać z wyjątkiem bardzo szczególnych sytuacji. Użycie force-yes może potencjalnie zniszczyć twój system! Element konfiguracji: APT :: Get :: force-yes. To jest przestarzałe i zastąpione przez --allow-downgrades, --allow-remove-essential, --allow-change-hold-packages w 1.1. ”
Alex
1

> = Apt 1.1

Jeśli używasz Apt 1,1 lub powyżej, --force-yeszostała zaniechana , więc masz do korzystania z opcji zaczynając --allowzamiast, na przykład --allow-downgrades, --allow-remove-essential, --allow-change-held-packages.

Zatem polecenie brzmi:

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

Uwaga: Użyj, --force-confoldaby zachować stare i --force-confnewzachować nowe konfiguracje.

Źródło: CFE-2360: Uczyń wersję modułu pakietu apt_get świadomą .

Związane z:

kenorb
źródło
-4

Ze strony podręcznika 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.

Dla porównania, -yopcja działa yum(8)również na.

koenigdmj
źródło
5
Wiem o tym. Używam tej flagi i z powodzeniem odpowiada „tak” na standardowe pytania APT T / N dotyczące nadpisywania istniejących konfiguracji itp. Itp. To nie są pytania, o których mówię. Kiedy wykonuję apt-get -y dist-upgrade, wciąż wyświetlało mi się kilka „dialogów” z pytaniami o to, co uważa za duże rzeczy, tj. Zmiany mapy klawiszy, restart usługi związanej z libc6 itp. Szukałem dodatkowej flagi, aby wyłącz to również.
Alex Balashov