pacman 5.0

01 luty 2016

Po kolejnym cyklu rozwojowym pacmana (dla odmiany trzynastomiesięcznym, zamiast osiemnasto), Allan McRae odciął pępowinę kolejnemu wydaniu. Z racji znaczących nowości wyprzedził numerację kernela i otrzymał wersję 5.0.

Wyzwalacze

Jednym z głównych mankamentów spowalniających instalację pakietów były zdublowane skrypty uruchamiane po instalacji i aktualizacji pakietów. W efekcie, gdy użytkownik instalował 30 pakietów dostarczających aktywatory .desktop i 19 zawierających ikony, pacman uruchamiał odpowiednio 30 i 19 razy odpowiednie skrypty (po instalacji każdego pakietu z osobna) do zaktualizowania bazy aktywatorów lub cache ikon. Do tej pory niewiele się dało z tym zrobić, bo pacman zwyczajnie nie dostarczał żadnego mechanizmu, który ułatwiałby "opóźnienie" skryptów na koniec instalacji wszystkich pakietów.

W tym celu Andrew Gregory zaimplementował tzw. wyzwalacze (czyli triggery dla władających językiem szekspira). Oczywiście możliwości są nieograniczone – w końcu możliwe stało się poprawne używanie programów typu etckeeper (który zachowuje zmiany w /etc dokonane przez pakiety i administratorów) czy localepurge (które usuwa nieużywane języki z systemu). Nic nie stoi na przeszkodzie, żeby wykonywać snapshot systemu plików przed aktualizacją (za pomocą snappera lub gołego btrfs).

Przykładowy trigger odpowiedzialny za odświeżenie bazy aktywatorów wygląda nastepująco:

[Trigger]
Type = File
Operation = Install
Operation = Upgrade
Operation = Remove
Target = usr/share/applications/*.desktop

[Action]
When = PostTransaction
Exec = /usr/bin/update-desktop-database --quiet

Opisując jego zachowanie, po zainstalowaniu, zaktualizowaniu lub usunięciu plików usr/share/applications/*.desktop śledzonych przez pacmana, zostanie wykonane /usr/bin/update-desktop-database --quiet. Więcej przykładów można znaleźć w repozytorium pachooks.

Dociekliwi użytkownicy Archa zaraz krzykną, że nie zauważyli żadnej różnicy w czasie instalacji pakietów po zaktualizowaniu do pacmana 5.0. Mają rację – pacman to projekt mocno związany z Archem, ale nie znaczy to jeszcze, że na hurra zaczniemy z czegoś korzystać. Dodanie triggerów wymaga bardziej zorganizowanej akcji, w przeciwnym przypadku zaczęłyby się dublować stare pliki .install z wyzwalaczami. Wszystko albo nic.

Obsługa baz plików

Kolejną nowością jest możliwość operowania na bazach z listami plików. Chociaż repo-add pozwalało je generować (co zresztą robimy z oficjalnymi repozytoriami), to do faktyczniego korzystania z nich potrzebne było osobne narzędzie pkgfile (o którym nigdy tutaj nie pisałem, bo nie).

Wszelkie akcje na tychże bazach wykonuje się poprzez parametr -F. Na początek trzeba jednak je pobrać, tak jak bazy pakietów, za pomocą -Fy. Reszta wygląda analogicznie do -Q i -S:

~ ❯❯❯ pacman -Fs libavcodec.so
extra/ffmpeg 1:2.8.5-2
    usr/lib/libavcodec.so
community/ffmpeg-compat 1:0.10.16-4
    usr/lib/ffmpeg-compat/libavcodec.so

~ ❯❯❯ pacman -Fl ps_mem
ps_mem usr/
ps_mem usr/bin/
ps_mem usr/bin/ps_mem
ps_mem usr/share/
ps_mem usr/share/doc/
ps_mem usr/share/doc/ps_mem/
ps_mem usr/share/doc/ps_mem/README.md
ps_mem usr/share/man/
ps_mem usr/share/man/man1/
ps_mem usr/share/man/man1/ps_mem.1.gz

❯❯❯ pacman -Fsx 'libz.*.so$' | head
core/zlib 1.2.8-4
    usr/lib/libz.so
extra/gedit-plugins 3.18.0-1
    usr/lib/gedit/plugins/libzeitgeist.so
extra/jre7-openjdk-headless 7.u95_2.6.4-1
    usr/lib/jvm/java-7-openjdk/jre/lib/amd64/libzip.so
extra/jre8-openjdk-headless 8.u72-1
    usr/lib/jvm/java-8-openjdk/jre/lib/amd64/libzip.so
extra/libpurple 2.10.12-1
    usr/lib/purple-2/libzephyr.so

~ ❯❯❯ pacman -Fo /usr/lib/apr.exp
usr/lib/apr.exp is owned by extra/apr 1.5.2-1

Nie oznacza to jeszcze, że pkgfile nadaje się do śmieci – na dziś jest programem znacznie wydajniejszym i z większą liczbą opcji.

~ ❯❯❯ time pkgfile -l vim-runtime 1>/dev/null
pkgfile -l vim-runtime > /dev/null  0.01s user 0.01s system 131% cpu 0.018 total
~ ❯❯❯ time pacman -Fl vim-runtime 1>/dev/null
pacman -Fl vim-runtime > /dev/null  0.55s user 0.04s system 99% cpu 0.595 total

Inne drobne ulepszenia

W liście zmian wypatrzyłem jeszcze kilka ciekawych, ale drobnych ulepszeń. Przykładowo, checkupdates pokazuje teraz obecne i nowe wersje pakietów dostępnych do aktualizacji. Uzupełniono braki w (yo dawg) uzupełnianiu składni dla zsh. Opiekunów pakietów w AUR na pewno zainteresuje, że makepkg potrafi generować pliki SRCINFO dzięki --printsrcinfo, zastępując tym samym mksrcinfo.

Tyle z zauważalnych nowości w pacmanie. Kolejne wydanie – które pewnie ukaże się dopiero za rok – powinno umożliwić użytkownikom pobieranie pakietów źródłowych bez ABS, ale o tym za kilkanaście miesięcy.