poniedziałek, 9 stycznia 2017

Niedziałające programy po aktualizacji harfbuzz

W sobotę na serwerach Archa zawitała aktualizacja harfbuzz i harfbuzz-icu do wersji 1.4.1. Objawy - są ciekawe, albowiem aktualizacja przechodzi bez żadnych problemów, działające programy nadal działają, aż do... ponownego uruchomienia. Wówczas największe oczy mogą mieć osoby korzystające z Plasma 5, albowiem przywita ich czarny ekran z wyświetlonym napisem: Couldn't start kdeinit5. Please check your installation.
Informacja, jak informacja - skoro startować nie może kdeinit5, to wydawałoby się, że coś jest z instalacją (bądź konfiguracją) Plasmy. Nic bardziej złudnego. Całą sprawę powoduje zakutalizowany harfbuzz, a w zasadzie to nie tyle on, co... dość powszechnie stosowane czcionki Infinality. To one, a w zasadzie freetype2-infinality jest niedostosowany do nowej wersji harfbuzz, co skutkuje brakiem możliwości wejścia do środowiska.
Jak się okazuje, problem dotyczy także innych aplikacji, jak VirtualBox, czy Lumina. Co ciekawe, nie dotyka LXQt, które uruchamia się prawidłowo, tym bardziej sugerując jakiś błąd Plasmy.

Wyjścia są dwa, z czego jednego nie polecam, ale o tym za chwilę. Przede wszystkim musimy się dostać w dowolny sposób do trybu konsolowego. Skoro już nas ekran taki jw. przywitał, to wciskamy: Ctrl+Alt+F2...8, logujemy się do swojego konta i:

1. Rozwiązanie pierwsze, niepolecane przeze mnie, to deaktualizacja harfbuzz. Możemy to zrobić na kilka sposobów najprościej skorzystać z narzędzia downgrade lub jeśli posiadamy w /var/cache/pacman/pkg wcześniejsze wersje harfbuzz instalacja wprost z dysku używając do tego wyłącznie pacmana.
W pierwszym przypadku należy wpisać:
downgrade harfbuzz harfbuzz-icu
a następnie wybrać z dostępnej listy ostatnią, wcześniejszą wersję (będzie ona oznaczona nr 2 w obu przpadkach).
W drugim przypadku należy wywołać:
pacman -U /var/cache/pacman/pkg/harfbuzz_pełna_nazwa_paczki
czyli najprościej wcisnąć, po słowie harfbuzz. To samo należy powtórzyć z harfbuzz-icu.
Wykorzystanie downgrade umożliwia jeszcze dość łatwe dodanie obu paczek do IgnorePkg, w drugim przypadku musimy to zrobić ręcznie, edytując plik /etc/pacman.conf.

Nie polecam jednakże tego rozwiązania, albowiem od harfbuzz zależne mogą być inne programy, które pojawią się w repozytorium, które będą skompilowane na podstawie nowej już wersji harfbuzz i problem z niedziałającymi programami się powtórzy, ale w odwrotną stronę.

2. Drugie rozwiązanie, to odinstalowanie paczek infinality oraz zainstalowanie ich systemowych odpowiedników. To rozwiązanie jest bezpieczne, aczkolwiek jego konsekwencją będą nieco gorzej renderowane czcionki ekranowe.
W pierwszej kolejności musimy znaleźć paczki "infinality". Najprościej zrobimy to pytając bazę pacmana:
pacman -Qs infinality
W odpowiedzi dostaniemy spis paczek zainstalowanych czy to z repozytorium Infinality (które kiedyś opisywałem) lub zbudowane z AUR.
Musimy dokonać odinstalowania tych paczek i zainstalowania ich systemowych odpowiedników. Czyli jeśli w odpowiedzi otrzymamy, że zainstalowane paczki to np. freetype2-infinality-ultimate i fontconfig-infinality-ultimate, to wykonujemy polecenie:
pacman -S freetype2 fontconfig
W jego wyniku dwukrotnie zostaniemy powiadomieni o tym, że próbujemy zainstalować w systemie paczki, które kolidują z paczkami infinality. Dwukrotnie zatem odpowiadamy twierdząco, a resztę wykona pacman.

Niestety próba instalacji infinality z AUR również się nie powiedzie, albowiem dla wersji, która jest tam budowana harfbuzz w systemie będzie zbyt nowy, a kompilacja po prostu nie powiedzie się.