upgrade hold

upgrade hold — возможность предотвратить обновление какого-либо системного пакета при выполнении apt-get upgrade.

 

apt-get update && apt-get upgrade берет информацию из всех подключенных репозиториев, затем обновляет все пакеты, обновление которых возможно до максимальной доступной версии.

 

 

upgrade hold — запрет обновления пакетов

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

Например, если в конфигурацию пакета внесены значительные изменения, которые могут быть затерты.

 

Самая часто встречающаяся ситуация — на сервере используется Nginx, и его конфигурация была изменена, т.е. изначально взяты исходные коды, собран какой-то дополнительный модуль, затем подключен при конфигурации. Nginx в этом случае перестанет работать так, как ожидается, если версию пакета обновить.

 

В таких ситуациях нужен upgrade hold или «заморозка версии», запрет на уровне системы на обновление определенного пакета.

 

«Холдить» пакет в Debian подобных системах можно используя dpkg и apt. Все команды выполняются от имени root или с sudo

 

Hold в dpkg

Запретить автоматическое обновление:

echo «ИМЯ-ПАКЕТА hold» | dpkg —set-selections

 

Снять блокировку и разрешить обновление:

echo «ИМЯ-ПАКЕТА install» | dpkg —set-selections

 

Вывести информацию по всем пакетам:

dpkg —get-selections

 

Команду можно использовать чтобы сформировать список всех пакетов, если нужно запретить обновлять все.

 

 

Вывод можно отсортировать и получить данные по, например, Nginx:

dpkg —get-selections | grep «Nginx»

 

 

Hold в apt

Тех же результатов можно добиться используя менеджер пакетов apt.

Запретить автоматическое обновление:

apt-mark hold ИМЯ-ПАКЕТА

 

Снять блокировку и разрешить обновление:

apt-mark unhold ИМЯ-ПАКЕТА

 

Если hold устанавливается для Nginx — пакет пересобирается и для него добавляется какой-то функционал. Такая необходимость обычно возникает в нагруженных проектах, для которых Nginx настраивается специальным образом.