есть ли команда, чтобы увидеть, какие пакеты доступны из определенного репозитория ppa?
Просто:
grep ^Package: /var/lib/apt/lists/ppa.launchpad.net_*_Packages
Или более гибкий:
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/(repo name)_Packages
Я не знаю, что вы ищете:
https://superuser.com/questions/132346/find-packages-installed-from-a- sure-repository-with-aptitude
Как говорится, Synaptic Package Manager позволяет вам искать по "происхождению". Это не программное обеспечение, но оно должно дать вам то, что вы ищете.
Старая ветка, но подумал, что может помочь. Используйте awk, sort и uniq, чтобы получить только пакеты и сбросить контрольные суммы репозитория пакетов.
grep ^Package /var/lib/apt/lists/<repo you are interested in>* | awk '{print $2}' | sort | uniq
Просто для развлечения или если вы не доверяете кешам, вы можете запросить пакеты, объявленные источником, ну, ну, из самого источника. Репозитории - это в значительной степени веб-сайты, либо HTTP, либо FTP.
В вашей системе есть исходные URL-адреса, по которым вы можете запрашивать конкретные архитектуры и параметры двоичного кода / источника. Затем вы можете запросить списки пакетов конкретной архитектуры.
Например, я использую отличный медиаплеер jRiver. Медиа центр на 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.
Для моего варианта использования мне нужен список пакетов из нескольких репозиториев, соответствующих одному и тому же выпуску dist, в частности, Jessie. На этом хосте настроено несколько репозиториев jessie, репозиторий Dell linux и архивы 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', вы также получите вывод соответствующей строки репо для подтверждения или иным образом. Вы можете адаптировать этот синтаксис соответствия к регулярному выражению, чтобы соответствовать нескольким репозиториям.