Wrażenia z Gentoo

Posted by Michał ‘mina86’ Nazarewicz on 12th of February 2008

Ostatnio, przy okazji zmiany systemu plików z Reiser4 na ext3 postanowiłem zainstalować Gentoo. Głównym motywem był jednak nie system plików, a fakt posiadania 64 bitowego procesora, który nie jest wspierany przez Slackware - dystrybucję, którą używam. Tak, wiem o istnieniu Slamd64, ale od tej dystrybucji wolę trzymać się z daleka… (Update: Na chwilę obecną, gdy dodaję ten wpis do Joggera, mogę powiedzieć, że Slamd64 12.0 nie jest wcale takie złe i działa całkiem stabilnie i przyjemnie.)

Poniższego artykułu nie należy traktować jako opisu rzetelnych badań, ale jako moją prywatną opinię na temat Gentoo oraz różnych aspektów z nim związanych.

Chciałbym również zaznaczyć, że początkowo nie byłem do Gentoo nastawiony negatywnie. Owszem, żałowałem trochę, że odchodzę od Slackware’a, ale mimo wszystko cieszyłem się z myśli, że w końcu wykorzystam pełen potencjał swojej 64 bitowej maszyny.

Kompilacja

Gentoo jest najbardziej znane z tego, że mało jest tam tzw. paczek i wszystko należy kompilować ręcznie. Pojawia się pytanie po co? W FAQ-u OpenBSD wyczytać można co następuje:

Dlaczego potrzebuję systemu zbudowanego ze źródeł?

Właściwie, jest bardzo prawdopodobne że nie potrzebujesz.

Kilka powodów dlaczego NIE budować ze źródeł: […]

  • Nie uzyskasz lepszej wydajności systemu poprzez zbudowanie go ze źródeł.
  • Zmiany opcji kompilatora mogą bardziej zepsuć twój system niż go udoskonalić.

Można się zastanawiać czy stwierdzenia powyższe dotyczą jedynie OpenBSD czy też przenoszą się do świata GNU/Linuksa. Z pobieżnych testów dozziego wynika, że istotnie — flagi kompilatora nieznacznie wpływają na szybkość działania aplikacji toteż aplikacja skompilowana dla procesora i486 z optymalizacją dla i686 będzie działać praktycznie tak samo szybko jak ta sama aplikacja skompilowana dla procesora i686.

Pozostaje jednak konfiguracja samego programu przed skompilowaniem (np. przy użyciu ./configure). Sytuacja tutaj wygląda w zasadzie podobnie. Poza tym, w Gentoo zmiana tych opcji odbywa się poprzez zmienną USE tak, że emerge samo automatycznie wszystko ustawia i kompiluje potrzebne pakiety. Oznacza to, że prędzej czy później jakaś paczka, która została skompilowana z minimalną liczbą opcji, np. bez obsługi PostgreSQL-a, nagle zostanie przekompilowana z jego obsługą, bo chcieliśmy, żeby jakaś inna aplikacja tą bazę danych obsługiwała więc dodaliśmy odpowiedni wpis do USE.

Oczywiście można edytować ebuildy, ale w takim razie po co ten cały emerge i portage, skoro i tak będzie trzeba ręcznie konfigurować programy? W tym momencie czym to się różni od ściągnięcia źródeł paczki Slackware’a i edycji SlackBuilda? Moim zdaniem niczym.

Mogę jeszcze dodać, że w moim przypadku Gentoo, w którym wszystko było kompilowane z odpowiednimi flagami i jako aplikacje 64 bitowe działał zauważalnie wolniej niż Slackware, w którym część paczek była dla i486, a część i686.

Automatyka i zależności

Nie mam nic przeciwko automatyce. Napisałem nawet sporo małych skryptów, które pomagają mi wykonywać różne małe czynności jak i większe takie jak installkernel (wchodzący w skład TinyApps) pozwalający na całkowite zautomatyzowanie procesu kompilacji i instalacji kernela. Jednakże, automaty mają robić to co chce od nich użytkownik, a nie to co one myślą, że chce użytkownik. Dlatego właśnie nie lubię zależności. Systemy z zależnościami myślą, że wiedzą lepiej co mają zainstalować, gdy tymczasem użytkownik mógł w międzyczasie zainstalować coś ręcznie. Jak tak zrobiłem np. z kernelem i jego źródłami. Ostatecznie coś tam wyczarowałem co teoretycznie miało spowodować, że emerge miał myśleć, że paczka ze źródłami kernela jest zainstalowana, ale jakoś niezbyt chciało to działać.

Rzecz jasna można robić ebuilda, ale skoro wszystko robi się automatycznie to dlaczego mam tam grzebać? ;) O wiele bardziej odpowiada mi sytuacja, gdy nie ma zależności. W Slacku działa to całkiem dobrze - jeżeli zainstaluje się jakąś paczkę i brakować jej będzie zależności to przy uruchomieniu aplikacji widać komunikat błędu z informacją, że brakuje jakiejś biblioteki. Wystarczy doinstalować paczkę, w której się ona znajduje i po sprawie.

Wiele osób zarzuca systemom bez zależności, że skompilowanie czegoś lub dodanie jakiejś paczki jest mordęgą, bo trzeba ręcznie polować na setki zależności. Zupełnie nie wiem o co takim ludziom chodzi! Często kompiluje sobie różne programy (które zazwyczaj szybko wywalam) i rzadko mi się zdarza, żebym musiał doinstalowywać jakieś biblioteki - zazwyczaj wszystko jest. A aplikacje, które wymagały więcej niż jednej biblioteki, można zliczyć na palcach jednej ręki.

Należy również pamiętać, że system zależności z błędami jest znacznie gorszy (pod każdym względem) od systemu bez zależności. Co jeżeli ktoś źle wpisze jakie pakiety są wymagane przez paczkowaną przez siebie aplikację? W końcu jeżeli w repozytorium jest kilka tysięcy programów i bibliotek to wcale nie trudno o pomyłkę. Konsekwencje takiego błędu mogą być często opłakane a już na pewno irytujące.

Miarka się przebrała

W zasadzie na początku Gentoo całkiem mi się podobał. Wielu krzyczało, że instalacja tego to koszmar, ale jakoś tego tak nie odczułem. Szkoda tylko, że portage (czy tam emerge) zaczął w pewnym momencie ściągać wszystko z Internetu, gdy tymczasem przede mną leżała płytka z wypalonymi pakietami binarnymi i czymś tam jeszcze - niby nic, ale dla kogoś o niezbyt szybkim łączu to spora strata czasu.

Byłem w stanie wybaczyć temu systemowi, że bezsensownie (moim zdaniem) ściąga źródła wszystkiego z Internetu i traci czas na kompilacje, ale miarka się przebrała, gdy postanowiłem wszystko uaktualnić. Niby wszystko jest najnowsze, ale jako, że gość sam mi wszystko instalował to ostatecznie nie do końca wiedziałem co mam na dysku, a przecież wydanie komendy do aktualizacji wszystkich pakietów na pewno nie zaszkodzi.

Tak właśnie myślałem. I grubo się myliłem.

Po jakimś czasie emerge przerwał pracę z jakimś błędem. Nie byłem w stanie uruchomić żadnego programu - w większości próby odpalenia czegokolwiek kończyły się wdzięcznym command not found. W takim razie zrestartowałem komputer i wówczas odkryłem co się stało - emerge wywalił całe coreutils (czy jak ta paczka się nazywa na Gentoo) lub jakąś podobną, krytyczna do działania systemu paczkę co skutecznie uniemożliwiło mi dalsze z niego korzystanie. Od tego momentu Gentoo jest niemile widziany na moim dysku.

Epilog

Niektórzy twierdzą, że Gentoo jest dla osób, które chcą wszystko dopieścić w swoim systemie, ale sorry… Moim zdaniem nie opłaca się kompilować jakiejś aplikacji przez dzień czy dwa, żeby uruchamiała się o milisekundę krócej. Największy problem polega na tym, że kompilacja ma sens tam gdzie stawianie Gentoo trwałoby miesiące, czyli na wolnych komputerach, bo właśnie tam różnice prędkości są najbardziej zauważalne.

Nie twierdze, że ręczna kompilacja to coś złego. Sam kompiluje niektóre aplikacje pomimo, że są one dostępne spaczkowane dla Slackware’a. Zauważam jedynie, że gdzieś trzeba postawić granicę i Gentoo moim zdaniem tą granicę przekroczył. Wiele osób mówi o mnie, że jestem maniakiem, bo potrafię siedzieć godzinami i konfigurować jakiś program (FVWM-a konfigurowałem kilka dni), ale okazuje się, że blado wypadam na tle użytkowników Gentoo (bez obrazy dla kogokolwiek), którzy potrafią godzinami kompilować przeróżne aplikacje.