sudo apt-get upgrade
устанавливает все обновления, а не только обновления для системы безопасности. Я знаю, что могу использовать диспетчер обновлений для выбора только важных обновлений безопасности, но есть ли способ сделать это из командной строки?
Посылка автоматическое обновление предоставляет функциональные возможности для автоматической установки обновлений безопасности.
Вы могли бы использовать это, но вместо настройки автоматической части вы могли бы вызвать ее вручную:
sudo unattended-upgrade -d --dry-runsudo unattended-upgrade -d # Idem --debug
Если вы хотите вместо этого запустить его тихо:
sudo unattended-upgrade
Примечание: Когда вы вызываете автоматическое обновление, вы оставляете букву "s" в конце (в более новых версиях есть символическая ссылка, чтобы избежать этого).
Это предполагает, что пакет установлен по умолчанию, что, вероятно, так и есть. Если нет, просто сделайте:
sudo apt 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, что не является уважительной причиной для перезапуска службы.Поэтому другой, более надежный способ проверить это с помощью стандартных утилит - это следующий маленький скрипт bash, который я бесстыдно украл у 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" fidone
заменять /etc/apt/preferences
со следующим:
Package: *Pin: release a=lucid-securityPin-Priority: 500Package: *Pin: release o=UbuntuPin-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 искать файл настроек из расположения, отличного от расположения по умолчанию.
Файл настроек, приведенный в качестве примера, не применяется к сторонним репозиториям, если вы хотите закрепить и их, вы можете использовать apt-cache policy
чтобы легко определить необходимые ключи для закрепления.
Следующее подтверждено в Ubuntu 14.04 LTS.
Используйте unattended-upgrade
пакет.
Посмотрите на файл /etc/apt/apt.conf.d/50unattended-upgrades
. Вверху должен быть раздел, который:
// Automatically upgrade packages from these (origin:archive) pairsUnattended-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
На Debians я использую эту команду только для выполнения обновлений безопасности:
apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq )
Если вы хотите установить только обновления для системы безопасности, будет работать следующее. Сначала он перечисляет все обновляемые пакеты, отфильтровывает только те, которые поступают из хранилища безопасности, вырезает возвращаемые строки в первом поле, а затем передает их в apt-get install для обновления пакета.
sudo apt list --upgradable | grep security |cut -d\/ -f1|xargs sudo apt-get install -y
Хотя это довольно некрасиво, вы можете отключить все репозитории, кроме репозитория безопасности, а затем выполнить:
sudo apt-get update && sudo apt-get upgrade
Я не тестировал его, но теоретически он будет находить обновления только в репозитории безопасности и применять их...
-
apt-get update
: просто прочитайте записи в репозитории - в соответствии с существующим списком. Нужно было проверить, что нового. -
apt-get upgrade
: все обновления для установленных пакетов без модулей ядра. Нет обновления для выпуска. -
apt-get dist-upgrade
: все обновления для установленных пакетов также с модулями ядра. Нет обновления для выпуска. -
apt-get
с параметром-s
: только тест, никаких изменений не производится.
Вот сценарий, который достигает этого несколькими различными способами:
#!/usr/bin/env bashset -e# List upgradable packagesapt-get updateapt list --upgradable 2>/dev/null# List security upgradestest "$(apt-get upgrade -s -y)" && (apt-get upgrade -s -y)# List upgradable apt packages then upgradeapt-get update && apt-get upgrade -y -V | grep '=>' | awk '{print$1}' && test "$(apt-get upgrade -y)"
Я не могу найти вариант ни в apt-get, ни в aptitude, однако у кого-то был тот же вопрос на суперпользователя. Единственный ответ - это:
Check and adjust /etc/apt/apt.conf.d/50unattended-upgrade. Did you replace 'karmic' with the code name of your Ubuntu?
Однако никакого ответа относительно того, сработало ли это, не последовало.
Вы хотите “apt-get dist-upgrade”, а не “apt-get upgrade”. “dist-upgrade” не предназначен для новых выпусков (это отдельная команда “do-release-upgrade”). Использование “dist-upgrade” означает, что он будет обрабатывать изменяющиеся зависимости новых пакетов. Это может быть важно.
dist-upgrade - это обычная операция, выполняемая графическим интерфейсом диспетчера обновлений. Для таких пакетов, как ядро, где есть пакет “linux-image-generic”, в зависимости от текущего образа, например “linux-image-3.x.y-zz-generic” (каждая версия которого является отдельным именем пакета), dist-upgrade (который позволяет создавать новые пакеты, которые должны быть установлены для удовлетворения зависимостей) выполнит это обновление, в то время как обновление покажет пакет ядра как отложенный.
Удивительно, что для этого нет хороших ответов на основе apt-get, учитывая, насколько заметно он указан на каждом сервере
Я так не думаю. dist-upgrade переводит всю систему на новую версию. Я говорю о ежедневных обновлениях, подобных тем, которые вы видите в диспетчере обновлений.
О, теперь я понимаю, о чем ты говоришь. Хех, я так часто запускаю apt-get update, что набираю его, не задумываясь. Спасибо за предупреждение!
Я не думаю, что @KeesCook прав. Согласно apt docs, вы хотите использовать apt-get upgrade, если только вы не переходите между дистрибутивами. Только в редких случаях может потребоваться dist-upgrade v. и обновление при запуске выпущенной (например, в настоящее время не бета-версии / rc) ubuntu.
Я предполагаю, что вы имели в виду apt-get (dist-)upgrade?
На самом деле, приведенный ниже ответ действительно хорош. Сначала вы можете перечислить пакеты, которые должны быть обновлены, затем вы можете запустить “sudo apt-get install ” только для пакетов, подлежащих обновлению. Это позволяет вам обновлять только те пакеты, которые представляют проблему безопасности.