Введение / Зачем это нужно
dpkg — это низкоуровневый менеджер пакетов, который является основой систем управления пакетами в дистрибутивах на базе Debian (Debian, Ubuntu, Linux Mint и др.). В то время как apt и apt-get удобны для работы с репозиториями, dpkg незаменим для ручной установки локальных файлов .deb, детального просмотра состояния пакетов и решения сложных проблем с зависимостями. Этот гайд покрывает основные операции, которые понадобятся каждому администратору или进阶-пользователю Linux.
Требования / Подготовка
- Дистрибутив на базе Debian: Инструкция актуальна для Debian, Ubuntu, Linux Mint и их производных.
- Права суперпользователя: Большинство операций (
-i,-r,-P) требуют правsudo. - Локальный файл
.deb: Для шага установки вам понадобится скачанный файл пакета (например, с официального сайта проекта). - Базовое знакомство с терминалом: Умение навигации (
cd,ls) и редактирования команд.
Шаг 1: Проверка наличия и версии dpkg
Хотя dpkg почти всегда предустановлен, полезно убедиться в его наличии и узнать версию.
dpkg --version
Ожидаемый вывод (пример):
Debian `dpkg` package management program version 1.22.0 (amd64).
Если команда не найдена, установите пакет dpkg через менеджер вашего дистрибутива (например, sudo apt update && sudo apt install dpkg).
Шаг 2: Установка пакета из локального файла .deb
Это основная операция для установки программ, которых нет в официальных репозиториях, или для установки конкретной версии.
- Перейдите в каталог с загруженным файлом (например,
~/Downloads). - Выполните установку:
sudo dpkg -i имя_файла.deb
-i(install) — ключевой флаг.- Важно:
dpkgне разрешает зависимости автоматически. Если пакет требует другие библиотеки или программы, установка завершится с ошибкой. В этом случае перейдите к шагу 6 для исправления.
Пример:
cd ~/Downloads
sudo dpkg -i google-chrome-stable_current_amd64.deb
Шаг 3: Удаление пакета
Удаление через dpkg более «грубое», чем через apt, но позволяет точно контролировать процесс.
- Удаление пакета (оставляет конфиги):
sudo dpkg -r package_name-r(remove) — удаляет binaries и данные пакета, но сохраняет конфигурационные файлы в/etc/. Это полезно, если вы планируете переустановить пакет с теми же настройками.
- Полное удаление (удаляет конфиги):
sudo dpkg -P package_name-P(purge) — удаляет всё, включая конфиги. Используйте с осторожностью, настройки будут потеряны безвозвратно.
Пример:
sudo dpkg -r nginx
# или
sudo dpkg -P nginx
Шаг 4: Просмотр информации об установленных пакетах
dpkg предоставляет несколько способов получить информацию.
- Список всех установленных пакетов:
dpkg -l
Вывод очень длинный. Для фильтрации используйтеgrep:dpkg -l | grep -i python - Подробная информация о конкретном пакете:
dpkg -s package_name
Покажет статус, версию, описание, зависимости, размеры и другие метаданные. - Список файлов, установленных пакетом:
dpkg -L package_name
Полезно, чтобы понять, куда именно пакет себя «разложил». - Поиск пакета по файлу:
dpkg -S /путь/к/файлу
Ответит на вопрос «Какому пакету принадлежит этот файл?».
Пример:
dpkg -s curl
dpkg -S /usr/bin/curl
Шаг 5: Проверка целостности пакетов
Если вы подозреваете, что файлы системы были изменены (например, после взлома или сбоя), можно проверить, соответствуют ли они пакетной базе.
sudo dpkg -V package_name
- Без имени пакета проверит все установленные пакеты (это может занять много времени).
- В выводе символы в первых 5 колонках указывают на изменения (например,
5— изменение контрольной суммы,M— изменение режима доступа). Пустые колонки означают, что файл не изменился.
Шаг 6: Решение проблем с зависимостями (частый кейс)
Самая частая ошибка при использовании dpkg -i:
dpkg: dependency problems prevent configuration of package_name
Это значит, что пакет требует другие пакеты, которые ещё не установлены.
Решение: Используйте apt, который умеет автоматически находить и устанавливать недостающие зависимости из репозиториев.
sudo apt --fix-broken install
Эта команда проанализирует сломанные зависимости и установит недостающие пакеты. После её успешного выполнения можно снова попробовать sudo dpkg -i имя_файла.deb или просто перейти к следующему шагу — apt часто сам донастраивает пакет после исправления зависимостей.
Принудительная переконфигурация: Если пакет установлен, но не настроен (статус rc), выполните:
sudo dpkg --configure -a
Шаг 7: Работа с пакетами в режиме «только для чтения» (extract)
Иногда нужно просто извлечь файлы из .deb архива без установки в систему (например, для просмотра скриптов).
- Создайте временный каталог.
- Распакуйте архив
ar(формат.deb— это архивar):mk temp_dir && cd temp_dir ar xx /путь/к/package.deb - Извлеките содержимое
data.tar.xz(илиdata.tar.gz):tar -xf data.tar.xz
Теперь все файлы пакета будут в текущей директории.
Проверка результата
После выполнения основных операций проверьте результат:
- После установки:
dpkg -l | grep имя_пакета(статус должен бытьii). - После удаления:
dpkg -l | grep имя_пакета(статус должен бытьrcили пакет не выводиться). - После исправления зависимостей: Убедитесь, что команда
sudo apt --fix-broken installзавершилась без ошибок. - Проверьте работоспособность программы: Запустите её (например,
nginx -vилиgoogle-chrome --version).
Возможные проблемы
- Ошибка «dpkg: error: parsing file '/var/lib/dpkg/status' near line X...»
- Причина: Повреждённая база данных пакетов.
- Решение: Восстановите резервную копию:
sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/status. Если бэкапа нет, попробуйте пересоздать пустой файл:echo "Package: status\ndpkg" | sudo tee /var/lib/dpkg/status(осторожно, это сбросит историю установки).
- «dpkg: warning: package not marked as conffile, but configuration file found: ...»
- Причина: Файл конфигурации (
conffile) был изменён вручную, а пакет пытается его перезаписать. - Решение: Либо сохраните вашу версию файла, либо позвольте
dpkgустановить версию из пакета (при обновлении). Используйтеdpkg-divert, если нужно сохранить кастомный файл.
- Причина: Файл конфигурации (
- Пакет «завис» в состоянии «half-installed» или «half-configured»
- Решение: Принудительно удалите проблемный пакет:
sudo dpkg --remove --force-remove-reinstreq package_name, а затем очистите зависимости черезsudo apt --fix-broken install.
- Решение: Принудительно удалите проблемный пакет:
- Нет прав на файл в каталоге установки
- Причина: Попытка установить пакет в системный каталог без
sudo. - Решение: Всегда используйте
sudoдля операций записи (-i,-r,-P).
- Причина: Попытка установить пакет в системный каталог без
Дополнительные возможности (кратко)
dpkg-reconfigure package_name— повторно запускает скрипт настройки пакета (полезно после изменения конфига или при ошибках конфигурации).dpkg --get-selections— выводит список всех пакетов с их статусом (install, hold, deinstall). Можно сохранить в файл для бэкапа.dpkg --set-selections < file— восстанавливает выбор пакетов из файла, созданного--get-selections.dpkg -C— проверяет целостность файловой системы пакетов, ищет недостающие или повреждённые файлы.
Заключение
Вы освоили базовый, но критически важный инструмент — dpkg. Помните: для повседневной работы с репозиториями используйте apt, а dpkg оставьте для ручной установки .deb файлов, детального аудита и решения сложных проблем с пакетами. Всегда проверяйте зависимости после ручной установки командой sudo apt --fix-broken install.