165

В системе на основе 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 и аналогичных программ), но как получить информацию о хранилище, содержащем пакет (или конкретный версия пакета) без загрузки и установки в первую очередь?

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

6 ответов6

201

Я запускаю 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
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 не может отобразить исходный репозиторий, но кажется, что в настоящее время эта функция все еще находится в списке пожеланий.

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

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

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$ ,

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% точный.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .