Введение / Зачем это нужно
Базовые команды apt install, apt update и apt upgrade знает почти каждый пользователь Debian/Ubuntu. Однако для администрирования серверов, поддержания стабильности рабочих станций или тонкой настройки окружения этих возможностей часто недостаточно.
Этот гайд посвящён продвинутому управлению пакетами APT. Вы узнаете, как:
- Контролировать обновления отдельных пакетов, не затрагивая систему в целом.
- Настраивать приоритеты репозиториев, чтобы устанавливать конкретные версии ПО.
- Глубоко анализировать зависимости и доступные версии пакетов.
- Безопасно чистить систему от ненужных файлов и освобождать место.
После прохождения вы получите полный контроль над жизненным циклом пакетов в вашей системе.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть доступ к учетной записи с правами sudo.
- Система основана на Debian, Ubuntu или их производных (Linux Mint, Pop!_OS).
- Актуальный список пакетов обновлён:
sudo apt update. - Вы знакомы с базовым синтаксисом командной строки и понятием «пакет» в контексте 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 без переключения всей системы.
- Создайте файл предпочтений:
sudo nano /etc/apt/preferences.d/99custom-pin - Добавьте конфигурацию. Пример: дать пакету
redisиз репозиторияbuster-backportsприоритет 990 (выше, чем у стандартного 500), чтобы всегда бралась версия оттуда.Package: redis Pin: release a=buster-backports Pin-Priority: 990Pin-Priority: 1001— принудительная установка этой версии, даже если она старше.Pin-Priority: 990— установка этой версии, если нет более новой в других репозиториях с приоритетом >= 1000.Pin-Priority: 500— стандартный приоритет для установки.
- Обновите кэш и установите/обновите пакет:
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). Это удобно для управления.
- Посмотрите текущие источники:
ls -la /etc/apt/sources.list* cat /etc/apt/sources.list ls /etc/apt/sources.list.d/ - Добавьте новый репозиторий (пример для 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/nullsigned-by— это современный способ указания ключа, более безопасный, чемapt-key(устарел). - Удалите ненужный источник: просто удалите соответствующий файл из
/etc/apt/sources.list.d/:sudo rm /etc/apt/sources.list.d/старый-репозиторий.list - Не забудьте обновить кэш:
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> - Показать все доступные версии пакета и их репозитории:
Это главная команда для отладки pinning.apt-cache policy <package_name> - Показать зависимости (что требуется для установки):
apt-cache depends <package_name> - Показать обратные зависимости (что требует этот пакет):
apt-cache rdepends <package_name> - Найти пакет, предоставляющий конкретный файл (если файл потерялся):
Сначала установитеapt-file search <имя_файла>apt-fileи обновите его базу:sudo apt install apt-file && sudo apt-file update.
Проверка результата
- Для hold/unhold: Выполните
apt-mark showhold— в списке должен быть (или не быть) ваш пакет. - Для pinning: Запустите
apt-cache policy <package_name>. В поле «Installed» должна отображаться версия из приоритетного репозитория. - Для очистки: Проверьте размер кэша:
sudo du -sh /var/cache/apt/archives/. Он должен быть минимальным послеapt clean. - Общая проверка: Попробуйте выполнить
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.