Kompilacja GIMP-a na systemie Linux
Tutorial
Opracowanie: Ziomioslaw
Poziom trudności: Średnio
Kompilacja GIMP-a to operacja bardziej skomplikowana niż pobranie go z dostarczonych przez dystrybucję repozytoriów. Na większości dystrybucji (i innych systemów) dostępne są zwykle skompilowane już paczki, dostosowane do danego systemu. Być może trzeba dodać repozytorium paczek, żeby dostępny do pobrania stał się najnowszy, stabilny GIMP - kompilacja nie jest więc niezbędna.
Jeśli jednak koniecznie chcesz kompilować, zakładam, że masz swoje powody. I, że posiadasz pewną wiedzę na temat systemu Linux ogólnie jak i swojej dystrybucji. Nie będę więc opisywał np. jak rozpakowuje się archiwa, lub na czym polega dokładnie proces kompilacji.
Poniższy przykład opisany jest dla dystrybucji opierającej się na Debianie. Można więc go śmiało używać także na systemach z "rodziny": Ubuntu, Mint, elementaryOS, itp...
Podana metoda kompiluje najnowsze źródła (pobrane za pomocą programu git). Należy zauważyć, że otrzymamy w ten sposób wersję deweloperską, będącą w rozwoju. Być może nawet jest ona nieużywalna (albo chociaż jej fragmenty). Kompilujesz na własną odpowiedzialność i na własny użytek.
Można jednak poniższy algorytm, stosować do kompilacji GIMP-a w dowolnej wersji. Różnice to wymagane biblioteki i ich wersje. Nic nie stoi na przeszkodzie, aby pobrać sobie źródła do wersji np. 2.8 i je kompilować w ten właśnie sposób.
1. Zacznijmy od utworzenia sobie katalogu, w którym będziemy kompilować:
(Źródła i pliki wynikowe mogą zająć w sumie nawet 1 GB miejsca)
Za katalog wynikowy przyjmiemy /opt/gimp-2.9/.
2. Pobieramy źródła GIMP-a.
Poniższe polecenie pobiera nam najnowsze źródła (wspomnianą wersję deweloperską). Jeśli chcesz użyć innych źródeł, wypakuj je po prostu do katalogu ~/tmp/gimp/
cd ~/tmp
git clone git://git.gnome.org/gimp
3. Ustawianie zmiennych systemowych.
To ważny krok, ponieważ zapewne nie będziemy posiadać wszystkich bibliotek i kilka trzeba będzie również skompilować. Poniższe zmienne sprawią, że katalog wynikowy (u nas: /opt/gimp-2.9/lib/) stanie się miejscem, które będzie pod tym kątem sprawdzane.
Użytą przez nas ścieżkę (/opt/gimp-2.9) można śmiało zmienić - choć trzeba być konsekwentnym i zmieniać ją wszędzie poniżej.
export PATH=/opt/gimp-2.9/bin:$PATH
export PKG_CONFIG_PATH=/opt/gimp-2.9/lib/pkgconfig
export LD_LIBRARY_PATH=/opt/gimp-2.9/lib
Mała uwaga: polecenie export działa jedynie na czas sesji terminala. Jeśli wyłączymy okienko konsoli, ustawiane przez nas zmienne znikną (trzeba będzie polecenia export powtórzyć). Lecz jest to w sumie pożądane działanie: tych zmiennych potrzebujemy jedynie na czas kompilacji.
4. Prawdopodobnie kompilujesz dla siebie (na tę właśnie maszynę). Dlatego warto ustawić zmienną systemową, która sprawi, że binaria będą optymalizowane pod Twój komputer:
export CFLAGS="-march=native -O3"
Parametr "march" dopasowuje kompilator pod architekturę naszego procesora. Parametr "O3" (to jest wielka litera o) natomiast zleca najlepszą optymalizację pod prędkość wykonywania. Poniższe linki zawierają więcej danych dla ciekawych:
https://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/i386-and-x86_002d64-Options.html https://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Optimize-Options.html 5. Pobierzmy wszystkie potrzebne nam do kompilacji i działania GIMP-a biblioteki, jakie system może nam zapewnić.
W dystrybucjach "debianowych" można to zrobić poleceniem:
sudo apt-get build-dep gimp
Niektórzy polecają od razu zainstalować też pakiet "libtool".
sudo apt-get install libtool
6. Mamy już źródła (patrz punkt 2). Mamy przynajmniej część niezbędnych bibliotek (punkt 5). Czas uruchomić narzędzie, które sprawdzi nam, czy kompilacja zadziała. Jeśli użyto wcześniej gita, wpisz:
cd ~/tmp/gimp/
./autogen.sh --prefix=/opt/gimp-2.9
Jeśli pliki źródłowe rozpakowano z archiwum:
cd ~/tmp/gimp/
./configure --prefix=/opt/gimp-2.9
Proces ten pewnie nie wyjdzie za pierwszym razem. Nie należy się tym zrażać. Zapewne to z powodu braku jakiejś biblioteki. Po dodaniu każdej z brakujących bibliotek należy powtórzyć punkt 6.
7. Pobieranie bibliotek w oparciu o repozytorium naszej dystrybucji.
Jeśli wstępne testy konfiguracji wykazały brak biblioteki X, to można spróbować poszukać, czy nie ma jej w oficjalnym repozytorium. Możliwe, że należy szukać pakietu "libX" (prefix "lib" przed nazwą biblioteki). Interesuje nas wersja developerska (bo kompilacja), więc nazwa pakietu może (lecz nie musi) wyglądać następująco: libX-dev (sufix "-dev" wskazuje, że paczka przydatna jest do kompilacji). W nazwie zwykle zawarty jest także numer wersji. Polecenie zainstalowania biblioteki może więc wyglądać tak:
sudo apt-get install libX-1.0-dev
Większość dystrybucji pozwala dopełniać nazwy pakietów z poziomu konsoli. Mają one również swoje własne menadżery pakietów z opcją wyszukiwania. A i same repozytoria mają swoje strony. Szukać można więc i z przeglądarki.
8. Biblioteka BABL.
Zapewne za pierwszym uruchomieniem skryptu z punktu 6 pojawia się poniższy komunikat:
configure: error: Package requirements (babl >= 0.1.12) were not met:
Requested 'babl >= 0.1.12' but version of babl is 0.0.22
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables BABL_CFLAGS
and BABL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
Configure failed or did not finish!
Brakuje, jak można się domyśleć, biblioteki
BABL. Pobierzemy i skompilujemy jej źródła.
Aby ją pobrać za pomocą programu git, wprowadzamy:
cd ~/tmp/
git clone git://git.gnome.org/babl
Następnie poniższe:
cd babl
./autogen.sh --prefix=/opt/gimp-2.9
make -j5
sudo make install -j5
Jeśli nie pobraliśmy źródeł przez git, należy użyć poleceń:
cd babl
./configure --prefix=/opt/gimp-2.9
make -j5
sudo make install -j5
Parametr "-j5" to polecenie zaprogramowania użycia aż pięciu procesów na raz w czasie pracy (już w upragnionym GIMP-ie). Liczbę procesów jakie należy sobie zaprogramować (tutaj pięć) wyliczamy przez: dodanie jedynki do liczby posiadanych rdzeni procesora (w naszym przypadku były to cztery rdzenie).
9. Bibliotek GEGL
Drugą ważną dla GIMP-a biblioteką, której również prawdopodobnie nie ma w systemie, jest:
GEGL. Jej brak skrypt konfiguracyjny GIMP-a objawia poniższym komunikatem:
configure: error: Package requirements (gegl-0.3 >= 0.3.0) were not met:
No package 'gegl-0.3' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables GEGL_CFLAGS
and GEGL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
Configure failed or did not finish!
Aby go pobrać ze źródeł używamy:
cd ~/tmp/
git clone git://git.gnome.org/gegl
Następnie:
cd gegl
./autogen.sh --prefix=/opt/gimp-2.9
Lub ./configure, jeśli nie używaliśmy gita (prefix ten sam).
Jeśli się uda, standardowo:
make -j5
sudo make install -j5
Znaczenie parametru -j5 zostało wyjaśnione w punkcie 8.
10. Pobieranie źródeł i kompilacja źródeł do dowolnej biblioteki.
Patrząc na powyższe punkty łatwo sprawdzić, że w zasadzie każdą brakującą nam bibliotekę można sobie skompilować za pomocą kodu:
cd ~/tmp/
git clone git://(...)
./autogen.sh --prefix=/opt/gimp-2.9
Lub, jeśli nie pobraliśmy źródeł za pomocą programu git.
./configure --prefix=/opt/gimp-2.9
Adresy repozytoriów gita można znaleźć na stronach bibliotek (zamieściłem te, których źródła musiałem pobrać). Kolejnym krokiem jest wykonanie poleceń:
make -j5
sudo make install
Znaczenie parametru -j5 zostało wyjaśnione w punkcie 8.
Możliwe, że nie wszystkie biblioteki jakie kompilujesz obsługują ten parametr.
11. Powtarzając punkt 6 aż do skutku otrzymamy w końcu małe podsumowanie, które powinno wyglądać jak niżej:
Building GIMP with prefix=/opt/gimp-2.9, datarootdir=${prefix}/share
Desktop files install into ${datarootdir}
Extra Binaries:
gimp-console: yes
Optional Features:
Language selection: yes
Optional Plug-Ins:
Ascii Art: yes
Ghostscript: no (Ghostscript library not found)
Help Browser: yes
JPEG 2000: no (JasPer library not found)
MNG: yes
OpenEXR: no (OpenEXR not found)
PDF (import): yes (Cyrillic and CJK support: no or poppler-data < 0.4.7)
PDF (export): yes
Print: yes
Python 2: yes
Script-Fu: yes
SVG: yes
TIFF: yes
TWAIN (MacOS X): no
TWAIN (Win32): no
Webpage: yes
WMF: yes
X11 Mouse Cursor: yes
XPM: yes
Optional Modules:
ALSA (MIDI Input): yes
Linux Input: yes (GUdev support: no (libgudev not found))
DirectInput (Win32): no
Tests:
Use xvfb-run no (not found)
WARNING: Your gettext version is 0.18.1.
The recommended gettext version is 0.19 or over.
If you continue without updating gettext, your build will have partially broken localization.
Warto mu się przyjrzeć i zastanowić, czy nie chcemy doinstalować czegoś (np. biblioteki Ghostcript do otwierania PDF-ów). Jeśli zdecydujemy się doinstalować jakąś bibliotekę, należy powtórzyć punkt 6.
Możemy też śmiało kontynuować kompilację programu GIMP, bez doinstalowywania czegokolwiek - pokazanie się tego podsumowania już świadczy o tym, że możemy przystąpić do naszego głównego celu.
Podobne podsumowania pojawiają się również przy kompilacji innych bibliotek (w tym i BABL, i GEGL). Być może je również warto przejrzeć.
12. Kompilacja GIMP-a:
cd ~/tmp/gimp
make -j5
sudo make install -j5
Znaczenie parametru -j5 zostało wyjaśnione w punkcie 8.
13. Nasz GIMP został zainstalowany w katalogu /opt/gimp-2.9/bin/gimp-2.9
Życzę dobrej zabawy
14. Jeśli chcemy, aby program był rozpoznawalny w całym systemie, należy umieścić skrót do niego w katalogach (jednym z dostępnych), które wymienione w zmiennej PATH. Jakie katalogi wchodzą do tej ścieżki? Sprawdź choćby i to przez poniższe polecenie:
Samo dodanie GIMP-a jako rozpoznawalne polecenie polega na wprowadzeniu komendy:
sudo ln -s /opt/gimp-2.9/bin/gimp-2.9 <wybrana ścieżka z powyższego zbioru PATH>/gimp
Strony bibliotek:
Źródła:
Problemy na jakie można natrafić:
Problem z wersją libtool (2.4 vs 2.4.2)
libtool: Version mismatch error. This is libtool 2.4, but the
libtool: definition of this LT_INIT comes from libtool 2.4.2.
libtool: You should recreate aclocal.m4 with macros from libtool 2.4
libtool: and run autoconf again.
Według
strony Należy użyć poniższego polecenia, następnie jeszcze raz configure lub autogen