Как удостовериться, что необслуживаемые обновления регулярно работают на ненадежном интернет-соединении?

APT, кажется, имеет устойчивую мертвую зону для компьютеров, которые не подключены постоянно к Интернету. В эти дни существует, конечно, тонна их, главным образом ноутбуки.

Общее решение unattended-upgrades. Это установлено и выполнено по умолчанию с ежедневной газетой cron задание. Как защита, anacron также установлен и выполнен по умолчанию и выполняет любого cron задания, которые были пропущены, потому что компьютер был выключен. До сих пор настолько разумный.

НО!

  1. Значение по умолчанию unattended-upgrades конфигурация (/etc/apt/apt.conf.d/50unattended-upgrades или подобный), требует, чтобы следующее было установлено, еще пропускаемый риск обновлений:

    Unattended-Upgrade::OnlyOnACPower "false";
    Unattended-Upgrade::Skip-Updates-On-Metered-Connections "false";
    
  2. Что еще более важно, anacron, как cron, задания выполнений, доступно ли интернет-соединение! Это - ясно главная ошибка дизайна для несервера Ubuntu, так как персональные компьютеры не всегда подключаются постоянно. С конфигурацией по умолчанию, на кочевом ноутбуке, unattended-upgrades просто приведет большую часть к сбою времени.

(Возможно, должен быть отдельный класс cron задание, которое ожидает сетевого соединения до выполнения. Или отказавший cron.daily задания могли быть переключены на cron.hourly пока они не выполняются успешно.)

Одним практическим решением является a systemd файл единицы для выполнения unattended-upgrades как пользовательский сценарий после того, как сеть прибывает онлайн. Но это будет только работать однажды на начальную загрузку.

Каково оптимальное решение? Кто-либо знает, существуют ли планы зафиксировать это с новым пакетом или улучшением конфигурации?

1
задан 22 November 2019 в 18:47

1 ответ

При соединении с Интернетом с network-manager, текущее значение по умолчанию на Ubuntu, затем создайте сценарий диспетчера для запуска unattended-upgrade (unattended-upgrades символьная ссылка, также работы) после соединения с сетью:

sudo touch /etc/NetworkManager/dispatcher.d/20-myconnectionscript
sudo chmod +x /etc/NetworkManager/dispatcher.d/20-myconnectionscript

В 20-myconnectionscript:

#!/bin/sh

if [ "$2" = "up" ];
  # only proceed if unattended-upgrades was last run more than a day ago
  ELAPSEDSINCEUU=$(($(date +%s) - $(date +%s -r /var/lib/apt/periodic/unattended-upgrades-stamp)))
  if [ $ELAPSEDSINCEUU -gt 86400 ]; then
    apt update --yes # replace, see below
    /usr/bin/unattended-upgrade # replace, see below
  fi
fi

Править. Складывается unattended-upgrades не инициировал обновление списков пакета. Итак, если unattended-upgrades перестал работать затем существует хороший шанс это apt update перестал работать также, в этом случае обновления продолжат не происходить! Так добавленное руководство обновляют к сценарию. Неутешительный, что обеспечение обновлений безопасности должно быть так сложным.

Редактирование 2. Это - то, в чем Вы нуждаетесь в своем неинтерактивном сценарии, если Вы хотите быть абсолютно уверенными, что Ваш ноутбук актуален. Может подтвердить, что это работает надежно. Замените эти 2 строки выше им.

DEBIAN_FRONTEND=noninteractive apt-get --yes update
DEBIAN_FRONTEND=noninteractive apt-get --yes --allow-downgrades --allow-remove-essential --allow-change-held-packages -- option Dpkg::Options::=--force-confold --option Dpkg::Options::=--force-confdef dist-upgrade

Это - полное dist-upgrade, не только обновление безопасности. Если у кого-либо есть предложение для версии только для безопасности, которая будет всегда работать, когда выполнено нев интерактивном режиме и не связала слишком много futzing с repo конфигурацией, предложите это.

Еще раз: unattended-upgrades как могут ожидать, не будет работать на периодически подключенный компьютер. Служба безопасности Ubuntu действительно должна обратиться к этой ситуации.

2
ответ дан 7 December 2019 в 13:18

Другие вопросы по тегам:

Похожие вопросы: