czwartek, 9 marca 2017

Wyjaśnić niewyjaśnione, czyli meta paczki i grupy paczek

Niekiedy czytamy, że coś możemy zainstalować w Archu poprzez instalację paczki coś-meta. Ot, choćby instalację środowiska graficznego od KDE możemy przeprowadzić w następujący sposób:
Install the plasma-meta meta-package or the plasma group.
Istnienie dwu sposobów instalacji (a w zasadzie jeszcze większej ilości) jak zwykle powoduje niezrozumienie i konsternację, choć cała sprawa jest oczywiście wyjaśniona. Mimo tego, spróbuję ją wyjaśnić raz jeszcze.
Opiekun jakichś paczek w Archu może stworzyć grupę paczek. Taką grupą jest wspomniana wyżej plasma. Grupa nie jest żadną oddzielną paczką, a jedynie pewnym ułatwieniem dla użytkowników, deklarowanym w PKGBUILD w polu groups. Każda paczka składająca się na daną grupę otrzyma w tym polu deklarację do jakiej grupy paczek należy. Tym samym np. paczka plasma-desktop czy breeze otrzymają w tym polu deklarację, że należą one do grupy paczek o nazwie plasma.
Grupę taką łatwo możemy podglądnąć, wydając polecenie:
pacman -Sg nazwa_grupy
Samą interesującą nas nazwę grupy możemy zobaczyć wydając polecenie:
pacman -Si/Qi nazwa_paczki
i odszukując w niej pole Grupy. Grupy, albowiem ta sama paczka należeć może do więcej niż jednej grupy paczek.
Meta paczka jest natomiast oddzielną paczką (ot, przykład plasma-meta). Zwykle, każda paczka dostarcza nam do systemu jakieś pliki. W przeciwieństwie do tego typu paczek, paczki meta nie dostarczają żadnych plików, zawierają wyłącznie informacje dla pacmana w polu depends, z której wynika, że paczka meta zależy od jakichś - już "zwykłych" - paczek.

Prześledźmy konsekwencje używania jednego i drugiego rozwiązania.
Jeśli instalujemy jakąś meta paczkę, wówczas zainstalowane zostaną wszystkie paczki zadeklarowane w polu depends PKGBUILDu. Nie mamy żadnej władzy nad tym jakie paczki zostaną zainstalowane. Zostaną bowiem zainstalowane wszystkie wymienione w depends. W omawianym przypadku plasma-meta niezależnie zatem od tego, czy np. mamy w sytemie, czy nie mamy jakiekolwiek urządzenie korzystające z połączenia Bluetooth, zostanie nam zainstalowana paczka bluedevil zapewniająca integrację urządzeń Bluetooth z Plasmą. Od tej pory też, ze względu na "trzymające" je powiązanie zapewniające przez meta paczkę, wszystkie te aplikacje będą zachowywały się łącznie. Jeśli będziemy dokonywać aktualizacji systemu, to będzie ona dokonywała się również poprzez ową meta paczkę, zatem zmiana (w zasadzie dodanie) zadeklarowanych w niej paczek w polu depends spowoduje, że zainstalowane zostaną nowo zadeklarowane paczki. Usunięcie jakiejś paczki z tego pola spowodować może natomiast, że dotychczasowa paczka zostanie uznana za osieroconą.
Owa meta paczka uniemożliwi również odinstalowanie poszczególnych paczek instalowanych w systemie przez nią. Jeśli zatem zauważyliśmy, że mamy w systemie zbędne nam bluedevil i spróbujemy je odinstalować, to otrzymamy informację:
sudo pacman -R bluedevil
sprawdzanie zależności…
błąd:  nie udało się przygotować transakcji (nie udało się rozwiązać zależności)
:: plasma-meta: usuwanie bluedevil zależność przerw 'bluedevil'
Dopiero dodanie parametru -Rc umożliwi odinstalowanie takiej paczki, ale odinstaluje również paczkę plasma-meta.
Samo odinstalowanie meta paczki jest natomiast bez problemu możliwe i nie pociąga za sobą odinstalowania paczek, które ona dostarczyła (oczywiście przy odinstalowaniu bez podania parametru -s). Pamiętajmy jednak, że jeśli wpierw zainstalowaliśmy jakieś paczki składające się na meta paczkę, a następnie samą tę paczkę, to "kaskadowe" usunięcie owej meta paczki spowoduje wyłącznie usunięcie jej oraz tych paczek, które zostały przez nią zainstalowane. Nie spowoduje usunięcia paczek, które zainstalowaliśmy uprzednio, a które są jej zależnościami.
W moim przypadku (mam Plasmę zainstalowaną przez wybór paczek z grupy) instalacja plasma-meta dostarcza mi wyłącznie paczki: archlinux-appstream-data, bluedevil, discover, kirigami2 i plasma-meta.
Usunięcie plasma-meta wraz z zależnościami powoduje wyłącznie usunięcie tych, dostarczonych wraz z nią paczek i jej samej:
sudo pacman -Rcns plasma-meta
sprawdzanie zależności…
:: plasma-desktop opcjonalnie wymaga discover: manage applications installation from the launcher

Pakiet (5)                Obecna wersja  Zmiana     

archlinux-appstream-data  20170223-1     -15,89 MiB
bluedevil                 1:5.9.3-1       -1,83 MiB
discover                  5.9.3-2        -10,85 MiB
kirigami2                 2.0.0-1         -0,31 MiB
plasma-meta               5.9-2            0,00 MiB

Odzyskane miejsce na dysku:  28,88 MiB

:: Czy chcesz usunąć te pakiety? [T/n]
Nieco inaczej zachowuje się instalacja programów z pomocą grupy. Tutaj jeśli wydamy polecenie instalacji paczek składających się na grupę, otrzymamy informację o tym jakie paczki składają się na daną grupę, oraz że domyślnie zostanie zainstalowana cała grupa:
sudo pacman -S plasma
:: Jest 39 pakietów w grupie plasma:
:: Repozytorium extra
  1) bluedevil  2) breeze  3) breeze-gtk  4) discover  5) drkonqi  6) kactivitymanagerd  7) kde-cli-tools  8) kde-gtk-config
  9) kdecoration  10) kdeplasma-addons  11) kgamma5  12) khotkeys  13) kinfocenter  14) kmenuedit  15) kscreen
  16) kscreenlocker  17) ksshaskpass  18) ksysguard  19) kuiserver  20) kwallet-pam  21) kwayland-integration  22) kwin
  23) kwrited  24) libkscreen  25) libksysguard  26) milou  27) oxygen  28) plasma-desktop  29) plasma-integration
  30) plasma-nm  31) plasma-pa  32) plasma-sdk  33) plasma-workspace  34) plasma-workspace-wallpapers  35) polkit-kde-agent
  36) powerdevil  37) sddm-kcm  38) systemsettings  39) user-manager

Wybierz pakiety (domyślnie=wszystkie):
W tym momencie możemy albo zaakceptować domyślny wybór, albo spośród widocznych nam paczek zainstalować wyłącznie te, które nas interesują używając do tego cyfr widocznych przy nazwach poszczególnych paczek. Dokonać możemy dowolnego wyboru. Konsekwencją będzie to, że podczas aktualizacji, zostaną zaktualizowane wyłącznie te paczki, które zostały zainstalowane w powyższy sposób. Jeśli zatem do grupy paczek dołączy jakaś nowa, to owa nowa paczka nie zostanie zainstalowana w systemie (chyba, że stanowi zależność jakichś innych zainstalowanych paczek). Odinstalowanie poszczególnych paczek składających się na grupę również jest możliwe, chyba, że dana paczka jest zależnością innej jeszcze.

W Archu istnieje absolutna dowolność instalacji. To użytkownik decyduje jakie paczki i w jaki sposób mają zostać zainstalowane. Są jednakże dystrybucje pochodne od Archa, które posługują się meta paczkami. Wówczas okazuje się, że odinstalowanie czegoś nam zbędnego nie jest możliwe ze względu na istnienie w systemie owej meta paczki.

Oczywiście do niczego nie namawiam, a jedynie mam nadzieję, że w pewnym stopniu udało mi się przybliżyć te kwestie.