Пакетный менеджер dpkg
Что умеет dpkg
Я уже писал про apt (apt-get) - здесь . В Debian и Ubuntu также есть пакетный менеджер dpkg . Он не работает с репозиториями и не может скачать оттуда зависимости, зато он может:
- установить локально доступный (скачанный) deb пакет,
- удалить приложение,
- показать список установленных приложений,
- показать информацию об установленном приложении,
- показать информацию о скаченном deb пакете.
Если при установки пакет запросит зависимости, то dpkg не сможет установить пакет и мы получим ошибку. Для того чтобы исправить эту ошибку мы можем выполнить уже знакомую по предыдущему уроку команду apt -f install.
Установка пакетов
Удалим apache2 если он был установлен. Удалим все его зависимости. Скачаем пакет и установим его с помощью dpkg, а затем исправим ошибки с зависимостями:
$ sudo apt purge apache2
$ sudo apt autoremove
$ apt download apache2
$ sudo dpkg -i apache2_2.4.53-1~deb11u1_amd64.deb
Выбор ранее не выбранного пакета apache2.
(Чтение базы данных … на данный момент установлено 39496 файлов и каталогов.)
Подготовка к распаковке apache2_2.4.53-1~deb11u1_amd64.deb …
Распаковывается apache2 (2.4.53-1~deb11u1) …
dpkg: зависимости пакетов не позволяют настроить пакет apache2:
apache2 зависит от apache2-bin (= 2.4.53-1~deb11u1), однако:
Пакет apache2-bin не установлен.
apache2 зависит от apache2-data (= 2.4.53-1~deb11u1), однако:
Пакет apache2-data не установлен.
apache2 зависит от apache2-utils (= 2.4.53-1~deb11u1), однако:
Пакет apache2-utils не установлен.
dpkg: ошибка при обработке пакета apache2 (--install):
проблемы зависимостей — оставляем не настроенным
Обрабатываются триггеры для man-db (2.9.4-2) …
При обработке следующих пакетов произошли ошибки:
apache2
$ sudo apt -f install
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово
Исправление зависимостей… Готово
Будут установлены следующие дополнительные пакеты:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap libcurl4 liblua5.3-0
Предлагаемые пакеты:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom www-browser
Следующие НОВЫЕ пакеты будут установлены:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap libcurl4 liblua5.3-0
Обновлено 0 пакетов, установлено 9 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Установлено или удалено не до конца 1 пакетов.
Необходимо скачать 2 529 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 8 496 kB.
Хотите продолжить? [Д/н]
Этот пример выполнен на Debian 11, но он точно также может быть выполнен и на Ubuntu 22.04.
Как вы поняли устанавливать пакет используя dpkg нужно с опцией -i. Обычно с помощью dpkg устанавливаются пакеты, которых нет в репозиториях. То есть вы их можете найти где-нибудь в интернете, скачать, а затем установить.
Удаление пакетов
Для удаления пакета используется опция -r:
$ sudo dpkg -r apache2
Список установленных пакетов
А с помощью опции -l можно посмотреть список установленных пакетов:
$ dpkg -l
Желаемый=неизвестно[u]/установить[i]/удалить[r]/вычистить[p]/зафиксировать[h]
| Состояние=не[n]/установлен[i]/настроен[c]/распакован[U]/частично настроен[F]/
частично установлен[H]/trig-aWait/Trig-pend
|/ Ошибка?=(нет)/требуется переустановка[R] (верхний регистр
в полях состояния и ошибки указывает на ненормальную ситуацию)
||/ Имя Версия Архитектура Описание
+++-================-===================-============================================
ii adduser 3.118 all add and remove users and groups
rc apache2 2.4.53-1~deb11u1 amd64 Apache HTTP Server
ii apache2-bin 2.4.53-1~deb11u1 amd64 Apache HTTP Server (modules and other binary files)
ii apache2-data 2.4.53-1~deb11u1 all Apache HTTP Server (common files)
ii apache2-utils 2.4.53-1~deb11u1 amd64 Apache HTTP Server (utility programs for web servers)
ii apparmor 2.13.6-10 amd64 user-space parser utility for AppArmor
ii apt 2.2.4 amd64 commandline package manager
ii apt-listchanges 3.24 all package change history notification tool
ii apt-utils 2.2.4 amd64 package management related utility programs
Вы можете заметить что пакет apache2, который я удалил отмечен как rc (удалён и настроен).
Информация о пакетах
Получить информацию о приложении можно с помощью -s:
$ dpkg -s apache2 | head
Package: apache2
Status: deinstall ok config-files
Priority: optional
Section: httpd
Installed-Size: 622
Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org>
Architecture: amd64
Version: 2.4.53-1~deb11u1
Config-Version: 2.4.53-1~deb11u1
Replaces: apache2.2-bin, apache2.2-common, libapache2-mod-proxy-uwsgi (<< 2.4.33)
alex@deb:~$ dpkg -s apt | head
Package: apt
Status: install ok installed
Priority: required
Section: admin
Installed-Size: 4337
Maintainer: APT Development Team <deity@lists.debian.org>
Architecture: amd64
Version: 2.2.4
Replaces: apt-transport-https (<< 1.5~alpha4~), apt-utils (<< 1.3~exp2~)
Provides: apt-transport-https (= 2.2.4)
- Первый раз я смотрю информацию о приложении apache2, который я удалил с помощью dpkg -r. Такое удаление не удаляет конфигурационные файлы, поэтому пакет хоть и удалён (deinstall), но настроен (config-files).
- Второй раз я смотрю информацию о приложении apt. Эта утилита установлена (install ok installed).
А если мы удалим приложение с помощью apt purge, то мы совсем не сможем получить о нём информацию с помощью dpkg:
$ sudo apt install apache2
$ sudo apt purge apache2
$ dpkg -s apache2
dpkg-query: пакет «apache2» не установлен, информация о нём недоступна
Use dpkg --info (= dpkg-deb --info) to examine archive files.
Можно посмотреть информацию о скаченном пакете с помощью dpkg -I:
$ dpkg -I apache2_2.4.53-1~deb11u1_amd64.deb
new Debian package, version 2.0.
size 273352 bytes: control archive=12768 bytes.
6578 байт(а), 157 строк conffiles
1121 байт(а), 23 строк control
1918 байт(а), 27 строк md5sums
10636 байт(а), 376 строк * postinst #!/bin/bash
3751 байт(а), 137 строк * postrm #!/bin/sh
10543 байт(а), 207 строк * preinst #!/bin/bash
837 байт(а), 24 строк * prerm #!/bin/sh
Package: apache2
Version: 2.4.53-1~deb11u1
Architecture: amd64
Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org>
Installed-Size: 622
Pre-Depends: dpkg (>= 1.17.14), init-system-helpers (>= 1.54~)
Depends: apache2-bin (= 2.4.53-1~deb11u1), apache2-data (= 2.4.53-1~deb11u1), apache2-utils (= 2.4.53-1~deb11u1), lsb-base, mime-support, perl:any, procps
Recommends: ssl-cert
Suggests: apache2-doc, apache2-suexec-pristine | apache2-suexec-custom, www-browser
Conflicts: apache2.2-bin, apache2.2-common
Breaks: libapache2-mod-proxy-uwsgi (<< 2.4.33)
Replaces: apache2.2-bin, apache2.2-common, libapache2-mod-proxy-uwsgi (<< 2.4.33)
Provides: httpd, httpd-cgi
Section: httpd
Priority: optional
Homepage: https://httpd.apache.org/
Description: Apache HTTP Server
The Apache HTTP Server Project's goal is to build a secure, efficient and
extensible HTTP server as standards-compliant open source software. The
result has long been the number one web server on the Internet.
.
Installing this package results in a full installation, including the
configuration files, init scripts and support scripts.
Можно посмотреть список всех файлов которые установились вместе с пакетом с помощью dpkg -L:
$ sudo apt install apache2
$ dpkg -L apache2 | head
/.
/etc
/etc/apache2
/etc/apache2/apache2.conf
/etc/apache2/conf-available
/etc/apache2/conf-available/charset.conf
/etc/apache2/conf-available/localized-error-pages.conf
/etc/apache2/conf-available/other-vhosts-access-log.conf
/etc/apache2/conf-available/security.conf
/etc/apache2/conf-available/serve-cgi-bin.conf
- В некоторых командах я добавляю (
| head), чтобы видеть только первые 10 строк из всего вывода.
Итог
Пакетный менеджер dpkg чаще используют не для установки или удаления приложений, а для просмотра информации об уже установленных приложениях или о скаченных пакетах. Устанавливают и удаляют приложения в основном те, которых нет в репозиториях и которые поставляются отдельными .deb пакетами.
Еще раз пробежимся по опциям:
-i,-r— установить или удалить пакет;-l— список установленных пакетов;-s— информация об установленном приложении;-I— информация о скачанном пакете;-L— список файлов, которые установились из пакета.
Если понравилась статья, подпишись на мой канал в VK или Telegram .