Sysadminium
На этом уроке рассмотрим пакетный менеджер 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 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 ( Architecture: amd64 Version: 2.2.4 Replaces: apt-transport-https (Первый раз я смотрю информацию о приложении 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 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 (Можно посмотреть список всех файлов которые установились вместе с пакетом с помощью 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 — список файлов, которые установились из пакета.