Jak ustalić, czy pakiet jest meta-pakietem z wiersza poleceń?

14

Jak mogę ustalić, czy pakiet jest meta-pakietem z wiersza poleceń, prawdopodobnie za pomocą apt-get, aptitude lub apt-cache?

Próbowałem:

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

ale jedynym sposobem, w jaki mogę powiedzieć, że ten pakiet jest meta, jest czytanie pola „en-description”.

Czy istnieje bardziej automatyczny sposób na zrobienie tego, który da mi odpowiedź „tak / nie”, lub przynajmniej będzie zawierał takie pole jak „en-description”?

Ciro Santilli
źródło
1
Oprócz tego, że to pytanie i odpowiedzi są dość interesujące, dlaczego chcesz to wiedzieć?
Joe
1
Instalowałem rzeczy za pomocą apt-get, i zauważyłem, że jeśli zainstaluję metapakiet (texlive-full), to zainstaluje żądane zależności, ale jeśli odinstaluję metapakiet, zależności pozostaną tam (apt-get install texlive-full, apt-get purge texlive-full; apt-get autorove). Potem odkryłem, że dzieje się tak tylko w przypadku metapakietów brainstorm.ubuntu.com/idea/17785 . Z drugiej strony aptitude usuwa niepotrzebne zależności z metapakietu.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

7

Nie ma formalnej definicji metapakietu. Nieformalna definicja jest taka, że ​​metapakiet to taki, który jest przeznaczony wyłącznie do zainstalowania ze względu na jego zależności i nie zawiera własnego przydatnego pliku.

Można zdefiniować metapakiet jako pakiet, który nie zawiera pliku. Nie ma możliwości ustalenia tego na podstawie bazy danych pakietu. Możesz użyć bazy danych plików i sprawdzić, czy pakiet zawiera tylko katalogi (wiele takich pakietów zawiera kilka katalogów). W rzeczywistości większość metapakietów zawiera kilka plików /usr/share/doc/<package name>: copyrightplik, dziennik zmian, czasem kilka innych. Oto przybliżenie, które definiuje metapakiet jako zawierający tylko pliki w /usr/share/doc/<some directory>(nie w jego podkatalogach) i wiodące katalogi:

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

Innym podejściem jest poszukiwanie znacznika pakietu z debtags. Istnieje kilka tagów, które są powszechnie używane w metapakietach.

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

Innym podejściem jest poszukiwanie pakietów o małym rozmiarze. Każdy katalog liczy się jako 4 kB, więc planuj odpowiednio przy wybieraniu progu (ponownie, jest to przybliżenie).

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

Po zastanowieniu zastanawiam się, czy masz na myśli pakiety wirtualne, a nie metapakiety. Pakiety wirtualne w rzeczywistości nie są pakietami, ale nazwami pakietów używanymi w Provides:polach. Możesz je wymienić aptitude search '~v'. Uruchomiony apt-cache showna jednym wyświetlaczy „Nie można wybrać wersje z pakietu«zcav»jak to jest czysto wirtualny”. Uruchamianie aptitude showwyświetla listę pakietów, które to zapewniają. Wygodnym sposobem wyświetlania wirtualnych pakietów jest apt-cache: drukuje jedną linię dla pakietu nie-wirtualnego i potencjalnie wiele linii (jedna dla każdego dostawcy) dla pakietu wirtualnego - możesz stwierdzić, czy pakiet jest wirtualny, nawet jeśli jest jeden dostawca ponieważ nazwa dostawcy jest inna.

apt-cache -n search "^$package\$"
Gilles „SO- przestań być zły”
źródło
dzięki za te metody: nie wiedziałem o długach! też gdzieś czytałem, że kiedy instalujesz metapakiet za pomocą apt-get, jest to dokładnie tak, jakbyś instalował każdą zależność ręcznie, co oznacza, że ​​usunięcie oryginalnego pakietu nie spowoduje natychmiastowego usunięcia jego zależności, podczas gdy w przypadku normalnych pakietów, usuń usuń zainstalowane zależności. Czy to prawda? Jeśli tak, to w jaki sposób apt-get może odróżnić? Można to również wykorzystać ... (wydaje się również, że aptitude nie dba o to, czy jego meta, czy nie, czy to prawda?)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
@cirosantilli Funkcja automatycznego usuwania zależności nie jest związana z metapakietami. Dzieje się tak, ponieważ jeśli nie zażądasz pakietu jawnie, zostanie on oznaczony jako automatycznie zainstalowany , a pakiet oznaczony jako automatycznie zainstalowany zostanie usunięty, jeśli nie zostanie zainstalowany żaden pakiet zależny od niego. Zobacz apt-get autoremove, aptitude (un)markautoThe Mkomenda w umiejętności interaktywny interfejs.
Gilles „SO- przestań być zły”
@cirosantilli Po zastanowieniu zastanawiam się, czy chodziło Ci o wirtualne pakiety, a nie o metapakiety? Zobacz moją zaktualizowaną odpowiedź.
Gilles „SO- przestań być zły”
Naprawdę nie wiedziałem o pakietach wirtualnych, ale myślę, że texlive-full nie jest wirtualny, ponieważ apt-cache show texlive-full pokazuje zwykłe wyniki. Mimo to, po zrobiłem apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremovenie usunąć wszystkie zainstalowane zależności. Czytałem gdzieś, że dzieje się tak dlatego, że pełny tekst był metapakietem i że było to normalne zachowanie metapakietu, ale może to było złe. Z drugiej strony aptitude zdawało się dobrze usuwać automatycznie instalowane zależności.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
2

Możesz spróbować wejść

apt-cache search 'metapackage | meta-package'

która da ci długą listę, a następnie użyj grep, powiedzmy, pokaż wszystkie metapakiety związane z nauką

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

To zwróci długą listę ( skróciłem ją tutaj)

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

Możesz użyć dowolnej liczby alternatyw dla nauki, takich jak KDEznalezienie wszystkich KDEmetapakietów.

Prawdopodobnie jest to najlepsze, co możesz zrobić apt-cache, ale powinno szybko zlokalizować większość metapakietów, które chcesz znaleźć. Jeśli nie znajdzie dokładnie wszystkiego, czego szukałeś, najprostszą rzeczą jest zajrzenie do sekcji metapakietu w Synaptic.


źródło