APT, кажется, имеет устойчивую мертвую зону для компьютеров, которые не подключены постоянно к Интернету. В эти дни существует, конечно, тонна их, главным образом ноутбуки.
Общее решение unattended-upgrades
. Это установлено и выполнено по умолчанию с ежедневной газетой cron
задание. Как защита, anacron
также установлен и выполнен по умолчанию и выполняет любого cron
задания, которые были пропущены, потому что компьютер был выключен. До сих пор настолько разумный.
НО!
Значение по умолчанию unattended-upgrades
конфигурация (/etc/apt/apt.conf.d/50unattended-upgrades
или подобный), требует, чтобы следующее было установлено, еще пропускаемый риск обновлений:
Unattended-Upgrade::OnlyOnACPower "false";
Unattended-Upgrade::Skip-Updates-On-Metered-Connections "false";
Что еще более важно, anacron
, как cron
, задания выполнений, доступно ли интернет-соединение! Это - ясно главная ошибка дизайна для несервера Ubuntu, так как персональные компьютеры не всегда подключаются постоянно. С конфигурацией по умолчанию, на кочевом ноутбуке, unattended-upgrades
просто приведет большую часть к сбою времени.
(Возможно, должен быть отдельный класс cron
задание, которое ожидает сетевого соединения до выполнения. Или отказавший cron.daily
задания могли быть переключены на cron.hourly
пока они не выполняются успешно.)
Одним практическим решением является a systemd
файл единицы для выполнения unattended-upgrades
как пользовательский сценарий после того, как сеть прибывает онлайн. Но это будет только работать однажды на начальную загрузку.
Каково оптимальное решение? Кто-либо знает, существуют ли планы зафиксировать это с новым пакетом или улучшением конфигурации?
При соединении с Интернетом с 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 действительно должна обратиться к этой ситуации.