Sunday, February 17, 2013

Debian Squeeze - problem z grafiką w popularnych CMS-sach (PHP - gd bundled)

Jeżeli zainstalowałeś jeden z popularnych CMS-ów takich jak Moodle 2.3/2.4, czy Drupla na serwerze z Debian Squeeze i szukasz powodu niedziałającej grafiki, to właśnie znalazłeś rozwiązania tego problemu. Mimo iż skrypt instalacyjny informuje, że wszystkie wymagane elementy środowiska są prawidłowe, to grafika prezentowana na stronie nie jest generowana. Widać jedynie obszar, w którym powinna znajdować się jakaś grafika.

Problem leży po stronie biblioteki GD używanej w PHP. Oryginalna wersja tej biblioteki napisana jest w C (libgd), do PHP została tylko przeportowana. Ponieważ jest bardzo potrzebna w skryptach CMS-ów, to dodano do niej jeszcze kilka innych "dodatkowych" funkcji, które rozszerzają funkcjonalność biblioteki GD. Dodatkowe funkcje nie należą do oficjalnego źródła biblioteki libgd, z której korzysta pakiet php5-gd w systemie Debian Squeeze. Więcej szczegółów można znaleźć w dyskusji php5-gd: not using gd bundled with php5.

Rozwiązania są dwa, pierwszy polega na samodzielnej kompilacji PHP, opis tych czynności znajdziemy na poniższych stronach:

Making Apache use compiled PHP instead of bundled package on Debian
Tutorial: How to enable PHP5′s imageantialias on Ubuntu 10.10
GD package problems with Debian/Ubuntu: Document distro workarounds

Pamiętaj jednak, że będziesz musiał dokonywać tej kompilacji przy każdej aktualizacji. Poza tym, sama kompilacja może przysporzyć wiele problemów, o konieczności instalacji wszystkich bibliotek deweloperskich dla PHP5 nie wspomnę. Dlatego lepszym rozwiązaniem jest druga metoda.

Metodę tą można by żartobliwie nazwać "Dotdeb way". Dotdeb to repozytoria dla stabilnej wersji systemu Debian, ich zadaniem jest dostarczenie aktualnych paczek dla tzw. serwerów LAMP.

W tym przypadku interesuje nas paczka php5-gd, ale musimy zainstalować całe PHP. Oto przepis:

1. Do repozytoriów dodajemy wpisy:

# vim /etc/apt/sources.list

deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all

2. Dodajemy również klucz autoryzacyjny dla dotdeb:

# wget http://www.dotdeb.org/dotdeb.gpg
# cat dotdeb.gpg | apt-key add -

3. Teraz musimy uaktualnić spis dostępnych paczek o nowe repozytoria:

# aptitude update

4. Następnie usuniemy paczkę php5-gd:

# aptitude purge php5-gd

5. Ostateczne instalujemy tą samą paczkę, ale tym razem program wybierze tą nowszą wersję z dotdeb. Należy wybrać opcję, która zainstaluje tylko nowe GD, nie zgadzając się na rozwiązanie polegające na aktualizacji innych paczek takich jak MySQL:

# aptitude install php5-gd

To już koniec, posiadamy wersję PHP5 GD bundled, cały problem sprowadza się do tego jednego słówka :)

Jeżeli grafika zacznie Ci działać tylko po zrestartowaniu serwera Apache to jesteś szczęściarzem. W moim przypadku zaczęła działać częściowo po aktualizacji CMS-u, całościowo zaczęła działać dopiero na nowo zainstalowanym CMS-sie.
Pamiętaj również, że aktualizacja niektórych paczek (np. MySQL) obecnie jest wstrzymana, warto jakoś formalnie to gdzieś zapisać w konfiguracji, bo kiedyś może narobić problemów.

No comments:

Post a Comment