В находящейся в Debian системе, включая Ubuntu, как можно сказать, какой репозиторий пакет будет загружен с, на самом деле не начиная загрузку? aptitude show
и apt-cache info
покажет раздел (например, метапакет, основа, графика), но не репозиторий, которому пакет принадлежит (например, http://ppa.launchpad.net/mactel-support/ppa/ubuntu или http://us.archive.ubuntu.com/ubuntu/).
При установке пакета фактический репозиторий появляется во время загрузки (это распечатывается в "загрузке с..." вывода из способных и подобных программ), но как можно получить информацию о репозитории, содержащем пакет (или определенная версия пакета), не загружая и устанавливая его сначала?
Кроме того, как можно определить исходный репозиторий для пакета, который уже установлен?
Я работаю 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
Ага! По-видимому, надлежащее 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
не может отобразить исходный репозиторий, но кажется в настоящее время, что функция находится все еще в списке пожеланий.
Это работает на меня (шоу, где 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
Можно применить дополнительную фильтрацию для проверки версий, и т.д., если несколько версий доступны.
К сожалению, эта информация не зарегистрирована во время установки пакета. Можно высказать достойное предположение, если репозиторий находится все еще в исходном списке, и репозиторий все еще имеет пакет:
grep -l PKG /var/lib/apt/lists/*
apt-cache showpkg
показывает данные из хранилища данных (не, что установлено), таким образом, это - другая форма той же информации от grep.
Даже синаптический не может сказать (на экране Origin), если Вы отключаете репозиторий и обновление.
Или, вдохновленные Солнечным можно попробовать:
# 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
PS не точных 100%.