Linux

Управление пакетами APT: продвинутые техники и тонкая настройка

Этот гайд выходит за рамки базовых команд apt install/update. Вы узнаете, как точечно управлять версиями пакетов, настраивать источники и поддерживать систему в чистоте — навыки, необходимые системным администраторам и опытным пользователям.

Обновлено 17 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Debian 11/12Ubuntu 20.04/22.04/24.04Linux Mint 21/22

Введение / Зачем это нужно

Базовые команды apt install, apt update и apt upgrade знает почти каждый пользователь Debian/Ubuntu. Однако для администрирования серверов, поддержания стабильности рабочих станций или тонкой настройки окружения этих возможностей часто недостаточно.

Этот гайд посвящён продвинутому управлению пакетами APT. Вы узнаете, как:

  • Контролировать обновления отдельных пакетов, не затрагивая систему в целом.
  • Настраивать приоритеты репозиториев, чтобы устанавливать конкретные версии ПО.
  • Глубоко анализировать зависимости и доступные версии пакетов.
  • Безопасно чистить систему от ненужных файлов и освобождать место.

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

Требования / Подготовка

Перед началом убедитесь, что:

  1. У вас есть доступ к учетной записи с правами sudo.
  2. Система основана на Debian, Ubuntu или их производных (Linux Mint, Pop!_OS).
  3. Актуальный список пакетов обновлён: sudo apt update.
  4. Вы знакомы с базовым синтаксисом командной строки и понятием «пакет» в контексте APT.

Шаг 1: Управление состоянием пакета (Hold/Unhold)

Часто требуется временно «заморозить» критически важный пакет (например, ядро или библиотеку), чтобы он не был обновлён автоматически во время apt upgrade.

Как установить hold (заблокировать):

sudo apt-mark hold <package_name>

Например, чтобы заблокировать пакет nginx:

sudo apt-mark hold nginx

Как снять hold (разблокировать):

sudo apt-mark unhold <package_name>

Как проверить состояние пакетов:

apt-mark showhold

Эта команда выведет список всех пакетов, находящихся в состоянии hold.

⚠️ Важно: Hold не защищает пакет от удаления через apt remove. Это только блокировка операций обновления/установки.

Шаг 2: Тонкая настройка приоритетов (Pinning)

Pinning — это механизм, позволяющий назначать пакетам из определённых репозиториев более высокий приоритет, чем у других. Это нужно, если вы хотите установить конкретную версию пакета из, например, testing или backports без переключения всей системы.

  1. Создайте файл предпочтений:
    sudo nano /etc/apt/preferences.d/99custom-pin
    
  2. Добавьте конфигурацию. Пример: дать пакету redis из репозитория buster-backports приоритет 990 (выше, чем у стандартного 500), чтобы всегда бралась версия оттуда.
    Package: redis
    Pin: release a=buster-backports
    Pin-Priority: 990
    
    • Pin-Priority: 1001 — принудительная установка этой версии, даже если она старше.
    • Pin-Priority: 990 — установка этой версии, если нет более новой в других репозиториях с приоритетом >= 1000.
    • Pin-Priority: 500 — стандартный приоритет для установки.
  3. Обновите кэш и установите/обновите пакет:
    sudo apt update
    sudo apt install redis
    

    APT выберет версию из buster-backports согласно правилу pinning.

💡 Совет: Для просмотра доступных версий пакета и их репозиториев используйте apt-cache policy <package_name>.

Шаг 3: Работа с источниками пакетов (sources.list)

Современные системы используют не один файл /etc/apt/sources.list, а каталог /etc/apt/sources.list.d/, где каждый файл — это отдельный источник (например, от Docker, NodeSource). Это удобно для управления.

  1. Посмотрите текущие источники:
    ls -la /etc/apt/sources.list*
    cat /etc/apt/sources.list
    ls /etc/apt/sources.list.d/
    
  2. Добавьте новый репозиторий (пример для Docker):
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    Обратите внимание на параметр signed-by — это современный способ указания ключа, более безопасный, чем apt-key (устарел).
  3. Удалите ненужный источник: просто удалите соответствующий файл из /etc/apt/sources.list.d/:
    sudo rm /etc/apt/sources.list.d/старый-репозиторий.list
    
  4. Не забудьте обновить кэш:
    sudo apt update
    

Шаг 4: Эффективная очистка системы

Со временем система накапливает старые версии пакетов, файлы конфигураций удалённых пакетов и кэш. Это может занимать сотни мегабайт.

  • sudo apt autoremove — удаляет пакеты, которые были установлены как зависимости, но больше не нужны ни одному установленному пакету.
  • sudo apt cleanполностью очищает локальный кэш (/var/cache/apt/archives/). Файлы пакетов (.deb) будут скачаны заново при следующей установке/обновлении.
  • sudo apt autoclean — более мягкая версия clean. Удаляет только те файлы пакетов из кэша, которые больше не доступны в репозиториях (устаревшие версии).
  • Комбинированная команда для полной очистки (с осторожностью!):
    sudo apt autoremove --purge
    sudo apt clean
    
    Флаг --purge удаляет также конфигурационные файлы пакетов, удаляемых autoremove. Используйте, если уверены, что конфиги не понадобятся.

Шаг 5: Расширенный поиск и анализ пакетов

apt-cache — мощный инструмент для запросов к локальной базе данных пакетов.

  • Поиск пакетов по имени/описанию:
    apt-cache search <ключевое_слово>
    # Например, поиск инструментов для работы с JSON
    apt-cache search json | grep -i tool
    
  • Показать подробную информацию о пакете:
    apt-cache show <package_name>
    
  • Показать все доступные версии пакета и их репозитории:
    apt-cache policy <package_name>
    
    Это главная команда для отладки pinning.
  • Показать зависимости (что требуется для установки):
    apt-cache depends <package_name>
    
  • Показать обратные зависимости (что требует этот пакет):
    apt-cache rdepends <package_name>
    
  • Найти пакет, предоставляющий конкретный файл (если файл потерялся):
    apt-file search <имя_файла>
    
    Сначала установите apt-file и обновите его базу: sudo apt install apt-file && sudo apt-file update.

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

  1. Для hold/unhold: Выполните apt-mark showhold — в списке должен быть (или не быть) ваш пакет.
  2. Для pinning: Запустите apt-cache policy <package_name>. В поле «Installed» должна отображаться версия из приоритетного репозитория.
  3. Для очистки: Проверьте размер кэша: sudo du -sh /var/cache/apt/archives/. Он должен быть минимальным после apt clean.
  4. Общая проверка: Попробуйте выполнить sudo apt upgrade в режиме симуляции, чтобы увидеть, какие пакеты будут обновлены и с какими версиями:
    sudo apt upgrade --simulate
    

Возможные проблемы

  • Ошибка Unable to lock directory /var/lib/dpkg/lock — другой процесс (возможно, другой экземпляр apt или synaptic) использует менеджер пакетов. Подождите или завершите процесс: sudo killall apt apt-get (осторожно!).
  • После настройки pinning пакет не обновляется до нужной версии — проверьте apt-cache policy <package> и убедитесь, что приоритет (Pin-Priority) установлен правильно (обычно >= 990 для принудительного выбора). Также проверьте, что версия в целевом репозитории действительно новее.
  • apt autoremove предлагает удалить важный пакет — перед подтверждением внимательно проверьте список. Если пакет действительно нужен, но apt считает его ненужным, возможно, другой установленный пакет имеет неполные зависимости. Используйте apt-cache rdepends <важный_пакет>, чтобы найти, кто на него ссылается.
  • Ошибки GPG при добавлении нового репозитория — убедитесь, что вы корректно импортировали ключ (используйте signed-by в sources.list) и что ключ не устарел.

Дополнительные ресурсы и советы

  • Всегда делайте резервную копию важных конфигурационных файлов (/etc/apt/sources.list, /etc/apt/preferences.d/) перед их редактированием.
  • Для отката проблемной установки/обновления используйте apt-get install <package_name>=<версия> (указывая конкретную версию из вывода apt-cache policy).
  • Инструмент deborphan (установка через sudo apt install deborphan) помогает находить «сирот» — пакеты, не являющиеся зависимостями ни для чего. Полезно в связке с apt autoremove.
  • Никогда не редактируйте файлы в /var/lib/apt/lists/ вручную. Это кэшированные метаданные репозиториев, они перезаписываются при apt update.

Часто задаваемые вопросы

Как временно запретить обновление конкретного пакета в Ubuntu?
Что такое pinning в APT и зачем он нужен?
Чем отличается `apt autoremove` от `apt purge --auto-remove`?
Как безопасно почистить кэш APT, чтобы освободить место?

Полезное

Управление состоянием пакета: Hold/Unhold
Тонкая настройка приоритетов (Pinning)
Работа с источниками пакетов (sources.list и fragments)
Эффективная очистка системы
Расширенный поиск и анализ пакетов