Przypadki dwa Apacza – część 1
Przypadek 1 – multilib i aktualizacja:
Jakiś czas temu (dokładniej 2015-03-28) chłopaki z teamu Gentoo wpadli na genialny pomysł:
Dostarczmy userom trochę rozrywki i pomieszajmy trochę w profilu multilib.
Jak pomyśleli tak też zrobili i nagle aktualizacja systemu w którym była jakakolwiek 32bitowa aplikacja/biblioteka (app-emulation/emul-linux-x86*
) zaczęła się sypać. Każda nuda* kończyła się, zanim się na dobre zaczęła, cudową serią komuniaktów o problemach z ABI_X86 i konieczności dodania flagi abi_x86_32
. Dodanie do make.conf flagi oczywiście skutkowało całą serią innych pętli, nierozwiązywalnych blokad i innych.
Rozwiązania na szczęście długo nie trzeba było szukać eselect news list
oraz eselect news read all
szybko naprowadziły na rozwiązanie. Oczywiście nie mogło to zadziałać bezboleśnie ale i to się dało ogarnąć. Poniżej przepis na w miarę bezbolesną aktualizacje.
- W jednym z newsów zatytułowanym “CPU_FLAGS_X86 introduction” możemy poczytać o mieszaniu z flagami procesora. Do tej pory wszystko odbywało się na zasadzie:
USE="flagi_cpu"
, npUSE="mmx sse sse2 sse3"
. No ale przecież nie może być tak pięknie i prosto cały czas ;) Chłopaki wymyślili sobie, że flagi dla CPU trzeba przenieść do nowej zmiennej. I tak, w make.conf, powstała zmienna CPU_FLAGS_X86 wspólna dla wszsytkich ABI (64, 32 i x32). Zagłębiając się w newsa możemy przeczytać, że flagi dla CPU_FLAGS_X86 są takie same jak te w/proc/cpuinfo
– poza nielicznymi wyjątkami. Wniosek – szukaj w google albo ustaw na pałe może będzie się zgazdać. Ale tutaj autor newsa przychodzi nam z pomocą udostępniając pakietapp-portage/cpuinfo2cpuflags
. Po jego zainstalowaniu i odpaleniu pojawi nam się gotowy wpis, który należy dodać do make.conf. Ot przyjemne narzędzie do jednorazowego użytku oszczędzające szukania po necie która flaga cpuinfo odpowiada której z gentoo. - Kolejny news “True multilib support on amd64” uczy nas jak włączyć multiliba. Można to zrobić per pakiet lub globalnie. Budowanie pojedynczych pakietów z 32bit ABI w pewnym momencie może być trochę upierdliwe ponieważ lista pakietów za bardzo się rozrośnie (dla samego LXQT, którego używam lista paczek wymagająca 32bit ABI to około 20-30sztuk). Poza tym skoro już się decydujemy na multilib to niech to będzie zrobione po ludzku a nie na pół gwizdka. W związku z tym w make.conf do
USE="..."
dodajemyabi_x86_32
. To oczywiście nie koniec – jak już wspomniałem nie może być za prosto ;) – w tym momencie nuda* się wysypie. Musimy najpierw odinstalować wszytkie libyemul-linux-x86*
. Wydajemy więc polecenieemerge -C 'app-emulation/emul-linux-x86*'
Przyda się jeszcze usunięcie paczek libreoffice (u mnie powodowały konflikt i emerge się sypał)
emerge -C 'app-office/libreoffice*'
- Mamy już flagi dla CPU, emerge już wie, że chcemy mieć system multilib więc czas na nude*
emerge -NuDae world
W zależności od ilości paczek i mocy naszego sprzętu nudzimy się długo lub średnio długo ;) U mnie w zasyfionym systemie gdzie jest sporo śmieci do testów, zabaw i pracy było ponad 1200 paczek. Nuda trwała ~6.5-7.5h – akurat wystarczyło dniówki żeby kompa zaktualizować. Do nudy, zwłaszcza jak nie będziemy siedzieć przy kompie non stop, warto dorzucić przełącznik
--keep-going
– jeśli coś się sypnie to emerge nadal będzie kontynuował a listę paczek, które nie chciały się zaktualizować dostaniemy w podsumowaniu – będzie można je potem ręcznie przemielić. Przełącznik-e
teoretycznie nie wymagany ale wskazany. - Jak już się skończymy nudzić to czyścimy śmieci
emerge --depclean
przeinstalowujemy “złamane biblioteki”**
revdep-rebuild
. - Na wszelki wypadek przygotowujemy sobie pendrive z SysRescCD i robimy reboot. Żadnych problemów być nie powinno z podniesieniem systemu, ale jak to powiadają PZU – Przezorny Zawsze Ubezpieczony (tudzież Pierd$^@ Zawsze Uśmiechnięty).
W następnym odcinku opiszemy przygody z nową instalacją Gentoo, kernelem 4.0 i fglrx
* nuda – czyli emerge -NuDa world
** czasami (jak depclean za dużo usunie) trzeba przed revdep-rebuild odpalić emerge --update --newuse --deep --with-bdeps=y @world