Вопрос или проблема
Существует ли команда для просмотра доступных пакетов из определенного 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
Не знаю, это то, что вы ищете:
Как говорится, менеджер пакетов 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, а также их сообществами, которые часто предлагают полезные советы и актуальные тренды в области управления пакетами.