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", np USE="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 pakiet app-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="..." dodajemy abi_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 liby emul-linux-x86*. Wydajemy więc polecenie

    emerge -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

WykopShare