Jak włączyć ciche automatyczne aktualizacje dla dowolnego repozytorium?

43

Przeczytałem tutaj, jak włączyć ciche automatyczne aktualizacje dla Google Chrome. Mam jednak inne repozytoria, takie jak spotify, docky i inne, dla których chciałbym włączyć ciche aktualizacje.

Próbuję to zrobić w moim systemie Ubuntu 10.04. Ale to pytanie dotyczy wszystkich wersji Ubuntu. Mam zainstalowany pakiet nienadzorowanej aktualizacji .

Jak mogę to zrobić?

nik90
źródło
Czy chcesz cichych aktualizacji zabezpieczeń . czy WSZYSTKIE aktualizacje zainstalowane bez interwencji? Dlaczego?
david6
1
Prawie wszystkie aktualizacje, w tym również repozytoria użytkowników.
nik90

Odpowiedzi:

66

Najpierw zainstaluj gksu:

sudo apt-get install gksu

Najłatwiejszym sposobem włączenia nienadzorowanych aktualizacji dla systemu jest edycja pliku 50unattended-upgradesw /etc/apt/apt.conf.d/swoim ulubionym edytorze tekstów, na przykład:

gksu gedit /etc/apt/apt.conf.d/50unattended-upgrades

W nim musisz skomentować skomentowane sekcje bloku Dozwolone pochodzenie

Zmiana

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
//      "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

do

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
        "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

W przypadku oprogramowania, którego nie ma w repozytoriach Ubuntu, które chcesz zaktualizować, musisz dodać źródło i archiwum do pliku. Aby dowiedzieć się, jakie to są dla Twoich PPA, otwórz folder /var/lib/apt/lists/, który jest miejscem przechowywania informacji o stanie dla każdego zasobu pakietu. To, czego szukasz, to pliki z końcówką Release w nazwie.

Otwórz jeden za pomocą edytora tekstu, np. Dla Google Chrome:

gedit /var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release

Origin: Google, Inc.
Label: Google
Suite: stable
Codename: stable
Version: 1.0
Date: Thu, 17 Nov 2011 19:09:01 +0000
Architectures: i386 amd64
Components: main
Description: Google chrome-linux repository.

Pochodzenie jest oczywiste ( Origin: Google, Inc.), a archiwum będzie znajdowało się pod linią Suite ( Suite: stable).

Jeśli któregoś z Originlub Suitebrakuje, to będą one ciągiem pustym. Pamiętaj jednak, że jeśli brakuje obu, prawdopodobnie nie będzie możliwe korzystanie z tego źródła w przypadku nienadzorowanych aktualizacji bez uwzględnienia innych źródeł z tym samym problemem.

Po zanotowaniu tych 2 linii musisz edytować 50unattended-upgradesplik i dodać linie, używając tego formatu "<origin>:<archive>";dla tego przykładu "Google\, Inc.:stable";.

Pochodzenie Google Chrome jest dość trudne, ponieważ ma spację jako punkt końcowy i przecinek, ale większość plików Release będzie łatwa do odczytania.

Jako inny przykład, źródło JS węzła określa źródło ( Node Source), ale nie archiwum; więc możesz to dopasować "Node Source:";.

Dozwolone początki są dopasowywane za pomocą symboli wieloznacznych w stylu powłoki (a dokładniej za pomocą fnmatch () Pythona ). Jeśli jesteś wystarczająco ostrożny, aby nie uwzględniać sprzecznych źródeł, możesz napisać coś takiego "Node *:*";.


Nie zapomnij wykonać kopii zapasowej 50unattended-upgradespliku przed edycją, zrób to za pomocą sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak.

Aby przetestować zmiany dokonane w pliku, możesz użyć sudo unattended-upgradesparametrów --dry-runi --debug.

--dry-run uruchomi cykl nienadzorowanych aktualizacji, ale tak naprawdę nie zainstaluje aktualizacji, tylko sprawdź i sprawdź, czy wszystko jest w porządku.

--debug włącza pełny tryb.

Zawsze możesz sprawdzić dzienniki pod unattended-upgradesadresem /var/log/unattended-upgrades/unattended-upgrades.log.


Możesz zmienić konfigurację nienadzorowanych aktualizacji, edytując plik /etc/apt/apt.conf.d/10periodic, opcje konfiguracji znajdują się w /etc/cron.daily/aptnagłówku skryptu. Przeczytaj je, aby skonfigurować częstotliwość nienadzorowanych aktualizacji.

Bruno Pereira
źródło
2
Dzięki ... Bardzo szczegółowo! czy mogę zapytać, dlaczego umieścisz \ po Google?
nik90
Ze względu na znaki specjalne w źródle, jest to znak ucieczki dla przecinka. Większość źródeł, które znajdziesz, nie będzie tego miała.
Bruno Pereira,
1
@ jos Nie, tak to działa, --dry-runsprawdzi, czy na zaktualizowanych listach są dostępne aktualizacje i wyśle ​​je do ciebie, aktualizacje list za pośrednictwem dowolnej konfiguracji /etc/cron.daily/apt, uruchomienie ręczne nie aktualizuje list, jak sądzę.
Bruno Pereira,
1
Co powinienem podać jako nazwę archiwum, gdy odpowiedni plik Release nie zawiera pakietu?
hsivonen,
2
Sprawdź również automatyczne podejście tutaj: askubuntu.com/a/792621/417607
Abhishek Bhatia
14

Zautomatyzowane podejście do odpowiedzi @Bruno Pereira: (Jeśli uważasz, że odpowiedź jest przydatna, weź udział w repozytorium github).

Kod Link: https://github.com/abhigenie92/unattended_upgrades_repos

  • Sprawdź repozytoria, aby dodać:

    $ python automatic_upgrade.py 
    Add repos:
    "Ubuntu:xenial";
    "LP-PPA-kubuntu-ppa-backports:xenial";
    "LP-PPA-tuxonice:xenial";
    "LP-PPA-webupd8team-sublime-text-3:xenial";
    
    Skipping files due to not present origin or suite. Or origin being a url.:
    packagecloud.io_slacktechnologies_slack_debian_dists_jessie_InRelease
    tiliado.eu_nuvolaplayer_repository_deb_dists_xenial_InRelease
    
  • Teraz edytuj, /etc/apt/apt.conf.d/50unattended-upgradesaby je uwzględnić:

    // Automatically upgrade packages from these (origin:archive) pairs
    Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
        "${distro_id}:${distro_codename}-updates";
        "${distro_id}:${distro_codename}-proposed";
        "${distro_id}:${distro_codename}-backports";
      "Ubuntu:xenial";
      "LP-PPA-kubuntu-ppa-backports:xenial";
      "LP-PPA-tuxonice:xenial";
      "LP-PPA-webupd8team-sublime-text-3:xenial";
    };
    ....
    ....
    
  • Sprawdź, czy są uwzględnione:

    $ sudo unattended-upgrade --dry-run --debug
    Initial blacklisted packages: 
    Initial whitelisted packages: 
    Starting unattended upgrades script
    Allowed origins are: ['o=Ubuntu,a=xenial-security', 'o=Ubuntu,a=xenial-updates', 'o=Ubuntu,a=xenial-proposed', 'o=Ubuntu,a=xenial-backports', 'o=Ubuntu,a=xenial', 'o=LP-PPA-kubuntu-ppa-backports,a=xenial', 'o=LP-PPA-tuxonice,a=xenial', 'o=LP-PPA-webupd8team-sublime-text-3,a=xenial']
    pkgs that look like they should be upgraded: 
    Fetched 0 B in 0s (0 B/s)                                                                                  
    fetch.run() result: 0
    blacklist: []
    whitelist: []
    No packages found that can be upgraded unattended and no pending auto-removals
    
Abhishek Bhatia
źródło
@ andy.holmes witamy, jeśli to możliwe, weź udział w repozytorium github. Link- github.com/abhigenie92/unattended_upgrades_repos
Abhishek Bhatia
Możesz również zmodyfikować sposób, w jaki dpkg traktuje pakiety, które próbują modyfikować pliki konfiguracyjne: unix.stackexchange.com/questions/138751/...
deoren
Ten skrypt w Pythonie jest doskonały, jednak musiałem zmodyfikować to, co sugerował README.md dla 50 nieobsługiwanych aktualizacji dla mojego działającego Raspberry Pi. Określenie dozwolonego źródła, ponieważ np. "Raspberry:stable";Nie działało. Zamiast tego użyłem np."o=Raspberry, a=stable";
cfogelberg
5

Edytowanie /etc/apt/apt.conf.d/50unattended-upgrades, dodaj następujące:

Unattended-Upgrade::Origins-Pattern {
        "origin=*";
};

Umożliwi to nienadzorowane aktualizacje wszystkich pakietów.

Zachary West
źródło
Tak, dziękuję za jasną i zwięzłą odpowiedź. Ale są pakiety, które mają origin:''na przykład datadog-agent z site:'apt.datadoghq.com'. W takim przypadku należałoby również dodać, "origin=";aby nie pomijać pakietów z pustym początkiem. Ale wtedy lepiej jest po prostu użyć "site=*";zamiast "origin=*";.
Paul Tobias
Dodałem własne repozytorium do pliku w /etc/apt/sources.list.d/my_repo.list, ale nie uaktualnia ono pakietu. Ręcznie działa z sudo apt update. Jakiś pomysł jak?
Sander,
Czy korzysta z tych samych źródeł co aktualizacja ręczna, tzn. Czy ignoruje wyłączone źródła?
Silicomancer
3

Istnieją instrukcje dotyczące wymuszania ponownego uruchomienia, aby cron rozpoczął automatyczną aktualizację pod poniższym linkiem . Procedura zatrzymania crona jest następująca

sudo service anacron stop
sudo service cron stop
sudo rm -rf /var/run/unattend* /var/run/cron* /var/run/anacron*
sudo rm -rf /var/lib/apt/periodic/*

i zrestartować crona, aby automatyczna aktualizacja miała miejsce teraz (lub przynajmniej w ciągu kilku minut)

sudo service cron start
sudo anacron -fn

Jak to działa

Uruchomi go kilka rzeczy.

  • Zwłaszcza jest uruchamiany /etc/cron.dailyprzez crona /etc/cron.daily/apt. Cron działa /etc/cron.dailyo 6.25 rano (patrz /etc/crontab)

  • Anacron działa od początku? i wystrzeli /etc/cron.dailypo 5 minutach bezczynności (patrz /etc/anacrontab)

    Uwaga APT::Periodic::RandomSleepmoże być ustawiona /etc/apt/apt.conf.d/10periodic, ale domyślnie jest to 1800s (30 minut), więc żadne aktualizacje mogą nie nastąpić do 30 minut po /etc/cron.daily/apturuchomieniu.

Log

Jeśli działa rzeczy powinny się zalogować w tym folderze /var/log/unattended-upgrades.

Eleanor Ellis
źródło
Było to szczególnie przydatne, ponieważ mój wirtualny dostawca hostingu pomyślał, że dobrym pomysłem byłoby usunięcie /etc/cron.daily/aptz domyślnej instalacji Ubuntu 12.04 - więc automatyczne aktualizacje APT nie miały miejsca :-(. Odpowiedź ServerFault serverfault.com/a/568329/ 95570 przedstawił szczegóły dotyczące ponownego utworzenia tego pliku
Alex Dupuy