Komut satırından bir paketin meta paket olup olmadığını nasıl belirleyebilirim?


14

Bir paketin komut satırından, muhtemelen apt-get, aptitude veya apt-cache üzerinden meta paket olup olmadığını nasıl belirleyebilirim?

Denedim:

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

ancak bu paketi meta olarak anlatabileceğim tek yol "en-description" alanını okumaktır.

Bunu yapmanın, bana evet / hayır yanıtı verecek ya da en azından buna "en-description" gibi bir alanı olacak daha otomatik bir yol var mı?


1
Bu sorunun ve cevapların oldukça ilginç olmasının yanı sıra, bunu neden bilmek istiyorsunuz?
Joe

1
Apt-get ile bir şeyler yükliyordum ve bir meta paket (texlive-full) yüklersem, istediğim bağımlılıkları yüklediğini fark ettim, ancak metapackage kaldırırsam, bağımlılıklar orada kalıyor (apt-get install texlive-full, apt-get temizleme texlive-full; apt-get autoremove). Sonra bunun sadece metatap paketler için olduğunu gördüm brainstorm.ubuntu.com/idea/17785 . diğer yandan yetenek bir metafordan gereksiz bağımlılıkları ortadan kaldırır.
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

Yanıtlar:


7

Meta paketinin resmi bir tanımı yoktur. Gayri resmi tanım, bir meta paketin sadece bağımlılıkları için kurulması amaçlanan ve kendi başına yararlı bir dosya içermemesidir.

Meta paketi paket içermeyen bir paket olarak tanımlayabilirsiniz. Bunu paket veritabanından belirlemenin bir yolu yoktur. Dosya veritabanını kullanabilir ve paketin yalnızca dizin içerdiğini kontrol edebilirsiniz (bu paketlerin çoğunda birkaç dizin bulunur). Aslında, çoğu meta paket içinde birkaç dosya bulunur /usr/share/doc/<package name>: bir copyrightdosya, bir değişiklik günlüğü, bazen birkaç tane daha. Aşağıda, bir meta paketi yalnızca /usr/share/doc/<some directory>(alt dizinlerinde değil) ve önde gelen dizinlerde dosya içerdiğini tanımlayan bir yaklaşım verilmiştir :

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
  echo "$package looks like a metapackage"
fi

Başka bir yaklaşım, ile bir paket etiketi aramaktır debtags. Meta paketlerde yaygın olarak kullanılan birkaç etiket vardır.

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

Başka bir yaklaşım, küçük boyutlu paketleri aramaktır. Her dizin 4 kB olarak sayılır, bu nedenle bir eşik seçerken buna göre planlayın (tekrar, bu bir yaklaşık değerdir).

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

Yansıtma üzerine, metaforlar yerine sanal paketler mi demek istiyorsunuz acaba . Sanal paketler aslında paketler değil, Provides:alanlarda kullanılan paket adlarıdır . Bunları ile listeleyebilirsiniz aptitude search '~v'. Koşu apt-cache showtek ekranlarda “bunun tamamen sanal olarak paket 'zcav' dan sürümlerini seçilemiyor”. Running aptitude show, bunu sağlayan paketleri listeler. Sanal paketleri göstermenin kullanışlı bir yolu şudur apt-cache: sanal olmayan bir paket için bir satır ve sanal bir paket için potansiyel olarak birden çok satır (her sağlayıcı için bir tane) yazdırır - tek bir sağlayıcı olsa bile paketin sanal olup olmadığını anlayabilirsiniz çünkü sağlayıcının adı farklı.

apt-cache -n search "^$package\$"

Bu yöntemler için teşekkürler: Debtags hakkında bilmiyordum! Ayrıca, apt-get ile bir meta paket yüklediğinizde, her bağımlılığı ayrı ayrı elle kurduğunuz gibi olduğunu bir yere okudum, yani orijinal paketi kaldırmanın bağımlılıklarını hemen kaldırmayacağı, normal paketler için kurulu bağımlılıkları kaldırın. Bu doğru mu? Eğer öyleyse, apt-get farkı nasıl anlayabilir? Bu da sömürülebilir ... (ayrıca meta meta olup olmadığını umursamıyor gibi görünüyor, bu doğru mu?)
Ciro Santilli 事件 改造 中心 法轮功 六四 事件 27:12

@cirosantilli Bağımlılıkları otomatik olarak kaldırma özelliği, meta paketlerle ilgisizdir. Açıkça bir paket talep yoksa, olarak işaretlendiğini Bunun nedeni otomatik olarak yüklenir ve bir paket otomatik olarak işaretlenmiş buna bağlı hiçbir paket yüklüyse kaldırılır yüklü. Bkz apt-get autoremove, aptitude (un)markauto, Myetenek interaktif arayüz komut.
Gilles 'SO- kötü olmayı bırak'

@cirosantilli Yansıtma üzerine, aklınızdaki şeylerin meta paketler değil sanal paketler olup olmadığını merak ediyorum. Güncellenmiş cevabımı görün.
Gilles 'SO- kötü olmayı bırak'

Sanal paketleri gerçekten bilmiyordum ama bence texlive-full sanal değil çünkü apt-cache show texlive-full normal sonuçları gösteriyor. Benden sonra bile olsa, apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremovetüm yüklü bağımlılıkları kaldırmadık. Bir yerde bunun texlive dolu bir metafor olduğu ve bunun bir metaforun normal davranışı olduğunu okudum, ama belki de bu yanlıştı. diğer yandan yetenek otomatik olarak yüklenen bağımlılıkları gayet iyi gibi görünüyordu.
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

2

Girmeyi deneyebilirsin

apt-cache search 'metapackage | meta-package'

size uzun bir liste verecek ve daha sonra grep,

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

Bu uzun bir liste döndürecektir ( burada kısalttım )

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

KDETüm KDEmeta paketleri bulmak gibi bilim için herhangi bir sayıda alternatif kullanabilirsiniz .

Bu muhtemelen yapabileceğiniz en iyi apt-cacheşeyle ilgilidir, ancak bulmak istediğiniz meta paketlerin çoğunu hızlıca bulmalıdır. Eğer aradığınız her şeyi tam olarak bulamıyorsa, en basit şey içindeki metafor bölümüne bakmaktır Synaptic.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.