it-swarm-ru.tech

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

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

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

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

166
gotgenes

Я запускаю 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
201
Tshepang

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

28
gotgenes

Это работает для меня (показывает, где находится пакет 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
Sunny

Интересно, почему никто не упомянул 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
    
  • не имеет супер коровы

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

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

8
TranslucentCloud

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

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

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

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

6
kanaka

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

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

2
Tim