Как узнать, из какого пакета Ubuntu или Debian поставляется пакет?

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

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

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

163 голоса | спросил gotgenes 9 FebruaryEurope/MoscowbTue, 09 Feb 2010 22:14:23 +0300000000pmTue, 09 Feb 2010 22:14:23 +030010 2010, 22:14:23

6 ответов


202

Я запускаю политику 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 23 Jam1000000amSun, 23 Jan 2011 01:00:01 +030011 2011, 01:00:01
27

Ага! По-видимому, правильная команда 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 10 FebruaryEurope/MoscowbWed, 10 Feb 2010 03:57:55 +0300000000amWed, 10 Feb 2010 03:57:55 +030010 2010, 03:57:55
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

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

ответил Sunny 9 FebruaryEurope/MoscowbTue, 09 Feb 2010 22:41:35 +0300000000pmTue, 09 Feb 2010 22:41:35 +030010 2010, 22:41:35
8

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

Aptitude:

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

    [email protected]:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • не обладает полномочиями Super Cow

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

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

ответил TranslucentCloud 12 Jpm1000000pmMon, 12 Jan 2015 14:32:32 +030015 2015, 14:32:32
6

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

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

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

Даже синаптика не может сказать (на экране Origin), если вы отключите репозиторий и обновите.

ответил kanaka 21 +04002010-10-21T01:42:10+04:00312010bEurope/MoscowThu, 21 Oct 2010 01:42:10 +0400 2010, 01:42:10
2

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

# 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% точнее.

ответил Tim 22 Jpm1000000pmSat, 22 Jan 2011 18:55:06 +030011 2011, 18:55:06

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132