Jak zautomatyzować zmienione pliki konfiguracyjne podczas aktualizacji apt-get w Ubuntu 12

13

Lubię używać „nóż cloudstack server create ...”, aby zbudować nową maszynę wirtualną. Mój szablon bootstrap zaczyna się od „apt-get update” i „apt-get -y upgrade”.

Uaktualnienie kończy się wtedy, gdy:

10.190.113.11 Configuration file `/etc/nscd.conf'
10.190.113.11  ==> Modified (by you or by a script) since installation.
10.190.113.11  ==> Package distributor has shipped an updated version.
10.190.113.11    What would you like to do about it ?  Your options are:
10.190.113.11     Y or I  : install the package maintainer's version
10.190.113.11     N or O  : keep your currently-installed version
10.190.113.11       D     : show the differences between the versions
10.190.113.11       Z     : start a shell to examine the situation
10.190.113.11  The default action is to keep your current version.
10.190.113.11 *** nscd.conf (Y/I/N/O/D/Z) [default=N] ?

Są więc naprawdę dwa problemy:

Po pierwsze, czy mogę dostać apt-get, aby coś zrobił domyślnie? Oczywiście nie ma sposobu na udzielenie odpowiedzi.

Po drugie, nawet nie wiem, jaka powinna być właściwa odpowiedź na pytanie. Zastępowany plik konfiguracyjny pochodzi z szablonu. Jeszcze nie sprawdziłem, co w ogóle robi „nscd”. (Przypuszczalnie „Y” jest prawidłową odpowiedzią, ale badania przeprowadzone w momencie pytania są zniechęcające.)

Mojo
źródło

Odpowiedzi:

15

Możesz przekazać argumenty, aby uniknąć wyświetlania monitów. To działa dla mnie;

apt-get update
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

--force-confold(mój wybór) sprawi, że pytania „Co chcesz zrobić ze zmodyfikowanym plikiem konfiguracyjnym” będą domyślnie Nustawione na (zachowaj aktualnie zainstalowaną wersję)

--force-confold: do not modify the current configuration file, the new version is installed with a .dpkg-dist suffix. With this option alone, even configuration files that you have not modified are left untouched. You need to combine it with --force-confdef to let dpkg overwrite configuration files that you have not modified.
--force-confnew: always install the new version of the configuration file, the current version is kept in a file with the .dpkg-old suffix.
--force-confdef: ask dpkg to decide alone when it can and prompt otherwise. This is the default behavior of dpkg and this option is mainly useful in combination with --force-confold.
--force-confmiss: ask dpkg to install the configuration file if it’s currently missing (for example because you have removed the file by mistake).

Ostrzeżenie - niektóre zmodyfikowane pliki konfiguracyjne mogą uszkodzić system, jeśli zostaną przywrócone i nie będą zgodne ze zaktualizowaną wersją pakietu. Sprawdź to przed wdrożeniem w rozwiązaniach automatyzacyjnych.

Jossef Harush
źródło
5

Jeśli absolutnie nie chcesz odpowiadać na interaktywne pytania, ustaw DEBIAN_FRONTENDzmienną frontonu na noninteractive.

To może być tak proste jak DEBIAN_FRONTEND=noninteractive apt-get upgrade.

Nie otrzymasz żadnych wiadomości i zostaną wybrane ustawienia domyślne. W większości przypadków oznacza to, że pliki konfiguracyjne nie zostaną zmienione, a Ty pozostaniesz z plikami o nazwach podobnych *.dpkg-newdo wszystkich miejsc, w których plik konfiguracyjny nie został zmieniony . Następnie możesz ręcznie rozwiązać zmiany lub przekazać lokalną konfigurację do systemu za pomocą systemu zarządzania konfiguracją lub cokolwiek innego.

Po drugie, nawet nie wiem, jaka powinna być właściwa odpowiedź na pytanie

Naciśnięcie klawisza D wyświetli różnicę, którą możesz następnie sprawdzić. Jeśli masz pewność, że nigdy nie zmieniłeś ręcznie tego pliku, wybranie Y, aby go zastąpić, jest prawdopodobnie bezpieczne (sprawdziłeś, czy twoje kopie zapasowe aktualizują PRAWO !! ). Wybranie N powoduje, że stary plik jest bezpieczny przez 95% czasu, chyba że pakiet zawiera poważne zmiany, które zwykle są omówione w dzienniku zmian / wydaniach, które również przeczytałeś przed uruchomieniem polecenia upgrade / dist-upgrade.

W przeszłości wystarczy wypróbować polecenie w środowisku testowym. Sprawdź, czy coś nie działa. Jeśli naprawdę nie jesteś pewien, zdobądź różnicę i przeczytaj dokumentację pakietu i badań.

Zoredache
źródło
Radzisz DEBIAN_FRONTEND = nieinteraktywny ponad --force-tak? Wygląda na to, że domyślnie ustawiony jest na NIE, a „tak” jest bardziej prawdopodobne w tym przypadku. (Nie mogę nacisnąć żadnego klawisza, ponieważ nie ma standardowego wejścia.)
Mojo