Управление пакетами в Debian: dpkg и apt [102.4]

Рейтинг: 64.6% · 12 голосов
Полный курс LPIC-1 (экзамены 101-500 и 102-500): архитектура, загрузка, пакеты, команды и текст, ФС и права, шелл-скрипты, пользователи, сервисы, сеть, безопасность. Debian и RHEL.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Управление пакетами в Debian: dpkg и apt [102.4]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-1 и как устроен путь администратора
  2. Железо, устройства и модули ядра [101.1]
  3. Загрузка системы: от BIOS до systemd [101.2]
  4. systemd, цели и уровни выполнения [101.3]
  5. План разметки диска и swap [102.1]
  6. Загрузчик GRUB 2 [102.2]
  7. Разделяемые библиотеки [102.3]
  8. Управление пакетами в Debian: dpkg и apt [102.4] (вы здесь)
  9. Управление пакетами RPM, DNF и Zypper [102.5]
  10. Linux как гость виртуализации [102.6]
  11. Командная строка Bash [103.1]
  12. Обработка текста фильтрами [103.2]
  13. Базовое управление файлами [103.3]
  14. Потоки, конвейеры и перенаправление [103.4]
  15. Процессы: создание, мониторинг, сигналы [103.5]
  16. Приоритеты выполнения процессов [103.6]
  17. Регулярные выражения [103.7]
  18. Редактор vi и vim [103.8]
  19. Разделы и создание файловых систем [104.1]
  20. Целостность и обслуживание ФС [104.2]
  21. Монтирование файловых систем [104.3]
  22. Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты
  23. Жёсткие и символические ссылки
  24. FHS и поиск файлов в системе [104.7]
  25. Окружение и кастомизация оболочки [105.1]
  26. Урок 25. Написание простых bash-скриптов [105.2]
  27. Графика, рабочие столы и доступность
  28. Учётные записи пользователей и групп
  29. Автоматизация задач: cron, at, таймеры [107.2]
  30. Локализация и интернационализация [107.3]
  31. Системное время и синхронизация [108.1]
  32. Системное логирование [108.2]
  33. Основы почтового агента (MTA) [108.3]
  34. Печать и CUPS [108.4]
  35. Основы интернет-протоколов [109.1]
  36. Постоянная конфигурация сети [109.2]
  37. Диагностика сети [109.3]
  38. DNS на стороне клиента [109.4]
  39. Задачи администрирования безопасности [110.1]
  40. Настройка безопасности хоста [110.2]
  41. Шифрование данных: SSH и GnuPG [110.3]
Урок 7. Управление пакетами в Debian: dpkg и apt [102.4]

Любая работа администратора Debian или Ubuntu сводится к установке, обновлению и удалению софта без поломки системы. В этом уроке разберём два слоя инструментов: низкоуровневый dpkg, который оперирует одним .deb-файлом, и высокоуровневый apt, который тянет зависимости из репозиториев. Поймём, кто за что отвечает, как читать локальную базу пакетов и где прячутся источники. Дистрибутивы для примеров - Debian 13 (trixie) и Ubuntu 24.04 LTS.

Изображение

Как это работает

Пакет .deb - это ar-архив из трёх частей: метаданные (control), сами файлы (data) и debian-binary с версией формата. dpkg распаковывает data в корень файловой системы, прописывает пакет в свою базу и запускает скрипты сопровождения (preinst, postinst). База dpkg живёт в /var/lib/dpkg: список установленного в файле status, а перечни файлов каждого пакета - в /var/lib/dpkg/info/*.list. Именно по этой базе работают запросы dpkg -l, -L, -S.

Ключевое ограничение: dpkg видит только тот файл, который вы ему дали. Он проверит зависимости и откажется настраивать пакет, у которого их нет, но сам ничего не скачает. Поэтому после dpkg -i с нехваткой зависимостей пакет повисает в состоянии полу-настроенного.

Над dpkg стоит apt. Он знает про репозитории, держит локальный кэш описаний всех доступных пакетов, строит граф зависимостей и решает, что докачать. apt вызывает dpkg для собственно установки. apt-get и apt-cache - это старый стабильный интерфейс для скриптов, а apt - человекочитаемая обёртка с прогресс-баром и цветом. В 2026 в интерактивной работе используют apt, в автоматизации - apt-get (его вывод стабилен между версиями).

Откуда apt берёт пакеты, задаётся в /etc/apt/sources.list и в отдельных файлах каталога /etc/apt/sources.list.d/. В современных Debian 13 и Ubuntu 24.04 формат deb822 (файлы с расширением .sources) стал основным: вместо одной строки - блок полей Types, URIs, Suites, Components, Signed-By. Ключи репозиториев теперь не сваливают в общий доверенный набор, а указывают через Signed-By на конкретный файл в /etc/apt/keyrings.

Команды и примеры

Низкий уровень, dpkg. Установка локального файла, просмотр и поиск:

Код: Выделить всё

dpkg -i ./mc_4.8.31_amd64.deb   # установить .deb (зависимости НЕ тянет)
dpkg -l | grep mc               # есть ли пакет и его состояние (ii = ok installed)
dpkg -L mc                      # какие файлы принадлежат пакету
dpkg -S /usr/bin/mc             # какому пакету принадлежит этот файл
dpkg -r mc                      # удалить, оставив конфиги
dpkg -P mc                      # purge: удалить вместе с конфигами
dpkg --configure -a             # донастроить все недонастроенные пакеты
В выводе dpkg -l первые два символа - это желаемое и текущее состояние. ii значит установлен нормально, rc - удалён, но остались конфиги, iU или iF - проблема с настройкой.

Высокий уровень, apt. Обновление индексов и установка с зависимостями:

Код: Выделить всё

apt update                # обновить локальный кэш описаний из репозиториев
apt install nginx         # установить пакет и все его зависимости
apt remove nginx          # удалить пакет, конфиги оставить
apt purge nginx           # удалить вместе с конфигами
apt autoremove            # снести зависимости, которые больше никому не нужны
apt search reverse-proxy  # поиск по имени и описанию
apt show nginx            # подробности: версия, зависимости, размер
Разница между обновлениями важна для экзамена:

Код: Выделить всё

apt upgrade        # обновить пакеты БЕЗ удаления уже установленных
apt full-upgrade   # то же, но РАЗРЕШЕНО удалять пакеты ради разрешения зависимостей
apt-get full-upgrade исторически зовётся dist-upgrade - это синонимы. Команда apt-cache служит только для запросов к кэшу, ничего не меняет: apt-cache policy nginx покажет, из какого репозитория и какой версии пакет будет взят и какие приоритеты у источников.

Фиксация версии (hold), чтобы пакет не обновлялся:

Код: Выделить всё

apt-mark hold nginx       # запретить обновление nginx
apt-mark unhold nginx     # снять фиксацию
apt-mark showhold         # список зафиксированных
dpkg --get-selections | grep hold   # альтернативный взгляд через dpkg
Если dpkg -i упал на зависимостях, лечит это apt - он докачает недостающее:

Код: Выделить всё

apt install -f            # fix-broken: доустановить зависимости и донастроить
В RHEL и Fedora этот мир выглядит иначе: там dnf (в Fedora 41+ это уже dnf5) и rpm вместо apt и dpkg, репозитории в /etc/yum.repos.d. Аналог dpkg -S - rpm -qf, аналог apt install - dnf install. Здесь это упомянуто только для ориентира, тема урока - семейство Debian.

Частые грабли
  • Забыли apt update перед install после правки источников. apt поставит старую версию из устаревшего кэша или скажет, что пакет не найден.
  • Ставите .deb через dpkg -i и удивляетесь ошибке зависимостей. Используйте apt install ./file.deb - он и поставит файл, и подтянет зависимости.
  • remove вместо purge оставляет конфиги в /etc. При переустановке всплывают старые настройки, а dpkg -l показывает пакет в состоянии rc.
  • apt autoremove может снести нужное, если пакет был установлен как зависимость, а вы пользуетесь им напрямую. Пометьте его apt-mark manual.
  • Ручная правка /var/lib/dpkg/status. Это прямой путь к разрушению базы. Состояния меняют только через apt-mark и dpkg.
  • Сторонний репозиторий без Signed-By в deb822 либо не подпишется ключом, либо apt откажется его использовать. Старый apt-key в 2026 удалён.
Мини-лаба
  • На стенде Debian 13 или Ubuntu 24.04 выполните apt update, затем apt install mc tree.
  • Узнайте, какому пакету принадлежит /usr/bin/tree, через dpkg -S, и выведите список его файлов через dpkg -L.
  • Зафиксируйте mc командой apt-mark hold mc и проверьте apt-mark showhold.
  • Запустите apt upgrade и убедитесь, что mc в списке к удержанию не трогается.
  • Снимите фиксацию apt-mark unhold mc.
  • Удалите tree через apt remove, затем найдите оставшийся в состоянии rc пакет в dpkg -l и доведите до purge.
  • Запустите apt autoremove и посмотрите, что система предложит убрать.
Контрольные вопросы
  • Чем dpkg -i принципиально отличается от apt install при установке одного .deb-файла?
  • Какая команда покажет, какому пакету принадлежит файл /etc/nginx/nginx.conf?
  • В чём разница между apt upgrade и apt full-upgrade и когда нужен второй?
  • Что означают символы rc в первой колонке вывода dpkg -l и как от этого состояния избавиться?
  • Где задаются источники пакетов и зачем в формате deb822 нужно поле Signed-By?
  • Как запретить обновление конкретного пакета и как потом снять запрет?
👍3 ❤️ 🔥1 😄 🤔1
Аватара пользователя
kotlin_ninja
Сообщения: 1
Зарегистрирован: 15 май 2026, 00:07

Re: Управление пакетами в Debian: dpkg и apt [102.4]

Сообщение kotlin_ninja »

А правда что apt-key теперь совсем выпилили? у меня в старой инструкции по докеру apt-key add стоит, оно молча ничего не делает
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
toxicstack
Сообщения: 1
Зарегистрирован: 22 май 2026, 02:48

Re: Управление пакетами в Debian: dpkg и apt [102.4]

Сообщение toxicstack »

Поймал rc у пакета после remove, dpkg -l его показывает но файлов нет. purge добил, спасибо за объяснение колонок
👍2 ❤️1 🔥1 😄 🤔
Ответить
← Предыдущая глава
Разделяемые библиотеки [102.3]
Следующая глава →
Управление пакетами RPM, DNF и Zypper [102.5]

Все главы курса «LPIC-1: администратор Linux (101 + 102)»

Поделиться темой: ✈ Telegram VK
  • Похожие темы

Вернуться в «LPIC-1: администратор Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость