Список всех пакетов из репозитория в Ubuntu / Debian

Вопрос или проблема

Существует ли команда для просмотра доступных пакетов из определенного PPA репозитория?

Просто:

 grep -h -P -o "^Package: \K.*" /var/lib/apt/lists/ppa.launchpad.net_*_Packages | sort -u

Или более гибко:

grep-dctrl -sPackage . /var/lib/apt/lists/ppa.launchpad.net_*_Packages 

Для более сложных запросов используйте apt-cache policy и aptitude как описано здесь:

aptitude search '~O LP-PPA-gstreamer-developers'

grep Package /var/lib/apt/lists/(имя репозитория)_Packages

Не знаю, это то, что вы ищете:

https://superuser.com/questions/132346/find-packages-installed-from-a-certain-repository-with-aptitude

Как говорится, менеджер пакетов Synaptic позволяет искать по “источнику”. Это не программный способ, но это должно дать вам то, что вы ищете.

Просто для интереса или если вы не доверяете кэшам, вы можете запросить объявленные пакеты источника из, собственно, самого источника. Репозитории по сути являются веб-сайтами, либо HTTP, либо FTP.

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

Например, я использую отличного медиаплеера jRiver MediaCenter на Pop!_OS. Чтобы запросить их стабильный репозиторий, который я настроил, сначала узнайте URL:

$ cat /etc/apt/sources.list.d/mediacenter26.list 
#MC
deb [arch=i386,amd64,armhf] http://dist.jriver.com/stable/mediacenter/ jessie main

Затем получите местоположение списка для интересующей вас архитектуры. Обратите внимание, что URL формируется по шаблону <archive_url>/dists/<distro>/Release:

$ curl -s http://dist.jriver.com/stable/mediacenter/dists/jessie/Release |
> grep "amd64/Packages$" |
> cut -d" " -f 4 |
> sort -u
main/binary-amd64/Packages

Наконец, добавьте путь списка архитектуры к дистрибутиву и извлеките имена пакетов из списков подписей:

$ curl -s http://dist.jriver.com/stable/mediacenter/dists/jessie/main/binary-amd64/Packages |
> grep "^Package: " |
> cut -d" " -f2 |
> sort -u
mediacenter21
mediacenter22
mediacenter23
mediacenter24
mediacenter25

Конечно, отрегулируйте или удалите фильтры grep|cut|sort по своему вкусу. Удалите параметр -s (тихий) из curl, если вам нужно увидеть диагностику.

… или используйте менеджер пакетов Synaptic.

Старая тема, но, возможно, это поможет. Используйте awk, sort и uniq, чтобы получить только пакеты и отбросить контрольные суммы пакетов.

grep ^Package /var/lib/apt/lists/<репозиторий, который вас интересует>* | awk '{print $2}' | sort | uniq

Для моего случая я хотел получить список пакетов из нескольких репозиториев, соответствующих одной и той же версии дистрибутива, а именно Jessie. На этом хосте настроено несколько репозиториев jessie, репозиторий Linux от Dell и архивы Debian для некоторых зависимостей.

Я получил вот это, хм, однострочник:

for p in $(dpkg -l | awk '/ii/{ print $2 }'); do for i in $(apt-cache policy "$p" | awk '/Installed/{ print $2}'); do apt-cache policy "$p" | grep -A1 '\*\*\*\ '$i'' | if grep -q jessie; then echo $p; fi; done; done

Довольно плохо, так как мы должны запускать apt-cache дважды: один раз, чтобы получить установленную версию пакета, и второй раз, чтобы сопоставить эту установленную версию с целевым репозиторием, который удобно может быть сопоставлен просто с “jessie” в данном случае.

Если вы уберете ‘grep -q’, вы также получите вывод строки соответствующего репозитория для подтверждения, или наоборот. Вы можете адаптировать этот синтаксис сопоставления к регулярным выражениям, чтобы сопоставить несколько репозиториев.

Для отображения всех источников пакетов вы можете использовать следующую команду:

apt-cache policy | grep -oE "o=[^,]*"

Текст после o= известен как “pkg-origin”, а не URL, который следует за origin в выводе apt-cache policy (это “url-origin”). Используя apt-cache policy, вы можете сопоставлять “pkg-origins” с “url-origins”.

Чтобы перечислить все пакеты из конкретного “pkg-origin”, используйте:

aptitude search "?origin (<pkg-origin>)"

Чтобы перечислить все установленные пакеты из конкретного “pkg-origin”, используйте:

aptitude search "?origin (<pkg-origin>) ?installed"

Ответ или решение

Для того чтобы получить список всех пакетов из определенного репозитория (например, PPA) в системах на базе Ubuntu или Debian, существует несколько различных подходов. Рассмотрим эти методы подробно и по порядку.

1. Использование grep для извлечения пакетов

Наиболее простым способом увидеть доступные пакеты из PPA является использование команды grep для фильтрации информации из локальных списков пакетов. Ниже представлена команда, которая позволяет это сделать:

grep -h -P -o "^Package: \K.*" /var/lib/apt/lists/ppa.launchpad.net_*_Packages | sort -u

Данная команда:

  • grep -h — отключает вывод имен файлов (обрабатывает несколько файлов);
  • -P — включает поддержку Perl-совместимого регулярного выражения;
  • -o — выводит только совпадающие части;
  • sort -u — сортирует результат и удаляет дубли.

2. Более гибкий подход с использованием grep-dctrl

Если нужно извлечь более детальную информацию, можно использовать утилиту grep-dctrl, которая предоставляется в пакетах devscripts. Команда:

grep-dctrl -sPackage . /var/lib/apt/lists/ppa.launchpad.net_*_Packages

Эта команда выводит список всех пакетов из PPA, дополнительно позволяя указать другие поля для фильтрации.

3. Поиск пакетов через aptitude

Для более удобного поиска можно использовать менеджер пакетов aptitude. Пример команды для поиска пакетов, релевантных определенному PPA:

aptitude search '~O LP-PPA-gstreamer-developers'

В этом случае ~O используется для фильтрации пакетов по их происхождению.

4. Доступ к репозиторию через HTTP

Если вы хотите проверить пакеты без использования кешей системы, можно отправить HTTP-запросы напрямую к репозиторию. Например, для получения списка пакетов из конкретного репозитория:

curl -s http://dist.jriver.com/stable/mediacenter/dists/jessie/main/binary-amd64/Packages | grep "^Package: " | cut -d" " -f2 | sort -u

Эта команда сначала загружает список пакетов, а затем фильтрует и формирует итоговый список пакетов.

5. Отображение всех Origins пакетов

Также можно вывести все Origins пакетов, что может быть полезно для создания более сложных запросов:

apt-cache policy | grep -oE "o=[^,]*"

Для поиска пакетов по конкретному Origin можно использовать:

aptitude search "?origin (<pkg-origin>)"

6. Поиск установленного ПО

Если ваша цель — найти установленные пакеты из определенного репозитория, команда будет выглядеть так:

aptitude search "?origin (<pkg-origin>) ?installed"

Заключение

Существует множество способов получения информации о пакетах из репозиториев в системах Debian и Ubuntu. В зависимости от ваших потребностей и предпочтений, вы можете выбрать подходящий инструмент, будь то grep, grep-dctrl, aptitude или прямые HTTP-запросы к репозиториям. Такие команды позволяют эффективно управлять пакетами и могут быть легко интегрированы в скрипты для автоматизации процессов.

Если вы хотите более углубленное обучение по данной теме, рекомендуется ознакомиться с официальной документацией Debian и Ubuntu, а также их сообществами, которые часто предлагают полезные советы и актуальные тренды в области управления пакетами.

Оцените материал
Добавить комментарий

Капча загружается...