Как узнать, из какого Ubuntu или Debian репозитория приходит пакет?

168

В системе на основе Debian, включая Ubuntu, как определить, из какого репозитория будет загружен пакет, без фактического начала загрузки? aptitude showи apt-cache infoпокажет раздел (например, metapackage, base, graphics), но не репозиторий, к которому принадлежит пакет (например, http://ppa.launchpad.net/mactel-support/ppa/ubuntu или http: // us .archive.ubuntu.com / ubuntu / ).

При установке пакета реальный репозиторий появляется во время загрузки (он распечатывается в выводе «загрузка из ...» из apt и аналогичных программ), но как получить информацию о репозитории, содержащем пакет (или конкретный версия пакета) без загрузки и установки в первую очередь?

Кроме того, как определить исходный репозиторий для пакета, который уже установлен?

gotgenes
источник
1
я считаю это одним из недостатков Apt; просто не легко сказать, из какого репозитория предоставляется определенный пакет в инструментах установки пакета.
шарлатан-кихот

Ответы:

203

Я бегу apt-cache policy <package name>:

$ apt-cache policy wajig
wajig:
  Installed: 2.1
  Candidate: 2.1
  Version table:
 *** 2.1 0
        100 /var/lib/dpkg/status
     2.0.47 0
        500 file:/home/wena/.repo_bin/ squeeze/main i386 Packages
        500 ftp://ftp.is.co.za/debian/ squeeze/main i386 Packages

Это означает, что есть три wajigпакета:

  • Тот, который установлен ( /var/lib/dpkg/status)

  • Тот, который доступен из локального репозитория ( file:/home/wena/.repo_bin/)

  • Тот, который доступен из удаленного репозитория ( ftp://ftp.is.co.za/debian), который также имеет ту же версию ( 2.0.47 ), что и в локальном репозитории


Кроме того, apt-cache madison <package name>будет отображаться аналогичная информация в табличном формате.

 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe amd64 Packages
 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe Sources
tshepang
источник
Но это не показывает, откуда установлен пакет, не так ли?
Adobe
2
@Adobe В моем случае 2.1версия недоступна из любого хранилища. Это локально построено.
Чепанг
2
Что является признаком установленного пакета? ***или /var/lib/dpkg/status?
Суббота,
Возможно оба? Точно сказать не могу.
Чепанг
Если пакет не установлен, apt-cache policyговорит: Installed: (none).
Джон МакГи,
28

Ага! Видимо, правильной aptкоманды нет apt-cache info, а вместо этого apt-cache showpkg.

$ apt-cache showpkg linux-generic
Package: linux-generic
Versions: 
2.6.31.19.32 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_karmic-security_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c

2.6.31.14.27 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c


Reverse Depends: 
Dependencies: 
2.6.31.19.32 - linux-image-generic (5 2.6.31.19.32) 
2.6.31.14.27 - linux-image-generic (5 2.6.31.14.27) 
Provides: 
2.6.31.19.32 - 
2.6.31.14.27 - 
Reverse Provides: 

File:Линия предоставляет информацию хранилища после /var/lib/apt/lists/.

Существует отчет об ошибке, который aptitudeне может отобразить исходный репозиторий , но кажется, что в настоящее время эта функция все еще находится в списке пожеланий.

gotgenes
источник
Эта особенность способностей все еще остается в списке 8 лет спустя, и я не знаю, почему этот ответ ( apt-cache showpkg) не помечен как правильный.
Чаба Тот
8

Это работает для меня (показывает, где находится пакет 2vcard):

$ grep 2vcard /var/lib/apt/lists/* | grep "Filename:"

/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages:Filename: pool/universe/2/2vcard/2vcard_0.5-3_all.deb

Вы можете применить дополнительную фильтрацию для проверки версий и т. Д., Если доступно несколько версий.

Солнечно
источник
Прагматический. Я удивлен, что эта информация не доступна через любой из внешних интерфейсов dpkg, хотя.
получил
@got Доступно: superuser.com/questions/106794/…
tshepang
8

Интересно, почему никто не упомянул aptitude. Я пользуюсь этим все время.

Способность это:

  • поставляется по умолчанию со многими дистрибутивами на основе Debian. Может быть установлен на другой (например, Ubuntu) черезsudo apt install aptitude
  • не требует административных привилегий (по крайней мере, для команды ниже)
  • действительно имеет хороший ncursesграфический интерфейс (но большую часть времени используется без него)
  • обеспечивает действительно красивый вывод. Чтобы показать версии пакетов, используйте aptitude versionsкоманду:

    me@wheezy:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • не имеет супер коровы

Буква перед каждой строкой указывает состояние пакета, i установлен и p очищен (или никогда не установлен), стабильный , тестируемый и нестабильный - определения репозитория, число в конце - приоритет булавки .

Здесь стоит упомянуть одну оговорку, касающуюся последних версий aptitude: по умолчанию в ней отображаются все пакеты, которые включают в себя имя, которое вы ищете, поэтому, например, используйте магию регулярных выражений для поиска по строгому имени aptitude versions ^kde-workspace$.

TranslucentCloud
источник
1
Хорошая команда, но она не отображает хранилище в соответствии с запросом.
bjhend
На самом деле это так .
TranslucentCloud
Вы не понимаете Дополнительные PPA могут быть установлены. Важно знать, является ли пакет из такого PPA. На самом деле, это то, что я пытаюсь выяснить прямо сейчас - если это так, я могу удалить PPA, уменьшая риск проблем.
reinierpost
Да, вы правы, versionsвы можете просто проверить правильные значения закрепления данных пакетов, а не связанных репозиториев. Это все еще полезно, хотя, если вы знаете все свои репозитории и как они закреплены.
TranslucentCloud
6

К сожалению, эта информация не записывается во время установки пакета. Вы можете сделать приличное предположение, если хранилище все еще находится в списке источников, а хранилище все еще содержит пакет:

grep -l PKG /var/lib/apt/lists/*

apt-cache showpkg показывает данные из базы данных репозитория (не то, что установлено), так что это еще одна форма той же информации из grep.

Даже Synaptic не может сказать (на экране «Происхождение»), если вы отключите хранилище и обновите его.

канак
источник
2

Или, вдохновленный Санни, вы можете попробовать:

# list installed restricted packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'restricted' && echo $i; done

# list installed multiverse packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'multiverse' && echo $i; done

пс. не на 100% точный.

Тим
источник