Czy mogę dokonać aktualizacji cichej lub nienadzorowanej?

31

Jak zaktualizować do nowej wersji Ubuntu bez konieczności reagowania na monity?

Mam teraz 12.04 i chciałbym zainstalować 12.10. Kiedy zaczynam aktualizację, zazwyczaj pobiera rzeczy, a następnie zadaje pytanie, instaluje się trochę, zadaje pytanie itp. Zostawiam je na noc i czasami okazuje się, że aktualizacja nie spowodowała prawie żadnego postępu. Chciałbym po prostu rozpocząć proces, odejść i zakończyć go po kilku godzinach. Nie mam nic przeciwko automatycznej aktualizacji plików konfiguracyjnych w / etc i tak dalej. Jak więc rozpocząć nienadzorowaną aktualizację?

jdm
źródło

Odpowiedzi:

42

Następujące polecenie uaktualnia do nowej stabilnej wersji bez monitów:

do-release-upgrade -f DistUpgradeViewNonInteractive

Następujące polecenie aktualizuje do aktualnej wersji programistycznej bez monitów:

do-release-upgrade -d -f DistUpgradeViewNonInteractive

Nie przetestowałem tego, ale wygląda na to, że wykonuje ono domyślną akcję, gdy pojawi się pytanie. Przekracza limit czasu wszystkich skryptów, jeśli zawieszają się zbyt długo.

Być może będziesz musiał użyć dpkg-reconfigurepóźniej, jeśli nie jesteś zadowolony z konfiguracji niektórych pakietów, ale przez większość czasu powinieneś być w porządku.

Źródło: http://awaseroot.wordpress.com/2012/04/29/ubuntu-release-upgrade-fully-automatic-non-interactive-upgrade/ . W linku są też inne sposoby, aby to zrobić.

jdm
źródło
Unikaj odwoływania się do treści z linków, ale dołącz także odpowiednie informacje, aby uniknąć utraty informacji, jeśli witryna nie będzie dostępna.
k0pernikus
Zrobiłem to i wszystko wydawało się działać, ale po ponownym uruchomieniu dostałem tylko błąd grub , więc wydaje się, że musisz dodać trochę więcej konfiguracji grub po tym nienadzorowanym uaktualnieniu. może z sudo apt-get install grub-emu?
rubo77
6
To nie działa dla Trusty => Xenial. Nadal otrzymujesz pytania dotyczące zmodyfikowanych plików / etc.
Willem
Czy nie należy tego uruchamiać za pomocą sudo?
Cerin
Odnośnie pytań o zmodyfikowanych plików / etc, istnieje rozwiązanie chłodny tutaj: awaseroot.wordpress.com/2012/04/29/... . Uruchom polecenie za pomocą „echo” y \ n \ ny \ ny \ ny \ n "| „przed aktualizacją do-release. Ziarna odpowiedzi na pytania. Dodaj wiele odpowiedzi na wypadek, gdyby w / etc było dużo zmodyfikowanych plików.
nmgeek,
6

Aby rozwinąć poprzednie odpowiedzi, oto jak zdalnie zrobić to samo, co zaakceptowaną odpowiedź, używając aktualizacji bez hasła za pomocą ssh, dzięki której Twoje urządzenie zostanie zaktualizowane do najnowszej wersji. Jest kopiowany z mojego własnego wpisu na blogu .

Wszystkie te kroki zakładają, że repozytorium pakietów działa. Oznacza to, że jeśli wykonasz aktualizację apt-get, nie pojawi się wiele 404 z powodu posiadania nieaktualnej wersji. Najpierw musisz to naprawić, więc zapoznaj się z tą odpowiedzią .

0. Zaktualizuj wszystkie istniejące pakiety

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

1. Skonfiguruj wykonywanie bez hasła

Dodaj siebie do listy użytkowników, którzy mogą wykonać aktualizację do-release za pomocą sudo bez konieczności wprowadzania hasła.

sudo visudo -f /etc/sudoers.d/do-release-upgrade.

i dodając następujący wiersz, podstawiając oczywiście moją nazwę użytkownika:

my-username ALL=NOPASSWD: /usr/bin/do-release-upgrade

2. Rozpocznij przyrostowe aktualizacje

Wyloguj się i wykonaj następujące polecenie z komputera. Przeprowadzi aktualizację bez monitowania o podanie danych wejściowych (akceptowanie wszystkich domyślnych odpowiedzi), poczekaj na ponowne uruchomienie komputera, a następnie spróbuj ponownie przeprowadzić aktualizację. Działa do momentu uaktualnienia do najnowszej wersji.

while true; do 
    ssh my-user@my-server sudo do-release-upgrade -f DistUpgradeViewNonInteractive;
    sleep 120; 
done

3. Napraw pliki konfiguracyjne do ich poprzedniego stanu

Następnie będziesz musiał przenieść pliki konfiguracyjne z kopii zapasowej do ich poprzedniej lokalizacji, ponieważ proces aktualizacji umieścił domyślne konfiguracje na swoim miejscu.

Nie jesteś zadowolony z domyślnych odpowiedzi?

Ten facet ma sposób na wstępne przygotowanie odpowiedzi na każdy monit, ale wadą jest to, że musisz wiedzieć, ile jest podpowiedzi…

oligofren
źródło
5

Aby potwierdzić to, co stwierdza Thomas Ward w swojej odpowiedzi i zaprzeczyć przyjętej odpowiedzi, do-release-upgrade -d -f DistUpgradeViewNonInteractiveNIE DZIAŁA.

W rzeczywistości przy pierwszym monicie zepsuła moją partycję testową 16.04 do 18.04 zepsutą i musiałem ją ponownie ustawić. Tutaj skrypt zawiesza się:

Setting up mount (2.31.1-0.4ubuntu3) ...
Setting up systemd (237-3ubuntu10) ...
Installing new version of config file /etc/pam.d/systemd-user ...
Installing new version of config file /etc/systemd/journald.conf ...

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

Y
CRASHED... NOTHING HAPPENS NOW... WILL KILL AND RESTART WITHOUT -f OPTION...

Z powodu Inhibitorów wejściowych ani restart, ani zamknięcie nie będą działać po zabiciu skryptu. Musisz wykonać zimne wyłączenie (przytrzymaj przycisk zasilania ~ 10 sekund).

Dzięki Bogu, to była aktualizacja klonu 16.04, a nie na prawdziwej partycji 16.04.


Aby uczynić życie jeszcze bardziej interesującym, do mojego dysku SSD NVMe dodano nową partycję 898 MB, a moje zwykłe partycje zostały przesunięte:

$ lsdrv
NAME        FSTYPE  LABEL                  MOUNTPOINT          SIZE MODEL

nvme0n1                                                        477G Samsung SSD 960 PRO 512G
├─nvme0n1p5 ntfs                                               858M 
├─nvme0n1p3                                                     16M 
├─nvme0n1p1 ntfs                                               450M 
├─nvme0n1p8 ntfs    Shared_WSL+Linux       /mnt/e                9G 
├─nvme0n1p6 ext4    Ubuntu18.04                               23.7G 
├─nvme0n1p4 ntfs    NVMe_Win10             /mnt/c            390.4G 
├─nvme0n1p2 vfat                           /boot/efi            99M 
├─nvme0n1p9 swap    Linux Swap             [SWAP]              7.9G 
└─nvme0n1p7 ext4    NVMe_Ubuntu_16.0       /                  44.6G 
  • nvme0n1p5 Kiedyś była tam moja partycja Ubuntu 16.04, ale teraz jest włączona nvme0n1p7
  • nvme0n1p8 Kiedyś tam była moja partycja testowa 18.04, ale teraz jest włączona nvme0n1p8

UWAGA: Po południu uaktualniłem również system Windows 10 z kompilacji 1709 do kompilacji 1803, więc możliwe jest, że utworzyłem nową nvme0n1p5partycję 898 MB w ntfsformacie.

WinEunuuchs2Unix
źródło
To jednak duże, więc powinieneś zgłosić to na Launchpad. Użyłem nieinteraktywnego sposobu przez kilka wcześniejszych aktualizacji dystrybucji
oligofren
zaktualizowałeś zarówno Ubuntu, jak i Windows na tym samym pudełku tego samego dnia? musisz cieszyć się bólem
JDS
@JDS Windows został zepsuty. Brakuje 1700 aktualizacji, wszelkiego rodzaju zepsute zależności Python 2 vs Python 3. Muszę usunąć i ponownie zainstalować Ubuntu 16.04 z westchnienia ze Sklepu Windows .
WinEunuuchs2Unix
2

Możesz to zrobić przez terminal, używając sudo apt-get -y upgrade. To odpowie „tak” na wszystkie monity. Jednak nie uruchomi się automatycznie, więc musisz go uruchomić. To powinno działać. AFAIK nie ma możliwości użycia menedżera aktualizacji GUI do wykonania nienadzorowanych aktualizacji oprogramowania ( NIE jest to to samo, co aktualizacja wersji! )

Jeśli próbujesz uaktualnić do innej wersji Ubuntu (inaczej aktualizacja wersji i zazwyczaj następna wersja z linii wydań w stosunku do twojej wersji Ubuntu), musisz ją aktywować ręcznie . sudo do-release-upgrademoże działać. Nie ma jednak możliwości pominięcia poprzednich monitów. Dlatego właśnie inicjujesz aktualizacje, gdy będziesz w pobliżu takich podpowiedzi - będą podpowiedzi.

Thomas Ward
źródło
1
„Nie ma jednak możliwości pominięcia poprzednich monitów”. Co z flagą DistUpgradeViewNonInteractive? To pomija podpowiedzi.
oligofren
1
@oligofren Thomas ma rację, ponieważ -f DistUpgradeViewNonInteractiveflaga powoduje, że skrypt blokuje się przy pierwszym znaku (Y/I/N/O/D/Z)zachęty. Zobacz moją odpowiedź, którą właśnie opublikowałem.
WinEunuuchs2Unix
-4

Spróbuj dodać -yopcję, apt-getale wiedz, że odpowie na ywszystkie zapytania.

bloger
źródło
1
Używam graficznego menedżera aktualizacji, a nie apt-get. Mogłem dokonać aktualizacji w konsoli, ale słyszałem, że polecenie „apt-get dist-upgrade” nie działało od lat (do aktualizacji między wydaniami), więc polecenie nie brzmiałoby „apt-get”.
jdm
@jdm apt-get dist-upgradepowinien działać poprawnie. Gdzie tu jesteś, już nie działa?
Seth
3
@Seth apt-get dist-upgradenie teraz i nigdy w żadnym systemie operacyjnym nie przeprowadził samodzielnej aktualizacji wersji. Zobaczyć man apt-get. upgradeaktualizuje tylko pakiety, które można aktualizować bez konieczności instalowania lub odinstalowywania pakietów. dist-upgradeaktualizuje pakiety, nawet jeśli oznacza to, że pakiety zostały usunięte lub dodane. Jest to przydatne głównie przy wykonywaniu zwykłych aktualizacji - na przykład upgradenie aktualizuje jądra.
Eliah Kagan
2
Zmiana, sources.listaby wskazywała archiwa następnej wersji, a następnie uruchomienie apt-get dist-upgradespowoduje, jeśli się powiedzie , aktualizację wersji. Jest to obsługiwane w Debianie, ale zaleca się jego użycie aptitude dist-upgradeze względu na bardziej zaawansowane rozwiązywanie zależności. W Ubuntu nic takiego nie jest obsługiwane , ale może się powieść. Zamiast tego do-release-upgradesłuży do uaktualnienia do nowszej wersji w wierszu polecenia . To narzędzie nie przyjmuje -yflagi, więc ta odpowiedź nie dotyczy sytuacji aktualizacji do nowej wersji .
Eliah Kagan
Ciekawe. Musiałem wtedy czytać o Debianie.
Seth