apt, pkg и dpkg изучаем пакетные менеджеры

apt, pkg и dpkg изучаем пакетные менеджеры

Termux, please

В каждой Unix-подобной системе есть система управления пакетами, это такое программное обеспечение которое взаимодействует с какими-либо программами, позволяя управлять процессами установки, удаления, настройки и обновления. В качестве таких систем, в различных операционных системах выступают пакетные менеджеры.

Содержание

  • Система управления пакетами: Вступление

Простой менеджер пакетов pkg

- отличие от apt

- основные операции с пакетами: установка, обновление, удаление

- как просмотреть установленные пакеты, а также те, которые доступны для установки

- как искать пакеты по запросам, смотреть о них информацию

- как узнать местоположение данных пакетов

Умный и продвинутый пакетный менеджер apt

- отличие от dpkg

- основные операции с пакетами

- дополнительные операции с пакетами

- немного о репозиториях

- настройка репозиториев

Основная система управления пакетами dpkg

- что такое dpkg

- основные команды для взаимодействия с пакетами

- как скачать пакет не устанавливая его

- как узнать есть ли определённый пакет в системе

- как узнать какой пакет принадлежит указанной команде


В Termux предустановленно три пакетных менеджера, позволяющие работать с программным обеспечением которое представляется в виде особых пакетов. Сам по себе пакет - это архив специального формата, который содержит все необходимые приложению бинарные и конфигурационные файлы, информацию о том, как их следует разместить в файловой системе, данные о зависимостях пакета, а также список действий которые необходимо выполнить в процессе установки. Пакетные менеджеры взаимодействуют со множеством пакетов, хранящихся в специальном репозитории — хранилище, которое обычно располагается на удалённой машине (HTTP, FTP или rsync-сервере).

Мы пойдём от самого простого до более сложного, начнём с пакетного менеджера pkg, затем рассмотрим apt, после, dpkg.


Простой менеджер пакетов pkg

pkg - простой пакетный менеджер состоящий из скромного набора опций, и по сути является обёрткой над менеджером apt. Отличий грубо говоря два, первое заключается в разительно меньшем набором опций, второе - при использовании некоторых опций происходит автоматическое обновление репозиториев.

pkg install <packages> - установить пакет(ы)
pkg upgrade - обновить установленные пакеты
pkg reinstall <packages> - переустановить пакет(ы)
pkg uninstall <packages> - удалить пакет(ы)

Устанавливать, переустанавливать и удалять можно сразу несколько пакетов одновременно, например

pkg install htop neofetch sl

С остальными операциями аналогично.

Иногда, время от времени у вас могут возникать ошибки, такие как

E: Unable to locate package

Прямо как у меня сейчас с aircrack-ng.

Есть четыре возможных сценария:

1. Вы знаете что такой пакет действительно доступен в Termux. В таком случае необходимо установить нужные репозитории, предоставляющие этот пакет. (Подробнее об этом читайте в следующем разделе об apt)

2. Вы неверно указали имя пакета (сверьте в точности каждый символ)

3. Такого пакета нету под вашу архитектуру (нужно попробовать скомпилировать вручную, однако об этом поговорим в другой раз, так или иначе почти все пакеты уже представлены для некоторых основных архитектур)

4. Такого пакета нету в репозиториях Termux


Следующими командами мы можем посмотреть какие пакеты могут быть установлены, а какие уже установлены

pkg list-all - отобразить все пакеты из репозиториев
pkg list-installed - отобразить установленные пакеты

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

Так как в официальных репозиториях Termux насчитывается более 1200+ пакетов, ориентироваться во всей этой куче без знания следующих команд просто невозможно

pkg search <pattern> - поиск пакетов по запросу
pkg show <packages> - выводит информацию о пакетах

На следующем простом примере будет понятно по какому принципу работает первая команда из списка выше

Как видим запрос был на слово network, pkg сперва обновил репозитории, затем выдал свежую информацию по моему запросу. Здесь жёлтым, я выделил то самое ключево слово, по котому pkg спарсил пакеты, в описании которых присутствовало network.

После того как вы приметили для себя некоторые пакеты, можно посмотреть о них подробную информацию, рассмотрим на простеньком примере пакета nmap.

pkg show nmap

Здесь всегда отображается текущая версия (Version), установленный размер (Installed-Size), размер скачанного пакета (Download-Size) зависимости (Depends) - пакеты без которых программа не может работать, ветка репозитория откуда пакет был скачан (APT-Sources), а также дополнительная информация, такая как домашняя страница (Homepage) и описание (Description).

В некоторых других могут присутствовать понятия Essential (является ли пакет неотъемлемой частью системы), Recommends (рекомендуемые пакеты), Suggests (предлагаемые пакеты), Conflicts (пакеты, с коими могут возникнуть конфликты в плане установки), а также Replaces (пакеты, которые заменяются при установке определённого пакета).

Последняя опция pkg позволяет увидеть все "следы" которые были оставлены пакетом

pkg files <packages>

Умный и продвинутый пакетный менеджер apt

В то время как пакетный менеджер pkg основан на apt, apt основан на dpkg. Отличий apt с dpkg куда больше:

  1. apt имеет в разы больше опций сравнимо с pkg, но немного меньше чем у dpkg
  2. apt создавался как более умная и продвинутая оболочка для dpkg
  3. dpkg в отличии от apt и pkg не имеет понятия о том, какие пакеты есть в репозиториях

APT имеет два интерфейса командной строки: apt-get и более новый apt. Их синтаксис и возможности во многом схожи, и мы будем всегда использовать последний.

Так как apt не обновляет репозитории автоматически, всякий раз, когда вам нужно обновить пакеты, установить новые, или воспользоваться поиском пакетов необходимо делать это вручную

apt update

По окончанию этого процесса иногда может указываться что некое количество пакетов доступно для обновления, естественно их можно обновить схожей командой, командой

apt upgrade

Основные команды и варианты их опций

apt install <packages> - установить пакет(ы)
apt install --reinstall <packages> - переустановить пакет(ы)
apt install --install-recommends <packages> - установить вместе с указанным пакетом рекомендованые
apt install --install-suggests <packages> - установить вместе с указанным пакетов предлагаемые
apt remove <packages> - удалить пакет(ы)
apt upgrade - обновить установленные пакеты
apt list - отобразить все пакеты из репозиториев
apt list --installed - отобразить все установленные пакеты
apt list --upgradeable - отобразить пакеты которые можно обновить
apt search <pattern> - найти пакеты по запросу
apt search --names-only <pattern> - найти пакеты только только по названию
apt show <packages> - вывести информацию о пакетах

apt имеет и другие опции, например

apt purge <packages>

Является некой альтернативой apt remove, также удаляет пакеты, однако в случае с обычным удалением пакета, функция purge удаляет также оставленные изменённые пользователем конфигурационные файлы. Сама же опция remove не удаляет их, так как есть вероятность что вы удалите пакет с пользовательской кастомизацией случайно.

Опция apt autoremove используется для удаления пакетов, которые были автоматически установлены для удовлетворения зависимостей других пакетов и теперь больше не нужны, так как зависимости изменились, или пакеты в которых они нуждались, были удалены. Вы должны убедиться, что в список не включены пакеты, которые вам понравились, даже если они были установлены просто как зависимость от другого пакета. Вы можете пометить такой пакет как установленный вручную, используя

apt-mark manual <packages>

Или

apt-mark auto <packages>

если предыдущую команду вы выполнили по ошибке.

Пакеты, которые вы установили вручную, также никогда не предлагаются для автоматического удаления.

Другие опции apt

apt full-upgrade - обновляет систему удаляя/устанавливая/обновляя пакеты
apt edit-sources - позволяет редактировать sources.list обеспечивая проверку работоспособности
apt depends <packages> - отображает зависимости пакета
apt rdepends <packages> - отображает для каких пакетов выбранный пакет тоже является зависимостью
apt moo - отображает корову

Отдельно хотелось бы затронуть тему с репозиториями. Как говорилось в начале, репозиторий - чаще удалённое хранилище пакетов. В Termux доступно шесть репозиториев, из которых пять дополнительные:

main-repo - основной репозиторий (1110+) пакетов

Дополнительные репозитории:
root-repo - репозиторий (45+) пакетов для рутованых устройств
science-repo - представляет (20+) научных пакетов
x11-repo - репозиторий (250+) пакетов, содержащий программы и библиотеки X11
game-repo - содержит (20+) игр
unstable-repo - репозиторий (55+) пакетов, содержащий новые/нестабильные программы и библиотеки

Чтобы настроить дополнительные репозитории автоматически, достаточно установить нужные пакеты, они именуются точно как в таблице выше (root-repo, game-repo и т.д) за исключением main-repo. main-repo здесь вымышлен для лучшего понимания ситуации.

Для каждого репозитория можно настроить зеркала, это такие же репозитории, но располагающиеся на других удалённых машинах

termux-change-repo

В этом меню выбираем репозитории которые вы желаете отредактировать. Используем стрелки вверх-вниз чтобы перемещаться по пунктам меню. Пробелом отмечаем репозиторий, а Tab'ом переходим на пункты <OK> и <Cancel>, и стрелками вправо-влево выбираем нужное. Далее откроется меню с выбором зеркал

Выбирать имеет смысл когда вы близко находитесь к выбранной стране, это может поспособствовать лучшей скорости скачивания, так

Official repositories - Северная Америка

Mirrors by A1batross - в настоящее время не активен

Mirrors by Grimler - Швеция

Mirrors by Xeffyr - Северная Америка

Mirrors by Tsinghua University - Китай


Записи репозиториев располагаются по пути /etc/apt/sources.list и /etc/apt/sources.list.d/

Именно из этих файлов пакетные менеджеры, такие как apt и pkg берут пакеты, точнее по ссылкам указаных в файлах. В файле sources.list указан основной репозиторий, а в файлах папки sources.list.d - дополнительные, если таковые настроены.


Основная система управления пакетами dpkg

dpkg представляет собой основную программу в системе для работы с пакетами, он может устанавливать, удалять и создавать пакеты, но, в отличие от других систем управления пакетами, он не может автоматически загружать и устанавливать пакеты или их зависимости. Его стоит рассматривать как низкоуровневый инструмент (движок), а apt — как инструмент, более близкий к пользователю, обходящий ограничения первого. Эти инструменты работают совместно, каждый со своей спецификой, заточенный под определённый круг задач.

dpkg — это, прежде всего, инструмент для установки уже доступных пакетов (поскольку он ничего не загружает). Чтобы установить пакет, используется опция -i или --install. Для примера сперва я загружу пакет не устанавливая его

apt download hydra

Теперь давайте посмотрим какой вид имеет скачанный но не установленный пакет

ls

Расширение .deb присуще всем пакетам устанавливаемых в Debian-базирующихся системах, напомню - Termux лишь эмулятор такой системы.

Теперь установим его

dpkg -i hydra_9.0_aarch64.deb

Мы можем видеть каждый этап, выполняемый dpkg, поэтому мы знаем, в каком месте могла произойти какая-либо ошибка. Обратите также внимание, что для установки мы используем полное имя пакета, точно такое как видели на предыдущем скриншоте.

Процесс завершился с ошибкой, произошло это из-за отсутствия зависимостей, в моём случае не хватает пакета libssh.

Чтобы посмотреть зависимости скачаного пакета, используем команду

dpkg -I hydra_9.0_aarch64.deb

Исходя из предыдущего скриншота, мне остаётся установить только libssh, так как требуемые зависимости как указано на скриншоте выше уже установлены (за исключением libssh конечно же)

apt download libssh
ls

Для следующего примера я создам папку hydra, и перемещу в неё все .deb пакеты что располагаются в текущей директории

mkdir hydra

Последующая часть команды очень полезна для экономии времени. Вместо того чтобы прописывать имена пакетов разделяя их пробелом, я просто указываю оболочке ставля символ * использовать всё (файлы, папки), что заканчивается на .deb . Ну а так как только два файлы имеет такое расширение, то они перемещаются как и было задумано.

mv *.deb hydra/

Теперь чтобы всё установить не прописывая имена пакетов, я могу воспользоваться следующей командой. dpkg рекурсивно установит все пакеты в указанной папке

dpkg -R --install hydra/

Запуск dpkg с опцией -r или --remove, за которой следует имя пакета, приведет к удалению этого пакета. Это удаление, однако, не полное: все конфигурационные файлы, сценарии сопровождающего, файлы журналов (системные журналы) и другие пользовательские данные, используемые этим пакетом, останутся. Таким путём легко избавиться от программы, деинсталлировав её, но при этом сохраняется возможность установить её ещё раз с той же конфигурацией. Для полного удаления всего, связанного с пакетом, используется опция -P или --purge, сопровождающаяся именем пакета.

Пример 1

dpkg -r hydra

Пример 2

dpkg -P hydra

Иногда нужно узнать установлен ли определённый пакет в системе, для этого используем команду

dpkg -l <package>

Например

dpkg -l hydra

Чтобы выйти из этого "меню", в этом, и следующем примере нажмите клавишу Q независимо от регистра, или используйте комбинацию клавиш Ctrl + C.

Если указанного вами пакета в системе нету, вывод терминала будет таким:

dpkg-query: no packages found matching <пакет который вы указали>

Также можно просмотреть какие пакеты установленны в системе

dpkg -l

В первой колонке указывается имя пакета, во второй версия под которой он установлен в вашей системе, в третьей - его архитектура под которой он установлен в вашей системе, а в четвёртой - описание, если доступно. Перемещаться по этому меню можно с помощью стрелок вверх-вниз, если вам нужно выше или ниже соответственно, или стрелками справа-налево, если нужно переместиться направо или налево.


Возможна обратная ситуация - вам нужно знать какому пакету принадлежит команда, проверить это можно так:

dpkg -S $PREFIX/bin/ifconfig

Слева указывается имя пакета, а через двоиточие полный путь к команде.

Примечание: $PREFIX в команде выше является переменной и по сути служит символической ссылкой на каталог /data/data/com.termux/files/usr

Другие примеры возможностей пакетного менеджера dpkg:

dpkg -s <packages> - сообщает о состоянии указанного пакета
dpkg -L <packages> - показывает файлы, установленные в системе из пакета
dpkg -S <value> - ищет в установленных пакетах указанное имя файла
dpkg -c <package.deb> - показывает содержимое deb пакета
dpkg -C - находит пакеты, которые были установлены в системе только частично. dpkg посоветует, что делать, чтобы восстановить их работоспособность
dpkg --print-architecture - отображает архитектуру

Конец!

Спасибо за прочтение!

Также вы можете присылать ваши статьи в бота (оформляйте в телеграфе), я их просмотрю, если всё ОК - опубликую статью на канале с указанием автора.



Report Page