Як увімкнути безшумні автоматичні оновлення для будь-якого сховища?


43

Я читав тут, як увімкнути безшумні автоматичні оновлення для Google Chrome. Однак у мене є інші сховища, такі як spotify, docky та інші, для яких я б хотів включити тихі оновлення.

Я намагаюся зробити це у своїй системі Ubuntu 10.04. Але це питання стосується всіх версій Ubuntu. У мене встановлений пакет без нагляду-оновлень .

Як я можу це зробити?


Чи хочете тихі оновлення безпеки . або ВСІ оновлення, встановлені без втручання? Чому?
david6

1
Практично всі оновлення, включаючи і сховища користувачів.
nik90

Відповіді:


66

Спочатку встановіть gksu:

sudo apt-get install gksu

Найпростіший з увімкнених оновлень без нагляду для вашої системи - це редагувати файл 50unattended-upgradesвсередині /etc/apt/apt.conf.d/улюбленого текстового редактора, наприклад:

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

У ньому ви повинні закомментировать закоментовані секції Дозволені Origins блоку

Зміна

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

до

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, яке ви хотіли б оновити, потрібно додати джерело та архів у файл. Щоб знайти те, що стосується ваших PPA, відкрийте папку /var/lib/apt/lists/, тобто область зберігання інформації про стан для кожного ресурсу пакета. Що ви шукаєте - це файли, які закінчуються Release у назві.

Відкрийте його за допомогою текстового редактора, тобто для 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.

Походження очевидно ( Origin: Google, Inc.), і архів буде тим, що знаходиться під рядком Suite ( Suite: stable).

Якщо Originабо Suiteнемає, то він буде порожнім рядком. Але зауважте, що якщо обоє відсутні, то, ймовірно, не вдасться використати це джерело без нагляду оновлень без включення інших джерел із тим самим випуском.

Після того, як ви відзначили ці 2 рядки, вам потрібно відредагувати 50unattended-upgradesфайл та додати рядки, використовуючи цей формат "<origin>:<archive>";для цього прикладу "Google\, Inc.:stable";.

Походження Google Chrome начебто хитро, оскільки в ньому пробіл кінцевої точки та кома, але більшість файлів випуску легко читати.

В якості іншого прикладу джерело NS JS вказує походження ( Node Source), але не архів; тож ви можете зіставити його "Node Source:";.

Дозволений походження узгоджується за допомогою макетів у стилі оболонки (точніше, з fnmatch Python () ). Якщо ви досить обережні, щоб не включати суперечливі джерела, можна писати такі речі "Node *:*";.


Не забудьте зробити резервну копію 50unattended-upgradesфайлу перед редагуванням, зробіть це за допомогою sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak.

Для перевірки змін, внесених у файл, ви можете використовувати sudo unattended-upgradesпараметри --dry-runта --debug.

--dry-run запустить цикл оновлень без нагляду, за винятком того, що він дійсно не встановить оновлення, лише перевірте і переконайтеся, що все в порядку.

--debug увімкне багатослівний режим.

Ви завжди можете перевірити журнали unattended-upgradesна /var/log/unattended-upgrades/unattended-upgrades.log.


Ви можете змінити конфігурацію без нагляду оновлень, відредагувавши файл /etc/apt/apt.conf.d/10periodic, параметри конфігурації - у /etc/cron.daily/aptзаголовку сценарію. Прочитайте їх, щоб налаштувати частоту оновлень без нагляду.


2
Дякую ... Дуже докладно! я можу запитати, чому ви ставите \ після Google?
nik90

Через особливі символи в походження, його символ втечі для коми. Більшість джерел, які ви знайдете, не матимуть цього.
Бруно Перейра

1
@jos Ні, саме так він працює, --dry-runперевірить, чи є в оновлених списках наявні оновлення та видасть їх вам, списки оновлюються за будь-якою вашою конфігурацією /etc/cron.daily/apt, запускаючи його вручну, не оновлюйте списки, які я думаю.
Бруно Перейра

1
Що потрібно вказати як ім’я архіву, якщо у відповідному файлі випуску немає списку Suite?
hsivonen

2
Також перевірте тут автоматизований підхід: askubuntu.com/a/792621/417607
Abhishek Bhatia

14

Автоматизований підхід до відповіді @Bruno Pereira: (Якщо ви вважаєте, що відповідь є корисною, зверніть увагу на головну роль github repo.)

Кодове посилання: https://github.com/abhigenie92/unattended_upgrades_repos

  • Перевірте сховища, щоб додати:

    $ 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
    
  • Тепер редагуйте, /etc/apt/apt.conf.d/50unattended-upgradesщоб включити їх:

    // 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";
    };
    ....
    ....
    
  • Перевірте, чи вони включені:

    $ 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
    

@ andy.holmes Ласкаво просимо, будь ласка, подумайте про створення зібрання сховища github, якщо можливо. Link- github.com/abhigenie92/unattended_upgrades_repos
Abhishek Bhatia

Ви також можете змінити, як dpkg поводиться з пакетами, які намагаються змінити конфігураційні файли: unix.stackexchange.com/questions/138751/…
deoren

Цей сценарій python є відмінним, проте мені довелося змінити те, що README.md запропонував для 50unattended-модернізацій для мого запуску Raspberry Pi. Вказання дозволеного походження як, наприклад, "Raspberry:stable";не спрацювало. Натомість я використав, наприклад,"o=Raspberry, a=stable";
cfogelberg

5

Редагуючи /etc/apt/apt.conf.d/50unattended-upgrades, додайте наступне:

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

Це дозволить без нагляду оновити всі пакети.


Так, дякую за чітку та стислу відповідь. Але є пакети, у яких є origin:'', наприклад, datadog-agent від site:'apt.datadoghq.com'. У цьому випадку також потрібно буде додати, "origin=";щоб не пропускати пакунки з порожнім походженням. Але тоді краще просто використовувати "site=*";замість цього "origin=*";.
Пол Тобіас

Я додав власне сховище у файл у /etc/apt/sources.list.d/my_repo.list, але він не оновлює пакет. Вручну це працює sudo apt update. Будь-яка підказка як?
Сандер

Чи використовує це ті самі джерела, що й оновлення вручну, тобто ігнорує відключені джерела?
Силікоманс

3

Існують вказівки щодо примусового перезапуску, щоб змусити cron запустити автоматичне оновлення за наступним посиланням . Процедура зупинки cron така

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/*

і перезапустити cron, щоб автоматичне оновлення відбулося зараз (або принаймні протягом декількох мит) є

sudo service cron start
sudo anacron -fn

Як це працює

Кілька речей спровокують його запуск.

  • Він спеціально звільняється від керування /etc/cron.dailyкроном /etc/cron.daily/apt. Cron працює /etc/cron.dailyо 6.25 ранку (див. /etc/crontab)

  • Анакрон біжить з вискоку? і він вимкне /etc/cron.dailyпісля 5 хвилин роботи (див. /etc/anacrontab)

    Примітка APT::Periodic::RandomSleepможе бути встановлена /etc/apt/apt.conf.d/10periodic, але за замовчуванням до 1800 (30 хвилин), тому оновлення не може відбуватися до 30 хвилин після /etc/cron.daily/aptзапуску.

Журнал

Якщо він працює речі повинні отримати увійти в цій папці, /var/log/unattended-upgrades.


Це було особливо корисно для мене, оскільки мій провайдер віртуального хостингу вважав, що було б гарною ідеєю видалити /etc/cron.daily/aptустановку Ubuntu 12.04 за замовчуванням - тому автоматичні оновлення APT не відбувалися :-(. Сервер відповіді ServerFault defaultfault.com/a/568329/ 95570 надав детальну інформацію про відновлення цього файлу
Алекс Дюпюй
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.