Фиксация версий пакетов в Ubuntu с помощью apt-mark

Введение в управление состоянием пакетов

При администрировании серверов на базе Ubuntu нередко возникает задача защитить критически важные компоненты от незапланированного обновления или оптимизировать дерево установленных библиотек. Утилита apt-mark предоставляет инженеру полный контроль над жизненным циклом приложений: с ее помощью можно жестко зафиксировать (hold) нужную версию ПО, предотвратив сбои в продакшене при выполнении регламентных обновлений, а также гибко разграничить автоматически подтянутые зависимости и пакеты, инсталлированные вручную. В данном руководстве на практических примерах рассматриваются ключевые приемы безопасного обслуживания пакетной базы.

Запрет обновлений: фиксация пакета через hold и аудит статуса

Для демонстрации механизма блокировки развернем тестовое окружение. Сначала синхронизируем локальные индексы репозиториев и установим утилиту передачи данных curl, выполнив команду sudo apt-get update -qq && sudo apt-get install -y curl.

Установка тестового пакета curl через apt-get

Чтобы оградить установленную программу от вмешательства пакетного менеджера при выполнении последующих процедур вроде apt upgrade, применим команду sudo apt-mark hold curl. Данная директива переводит выбранное ПО в статус заморозки, исключая его из любых плановых обновлений дистрибутива.
⚙️ [Справочник базовых подкоманд]

hold : блокирует пакет от автоматического обновления новыми версиями.
unhold : снимает блокировку, возвращая пакету возможность штатной модернизации.
showhold : выводит полный перечень заблокированных на текущий момент пакетов.
auto : маркирует пакет как автоматическую зависимость, установленную вспомогательно.
manual : помечает пакет как явно инсталлированный системным администратором.
showauto : генерирует список всех пакетов, имеющих статус автоматических зависимостей.
showmanual : отображает перечень приложений, установленных вручную.

Блокировка обновления curl с помощью sudo apt-mark hold curl

Для контроля текущего состояния системы воспользуемся командой apt-mark showhold. Она опрашивает базу данных APT и возвращает список всех заблокированных компонентов.
В выводе терминала отобразится curl, подтверждая, что предохранитель успешно активирован.

Просмотр списка заблокированных пакетов с помощью apt-mark showhold

Снятие ограничений: возврат к штатному обновлению с unhold

Когда необходимость в заморозке отпадает (например, проведено тестирование совместимости нового релиза), статус пакета возвращается в исходное состояние командой sudo apt-mark unhold curl.
Успешное завершение операции подтверждается системным уведомлением Canceled hold on curl., свидетельствующим о снятии блокировочного флага.

Разблокировка пакета curl через sudo apt-mark unhold curl

Убедимся в отсутствии активных ограничений, повторно запросив список удерживаемых пакетов через apt-mark showhold.
Терминал не вернет никаких записей — это гарантирует, что curl вновь будет обрабатываться стандартными процедурами обновления.

Проверка пустого списка блокировок через apt-mark showhold

Контроль зависимостей: манипуляции флагами markauto и unmarkauto

Для изучения механизмов очистки и переключения метаданных инсталляции установим консольный JSON-парсер jq, вызвав sudo apt-get install -y jq.

Установка утилиты jq через sudo apt-get install -y jq

Команда sudo apt-mark markauto jq переопределяет статус пакета: система начинает воспринимать его не как самостоятельное ПО, а как сопутствующую зависимость.
Практическая польза такой настройки заключается в том, что при удалении родительских пакетов данный компонент будет автоматически удален из ОС при выполнении apt autoremove, не захламляя накопитель.

Смена статуса пакета на автоматический с помощью sudo apt-mark markauto jq

Верифицировать присвоенный статус позволяет команда apt-mark showauto jq.
Появление имени jq в консоли свидетельствует о том, что пакет успешно переведен в категорию зависимостей (auto).

Проверка автоматического статуса jq через apt-mark showauto jq

Если требуется гарантировать сохранность программы в системе независимо от других пакетов, статус возвращают к ручному с помощью sudo apt-mark unmarkauto jq.
После этого компонент будет защищен от случайного удаления через apt autoremove, даже если ни один другой сервис больше на него не ссылается.

Возврат статуса ручной установки через sudo apt-mark unmarkauto jq

Подтвердим возврат в основную категорию вызовом apt-mark showmanual jq.
Присутствие jq в ответе терминала подтверждает, что статус ручной инсталляции полностью восстановлен.

Проверка ручного статуса пакета через apt-mark showmanual jq

Диагностика и аудит системных списков пакетов

Чтобы оценить состав программного обеспечения, добавленного администратором, вызовем команду apt-mark showmanual | head -n 10, выводящую первые десять записей из списка явно установленных программ.
Среди базовых утилит дистрибутива здесь отобразится ранее добавленный пакет curl.

Просмотр первых десяти вручную установленных пакетов

С обратной задачей — получением перечня библиотек и модулей, подтянутых пакетным менеджером автоматически — справляется команда apt-mark showauto | head -n 10.
Такая выборка демонстрирует служебные зависимости и разделяемые библиотеки, находящиеся под автоматическим контролем APT.

Просмотр первых десяти автоматически установленных зависимостей

Грамотное применение инструментария apt-mark позволяет системному администратору точно регулировать процессы обновления и поддерживать идеальный порядок в зависимостях Ubuntu, предотвращая нештатные падения сервисов из-за конфликта версий.