LinuxFAQ.ru

apt-mark hold — как запретить обновление пакета в Linux

В этой статье рассмотрим, как запретить обновление конкретного пакета в системах на базе Debian и Ubuntu с помощью команды apt-mark hold. Это полезно, если вы хотите зафиксировать версию стабильного ПО или предотвратить автоматические обновления критичных компонентов.

Почему может понадобиться apt-mark hold

  • Обновление может нарушить совместимость сервисов или зависимостей.
  • Пакет содержит специфические настройки или кастомные правки, которые нельзя потерять.
  • Текущая версия проверена и стабильна — обновления могут внести ошибки.
  • После обновления возникали сбои, и необходимо зафиксировать рабочую версию.

Пошаговое решение (пример с пакетом nginx)

1. Проверяем текущий статус пакета

dpkg --get-selections | grep nginx

Вывод может выглядеть так:

nginx                                   install

Если справа указано install, пакет установлен и не заморожен. Если указано hold, обновления уже заблокированы.

2. Замораживаем пакет с помощью apt-mark

sudo apt-mark hold nginx

Эта команда помечает пакет как «удерживаемый». Теперь apt не будет обновлять nginx при выполнении apt upgrade.

Пример вывода:

nginx set on hold.

3. Проверяем, что пакет действительно заблокирован

apt-mark showhold

Выводит список всех пакетов, находящихся в состоянии hold. Пример:

nginx

4. Размораживаем пакет при необходимости

sudo apt-mark unhold nginx

После этого nginx снова будет обновляться при системных апдейтах.

Альтернативные методы

1. Использование dpkg напрямую

echo "nginx hold" | sudo dpkg --set-selections

Эта команда делает то же самое, что и apt-mark hold, но работает на более низком уровне. Чтобы снять блокировку, используйте:

echo "nginx install" | sudo dpkg --set-selections

2. Блокировка версии через APT Pinning

Можно зафиксировать конкретную версию пакета, чтобы apt не обновлял его. Для этого создайте файл:

sudo nano /etc/apt/preferences.d/nginx.pref

И добавьте в него содержимое:

Package: nginx
Pin: version 1.18.0-6ubuntu14.4
Pin-Priority: 1001

Узнать нужную версию можно командой:

apt-cache policy nginx

Этот метод полезен, если вы хотите оставить пакет на конкретной версии, а не просто запретить обновления.

Проверка результата

Чтобы убедиться, что пакет не будет обновляться:

sudo apt update
sudo apt upgrade --simulate

В выводе не должно быть строк с обновлением пакета nginx. Опция --simulate (или -s) запускает «сухой» прогон без реальных изменений.

Как избежать проблем в будущем

  • Используйте apt-mark hold только для ключевых и стабильных пакетов.
  • Периодически проверяйте список удерживаемых пакетов (apt-mark showhold).
  • Перед обновлениями тестируйте новые версии в изолированной среде.
  • Автоматизируйте контроль версий через Ansible, Puppet или простые bash-скрипты.

FAQ

Можно ли удерживать сразу несколько пакетов?
Да, просто перечислите их через пробел:
sudo apt-mark hold nginx mysql-server php

Что делать, если apt-mark не срабатывает?
Убедитесь, что используете Debian/Ubuntu и установлен пакет apt. При необходимости можно воспользоваться альтернативой — dpkg --set-selections.

Как узнать, какие пакеты удерживаются?
Выполните apt-mark showhold — команда выведет весь список заблокированных пакетов.

Теперь вы знаете, как надёжно зафиксировать нужные версии пакетов с помощью apt-mark hold и избежать неожиданных обновлений.

Смотрите также: Как откатить пакет до предыдущей версии в apt

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Свежие материалы