Як визначити, чи пакет - це метапакет із командного рядка?


14

Як я можу визначити, чи пакет - це метапакет із командного рядка, можливо, через apt-get, aptitude чи apt-кеш?

Я намагався:

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

але єдиний спосіб, коли я можу сказати, що цей пакет - це мета, - прочитавши поле "en-description".

Чи є більш автоматичний спосіб зробити це, який дасть мені відповідь "так / ні", або принаймні мати поле, таке як тоді "опис", присвячене цьому?


1
Окрім того, що це запитання та відповіді досить цікаві, чому ти хочеш це знати?
Джо

1
Я встановлював речі з apt-get, і помітив, що якщо я встановлюю метапакет (texlive-full), він встановлює потрібні мені залежності, але якщо я видаляю метапакет, залежності залишаються там (apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremove). Потім я виявив, що це стосується лише метапакетів brainstorm.ubuntu.com/idea/17785 . З іншого боку, здатність усуває непотрібні залежності від метапакету.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Відповіді:


7

Офіційного визначення метапакету немає. Неофіційне визначення полягає в тому, що метапакет - це той, який призначений тільки для встановлення залежностей і не містить власного корисного файлу.

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

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; 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\$"

спасибі за ці методи: я не знав про борги! також я десь прочитав, що коли ви встановлюєте метапакет з apt-get, це точно так, як якщо б ви встановили кожну залежність вручну окремо, це означає, що видалення оригінального пакета не одразу видалить його залежності, тоді як для звичайних пакетів видалити буде видалити встановлені залежності. Це правда? Якщо так, то як apt-get може визначити різницю? Це теж можна було б використати ... (також здається, що здатність не байдуже, чи є його мета чи ні, це правда?)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

@cirosantilli Особливість автоматичного усунення залежностей не пов'язана з метапакетами. Це відбувається тому, що якщо ви не вимагаєте явного пакету, він позначається автоматично встановленим , а пакет, позначений як автоматично встановлений, видаляється, якщо не встановлено жодного пакета, який залежить від нього. Див apt-get autoremove, aptitude (un)markauto, то Mкоманда в профпридатності інтерактивного інтерфейсу.
Жил "ТАК - перестань бути злим"

@cirosantilli Після роздумів мені цікаво, якщо ви мали на увазі віртуальні пакунки, а не метапакети? Дивіться мою оновлену відповідь.
Жил "ТАК - перестань бути злим"

Я дійсно не знав про віртуальні пакети, але думаю, що texlive-full не є віртуальним, оскільки apt-кеш-шоу texlive-full показує звичайні результати. Тим не менш , після того, як я зробив apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremoveне видалити всю встановлену залежність. Десь я читав, що це тому, що texlive-full був метапакетом, і що це нормальна поведінка метапакету, але, можливо, це було неправильно. Здатність з іншого боку, здавалося, добре усуває автоматично встановлені залежності.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.