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

Как я могу определить, является ли пакет метапакетом из командной строки, возможно через Кв. - добираются, способность или способный кэш?

Я попробовал:

apt-cache show texlive-full
apt-cache showpkg texlive-full

но единственным способом, которым я могу сказать этот пакет, является meta, путем чтения поля "en-описания".

Существует ли более автоматический способ сделать это, которое даст мне да/нет ответ или по крайней мере иметь поле такой как затем "en-описание", выделенное этому?

14
задан 27 September 2012 в 00:20

2 ответа

Вы можете попробовать ввести

apt-cache search 'metapackage | meta-package'

, который даст вам длинный список, а затем использовать grep, скажем, показать все связанные с наукой метапакеты с помощью

apt-cache search 'metapackage | meta-package' | grep -i science

. вернуть длинный список (здесь сократил здесь)

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

Вы можете использовать любое количество альтернатив для науки, таких как KDE, чтобы найти все KDE метапакеты.

Это, вероятно, лучшее из того, что вы можете сделать с apt-cache, но оно должно быстро найти большинство метапакетов, которые вы хотите найти. Если он не находит именно то, что вы искали, проще всего заглянуть в раздел метапакетов в Synaptic.

0
ответ дан 27 September 2012 в 00:20

Формального определения метапакета не существует. Неформальное определение заключается в том, что метапакет предназначен для установки только для его зависимостей и не содержит собственного полезного файла.

Вы можете определить метапакет как пакет, который не содержит файла. Нет способа определить это из базы данных пакета. Вы можете использовать файловую базу данных и проверить, что пакет содержит только каталоги (многие такие пакеты содержат несколько каталогов). Фактически, большинство метапакетов содержат несколько файлов в /usr/share/doc/<package name>: файл copyright, журнал изменений, иногда еще несколько. Вот приближение, которое определяет метапакет как содержащий только файлы в /usr/share/doc/<some directory> (не в подкаталогах этого) и в ведущих каталогах:

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)? 

Другой подход заключается в поиске тега пакета с debtags . Есть несколько тегов, которые обычно используются в метапакетах.

debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'

Другой подход заключается в поиске пакетов небольшого размера. Каждый каталог считается 4 кБ, поэтому планируйте соответственно при выборе порогового значения (опять же, это приблизительное значение).

aptitude -F '%I %p' search "~n^$package\$"

Подумав, подумайте, имеете ли вы в виду виртуальные пакеты , а не метапакеты. Виртуальные пакеты на самом деле не пакеты, а имена пакетов, используемые в полях Provides:. Вы можете перечислить их с помощью aptitude search '~v'. Запуск apt-cache show на одном выводит на экран сообщение «Не удается выбрать версии из пакета« zcav », поскольку он является чисто виртуальным». Запуск aptitude show перечисляет пакеты, которые его предоставляют. Удобный способ показать виртуальные пакеты с помощью apt-cache: это печатает одну строку для не виртуального пакета и потенциально несколько строк (по одной для каждого провайдера) для виртуального пакета - вы можете сказать, является ли пакет виртуальным, даже если есть один поставщик, потому что имя поставщика другое.

apt-cache -n search "^$package\$"
; then echo "$package looks like a metapackage" fi

Другой подход заключается в поиске тега пакета с debtags . Есть несколько тегов, которые обычно используются в метапакетах.

debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'

Другой подход заключается в поиске пакетов небольшого размера. Каждый каталог считается 4 кБ, поэтому планируйте соответственно при выборе порогового значения (опять же, это приблизительное значение).

aptitude -F '%I %p' search "~n^$package\$"

Подумав, подумайте, имеете ли вы в виду виртуальные пакеты , а не метапакеты. Виртуальные пакеты на самом деле не пакеты, а имена пакетов, используемые в полях Provides:. Вы можете перечислить их с помощью aptitude search '~v'. Запуск apt-cache show на одном выводит на экран сообщение «Не удается выбрать версии из пакета« zcav », поскольку он является чисто виртуальным». Запуск aptitude show перечисляет пакеты, которые его предоставляют. Удобный способ показать виртуальные пакеты с помощью apt-cache: это печатает одну строку для не виртуального пакета и потенциально несколько строк (по одной для каждого провайдера) для виртуального пакета - вы можете сказать, является ли пакет виртуальным, даже если есть один поставщик, потому что имя поставщика другое.

apt-cache -n search "^$package\$"
0
ответ дан 27 September 2012 в 00:20

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

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