Как включить автоматическое автоматическое обновление для любого хранилища?

44

Я читал здесь, как включить автоматическое автоматическое обновление для Google Chrome. Тем не менее, у меня есть другие репозитории, такие как spotify, docky и другие, для которых я хотел бы включить автоматическое обновление.

Я пытаюсь сделать это в моей системе Ubuntu 10.04. Но этот вопрос относится ко всем версиям Ubuntu. У меня установлен пакет автоматических обновлений .

Как я могу это сделать?

nik90
источник
Вы хотите тихие обновления безопасности . или ВСЕ обновления установлены без вмешательства? Зачем?
david6
1
Практически все обновления, включая пользовательские репозитории, а также.
nik90 14.12.11

Ответы:

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 довольно сложно, поскольку в нем есть пробел, конечная точка и запятая, но большинство файлов Release будет легко читаться.

В качестве другого примера, источник Node JS указывает origin ( Node Source), но не архив; так что вы можете сопоставить его с "Node Source:";.

Allowed Origins сопоставляется с использованием подстановочных знаков в стиле оболочки (более конкретно, с помощью функции Python fnmatch () ). Если вы достаточно осторожны, чтобы не включать противоречивые источники, можно написать что-то вроде "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 14.12.11
Из-за специальных символов в источнике, это escape-символ для запятой. У большинства источников, которые вы найдете, такого не будет.
Бруно Перейра
1
@jos Нет, так оно и работает, --dry-runпроверит, есть ли в обновленных списках какие-либо доступные обновления, и выведет их вам, списки обновятся в соответствии с вашей конфигурацией /etc/cron.daily/apt, запуск их вручную не обновляет списки, я думаю.
Бруно Перейра
1
Что я должен указать в качестве имени архива, если в соответствующем файле Release нет списка Suite?
hsivonen
2
Пожалуйста, также проверьте автоматизированный подход здесь: askubuntu.com/a/792621/417607
Абхишек Бхатия
14

Автоматизированный подход к ответу @Bruno Pereira: (Пожалуйста, подумайте о роли github-репо, если вы найдете ответ полезным.)

Ссылка на код: 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 в репозитории, если это возможно. Ссылка- github.com/abhigenie92/unattended_upgrades_repos
Абхишек Бхатия,
Вы также можете изменить способ обработки пакетов dpkg, которые пытаются изменить файлы конфигурации: unix.stackexchange.com/questions/138751/…
deoren
Этот скрипт на python превосходен, однако мне пришлось изменить то, что README.md предложил для 50unattended-upgrade, для моего бега 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. Любая подсказка, как?
Сандер
Использует ли это те же источники, что и обновление вручную, т.е. игнорирует ли отключенные источники?
Silicomancer
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.dailycron'ом /etc/cron.daily/apt. Крон бежит /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 serverfault.com/a/568329/ 95570 предоставил подробную информацию о воссоздании этого файла
Алекс Дюпюи