`dpkg-query` и виртуальные пакеты: как читать или интерпретировать` $ {Provides} `?

Предпосылки

Во время периодического аудита установленных пакетов я обнаружил ошибку. Для этого аудита приложение генерирует график установленных пакетов, используя dpkg-query. Во время этого процесса он проверяет, все ли зависимости действительно удовлетворены, так как в противном случае это может означать, что что-то не так в системе или что-то не так с приложением, генерирующим график. Это случилось сегодня, когда приложение остановилось из-за ошибки, сообщив, что обнаружил пакет с неудовлетворенной зависимостью от python:any. Тем не менее, в зависимости от пакета в порядке. Я проверил python:any - это виртуальный пакет, предоставляемый пакетом python. Synaptic говорит, что python предоставляет python:any, но мое приложение не получает эту информацию от dpkg-query.

Вот тест, который вы можете выполнить из командной строки, который показывает проблему (при условии Ubuntu 14.04):

$ dpkg-query --showformat='${Package}\n${Provides}\n' --show python3
> python3
> python3-profiler
# Note `python3:any` does not appear

О том же пакете, Synaptic говорит, что он предоставляет python3:any и python3-profiler , Первый отсутствует в информации, возвращенной dpkg-query.

При отображении в качестве зависимости все нормально:

$ dpkg-query --showformat='${Package}\n${Depends}\n' --show apturl-common
# Note the second item in the format is now `Depends`
> apturl-common
> python3:any (>= 3.3.2-2~), python3-apt, python3-update-manager

Вопрос

Это ошибка в dpkg-query? Или это я ошибочно ожидаю, что он расскажет обо всех виртуальных пакетах, в то время как я могу предположить, что я могу выводить этот тип виртуальных пакетов «сам»? Это какие-то правила, которые я не знаю о том, что возвращается в ${Provides}?

1
задан 14 September 2015 в 18:56

2 ответа

python3:any (>= 3.3.2-2~) не виртуальный пакет, это - строка замены, созданная ${python3:Depends} шаблон и заполненный dh_python3 при вызове от dh_gencontrol, когда пакет был создан. Смотрите на debian/control файл apturl исходный пакет:

Package: apturl-common
Architecture: any
Depends: ${python3:Depends},
 ${shlibs:Depends},
 ${misc:Depends},
 python3-apt,
 python3-update-manager
Replaces: apturl (<< 0.3.6ubuntu2)
Description: install packages using the apt protocol - common data
 AptUrl is a simple graphical application that takes an URL (which follows the
 apt-protocol) as a command line option, parses it and carries out the
 operations that the URL describes (that is, it asks the user if he wants the
 indicated packages to be installed and if the answer is positive does so for
 him).

Теперь, почему python3:any? Давайте заключим debian политику в кавычки:

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

И это точно имеет место для python3 двоичный пакет:

Package: python3
Architecture: any
Multi-Arch: allowed
Pre-Depends: python3-minimal (= ${binary:Version})
Depends: python3.4 (>= 3.4.3-1), libpython3-stdlib (= ${binary:Version}), ${misc:Depends}, dh-python
Suggests: python3-doc (>= ${binary:Version}), python3-tk (>= 3.4.3-1) , python3-venv (>= ${binary:Version})
Replaces: python3-minimal (<< 3.1.2-2)
Provides: python3-profiler
Description: interactive high-level object-oriented language (default python3 version)
 Python, the high-level, interactive object oriented language,
 includes an extensive class library with lots of goodies for
 network programming, system administration, sounds and graphics.
 .
 This package is a dependency package, which depends on Debian's default
 Python 3 version (currently v3.4).

Источники:

2
ответ дан 15 September 2015 в 04:56

Я чувствую для предположения anwser, все еще не стесняйтесь добавлять собственный anwser.

я узнал, что существует /var/lib/dpkg/available база данных, как raw‑text. Я проверил на python3 (для продолжения того же примера как в вопросе), он говорит Provides: python3-profiler: нет никакого python3:any.

Так может быть anwser: существует не всегда прямое соответствие между, требования, возвращенные dpkg-query и пакет, обеспеченный, как возвращено dpkg-query также, и вероятно Синаптический, выводят “fake” виртуальный пакет, и python3:any не действительно виртуальный пакет (я сказал бы Синаптический, вводит в заблуждение здесь).

По всей вероятности нет ничего с de, обеспеченным пакеты, и это - я, кто ошибочно читает :xyz в конце пакета зависимости как часть имени packag, в то время как это не.

0
ответ дан 15 September 2015 в 04:56

Другие вопросы по тегам:

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