Пакетный менеджер dpkg

На этом уроке рассмотрим пакетный менеджер dpkg, который в отличии от apt не умеет работать с репозиториями.















Что умеет dpkg




Помимо apt (apt-get) в Debian и Ubuntu есть пакетный менеджер dpkg. Он не работает с репозиториями и не может скачать оттуда зависимости, зато он может:




  • установить локально доступный (скачанный) deb пакет,
  • удалить приложение,
  • показать список установленных приложений,
  • показать информацию об установленном приложении,
  • показать информацию о скаченном deb пакете.




Если при установки пакет запросит зависимости, то dpkg не сможет установить пакет и мы получим ошибку. Для того чтобы исправить эту ошибку мы можем выполнить уже знакомую по предыдущему уроку команду apt -f install.




Установка пакетов




Удалим apache2 установленный на прошлом уроке, удалим все его зависимости, скачаем пакет и установим его с помощью dpkg, а затем исправим ошибки с зависимостями:




alex@deb:~$ sudo apt purge apache2
alex@deb:~$ sudo apt autoremove
alex@deb:~$ apt download apache2

alex@deb:~$ 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

alex@deb:~$ 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:




alex@deb:~$ sudo dpkg -r apache2




Список установленных пакетов




А с помощью опции -l можно посмотреть список установленных пакетов:




alex@deb:~$ 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:




alex@deb:~$ 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:




alex@deb:~$ sudo apt install apache2
alex@deb:~$ sudo apt purge apache2

alex@deb:~$ dpkg -s apache2
dpkg-query: пакет «apache2» не установлен, информация о нём недоступна
Use dpkg --info (= dpkg-deb --info) to examine archive files.




Можно посмотреть информацию о скаченном пакете с помощью dpkg -I:




alex@deb:~$ 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:




alex@deb:~$ sudo apt install apache2

alex@deb:~$ 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 — список файлов, которые установились из пакета.










2022-06-14T12:02:12
Администрирование Linux