sudo apt-get upgrade
устанавливает все обновления, а не только обновления безопасности. Я знаю, что могу использовать диспетчер обновлений, чтобы выбирать только важные обновления безопасности, но есть ли способ сделать это из командной строки?
Пакет необслуживаемых обновлений предоставляет функциональные возможности для автоматической установки обновлений безопасности.
Вы можете использовать это, но вместо настройки автоматической детали вы можете вызвать ее вручную:
sudo unattended-upgrade -d --dry-run
sudo unattended-upgrade -d
Если вы хотите запустить ее тихо:
sudo unattended-upgrade
ПРИМЕЧАНИЕ: Когда вы вызываете unattended-upgrade, вы оставляете «s» без конца.
Это предполагает, что пакет установлен по умолчанию, что, вероятно, и есть. Если нет, просто сделайте:
sudo apt-get install unattended-upgrades
См. Также /usr/share/doc/unattended-upgrades/README.md
.
Это применяется и к Debian и к Ubuntu, но более конкретные инструкции для Ubuntu следуют.
Покажите обновления системы защиты только:
apt-get -s dist-upgrade |grep "^Inst" |grep -i securi
или
sudo unattended-upgrade --dry-run -d
или
/usr/lib/update-notifier/apt-check -p
Покажите все обновляемые пакеты
apt-get -s dist-upgrade | grep "^Inst"
Установите обновления системы защиты только
apt-get -s dist-upgrade | grep "^Inst" |
grep -i securi | awk -F " " {'print $2'} |
xargs apt-get install
Примечания:
Иногда Ubuntu показывает обновления системы защиты, как будто они прибывают из репозитория $release-updates. Это так, мне говорят, потому что разработчики Ubuntu продвигают обновления системы защиты до репозитория $release-updates также ускорять свою доступность.
Если это так, можно сделать следующее для показа обновлений системы защиты только:
sudo sh -c 'grep ^deb /etc/apt/sources.list |
grep security > /etc/apt/sources.security.only.list'
и
apt-get -s dist-upgrade -o Dir::Etc::SourceList=/etc/apt/sources.security.only.list -o Dir::Etc::SourceParts=/dev/null |
grep "^Inst" | awk -F " " {'print $2'}
Проверьте, какие сервисы должны быть перезапущены после обновлений пакета. Фигура, какие пакеты Вы собираетесь обновить заранее и запланировать Ваши перезапуски/перезагрузки. Проблема здесь состоит в том, что, если Вы не перезапускаете сервис, он все еще может использовать более старую версию библиотеки (наиболее распространенная причина), это было загружено в память перед установкой нового пакета, который устраняет уязвимость системы обеспечения безопасности или что бы то ни было.
checkrestart -v
Однако имейте в виду это checkrestart
может перечислить процессы, которые не должны обязательно быть перезапущены. Например, услуги PostgreSQL могут сохранять в его ссылке памяти на уже удаленный xlog файл, который не является допустимой причиной перезапустить сервис.
Поэтому другой, более надежный, способ проверить этот стандарт использования utils является следующим небольшим сценарием удара, который я бесстыдно украл из https://locallost.net/? p=233
Это проверяет, если выполнение процессов в системе все еще пользуется удаленными библиотеками на основании хранения копий тех, которые в активной памяти.
ps xh -o pid |
while read PROCID; do
grep 'so.* (deleted)$' /proc/$PROCID/maps 2> /dev/null
if [ $? -eq 0 ]; then
CMDLINE=$(sed -e 's/\x00/ /g' < /proc/$PROCID/cmdline)
echo -e "\tPID $PROCID $CMDLINE\n"
fi
done
Следующее подтверждается в Ubuntu 14.04 LTS.
Используйте пакет unattended-upgrade
.
Посмотрите файл /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";
};
Обратите внимание, как по умолчанию он настроен только на автоматическое обновление пакетов безопасности.
Измените файл /etc/apt/apt.conf.d/10periodic
следующим образом:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
Это будет запускать автоматические автоматические обновления безопасности один раз в день.
Теперь, чтобы запустить вручную: sudo unattended-upgrade
.
Для проверки в пробном режиме, ничего не делая: sudo unattended-upgrade --dry-run
.
Источник: https://help.ubuntu.com/14.04/serverguide/automatic-updates.html
Я не могу найти опцию ни в apt-get, ни в aptitude, однако у кого-то возник такой же вопрос в SuperUser. Единственный ответ:
Check and adjust /etc/apt/apt.conf.d/50unattended-upgrade.
Did you replace 'karmic' with the code name of your Ubuntu?
Нет ответа относительно того, сработало ли это, однако.
Хотя это довольно уродливо, вы можете отключить все репозитории, кроме репозитория безопасности, а затем сделать: сделайте репо и примените их ...
В Debian я использую эту команду только для обновлений безопасности:
apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq )
заменить /etc/apt/preferences
следующим:
Package: *
Pin: release a=lucid-security
Pin-Priority: 500
Package: *
Pin: release o=Ubuntu
Pin-Priority: 50
теперь простой apt-get upgrade
обновит только все обновления безопасности.
Почему (и как) это работает: файл настроек связывает все пакеты из дистрибутива Ubuntu с приоритетом 50, что делает их менее желательными, чем уже установленные пакеты. Файлы из хранилища безопасности имеют приоритет по умолчанию (500), поэтому они рассматриваются для установки. Это означает, что только пакеты, которые считаются более желательными, чем установленные в настоящее время, являются обновлениями безопасности. Больше информации о закреплении на странице руководства apt_preferences .
Вы можете временно рекламировать определенный дистрибутив для обновлений с опцией --target-release
, которая работает с apt-get
и aptitude
(по крайней мере), что позволит вам закрепить определенные выпуски, чтобы они могли быть обновлены.
Если вы хотите использовать это только для сценариев и не устанавливать его по умолчанию для системы, вы можете поместить правила в другое место и использовать вместо этого:
apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade
Это сделает правильный взгляд для файла настроек из нестандартного местоположения.
Файл настроек, приведенный в качестве примера, не применяется к сторонним репозиториям. Если вы хотите закрепить их, вы можете использовать apt-cache policy
, чтобы легко определить необходимые ключи для закрепления.
apt-get update
: просто прочитайте записи в репозитории - в соответствии с существующим списком. Нужно проверить что нового. apt-get upgrade
: все обновления для установленных пакетов без модулей ядра. Нет релиза обновления. apt-get dist-upgrade
: все обновления для установленных пакетов также с модулями ядра. Нет релиза обновления. apt-get
с параметром -s
: только проверка, без изменений. Вот сценарий, который достигает этого несколькими различными способами:
#!/usr/bin/env bash
set -e
# List upgradable packages
apt-get update
apt list --upgradable 2>/dev/null
# List security upgrades
test "$(apt-get upgrade -s -y)" && (apt-get upgrade -s -y)
# List upgradable apt packages then upgrade
apt-get update && apt-get upgrade -y -V | grep '=>' | awk '{print$1}' && test "$(apt-get upgrade -y)"
Если вы хотите установить только обновления безопасности, выполните следующие действия. Сначала он перечисляет все обновляемые пакеты, отфильтровывает только те, которые поступают из репозитория безопасности, вырезает возвращенные строки в первом поле, а затем передает их в apt-get install для обновления пакета.
sudo apt list --upgradable | grep security |cut -d\/ -f1|xargs sudo apt-get install -y