четверг, 24 апреля 2014 г.

Полноценный модуль php5-gd для Debian

По умолчанию PHP функции imageantialias() и imagerotate() отключены в модуле gd.so дляDebian и его производных. Сделано это ради обеспечения стабильности и безопасности. Задумка может и благая, но раз мы ищем решение этой проблемы, значит оно того стоит. Например Drupal не захочет работать с урезанным модулем.


По сути достаточно пересобрать PHP и установить новый полноценный пакет php5-gd. Сделать это совсем не сложно, хотя описание будет достаточно подробное. Собирать будем из исходников, что само по себе интересно =)

Далее все действия производятся в рутовом терминале или в обычном через команду sudo.
Для начала проверим, что включен нужный нам репозитарий в файле /etc/apt/sources.list. Нужно найти эту строчку и убедится, что она не закомментирована:
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib
Устанавливаем необходимый для любой сборки пакет и к нему в придачу остальные:
aptitude install build-essential
Переходим в папку сборки исходников и получаем нужные нам пакеты:
cd /usr/src
apt-get source php5-gd
По сути нам нужно собрать установочные пакеты с PHP5, но возьмём мы оттуда только модуль gd.so для замены.
Далее устанавливаем пакеты нужные для сборки php5-gd, их немало, но отступать уже поздно:
aptitude instal build-dep php5-gd
Теперь нужно изменить опцию сборки PHP5, которая нас так не устраивает. Переходим в папку с исходниками php5 (в зависимости от версии директория может называться иначе), открываем на редактирование файл с опциями сборки:
cd php5-5.2.6.dfsg.1
nano ./debian/rules
Находим (Ctrl + W) строку:
—with-gd=shared,/usr —enable-gd-native-ttf \
И заменяем её на нижеописанную, убрав «,/usr»:
—with-gd=shared —enable-gd-native-ttf \
Далее запускаем сборку пакета и идём пить чай с плюшками:
dpkg-buildpackage
Процесс завершается успешно и нам нужно переустановить расширение или заменить старыйgd.so на новый (старый на всякий случай бекапим). Переустановить пакет можно так:
dpkg -i php5-gd_5.2.6.dfsg.1-1+lenny9_i686.deb
Имя пакета может отличаться в заисимости от версии системы и самих исходников.




Во втором варианте, чтобы быстро найти нужный нам файл, можно воспользоваться нехитрым но крайне полезным способом:
updatedb
locate gd.so
В моём случае активный (старый) модуль gd.so лежал в папке /usr/lib/php5/20060613/. А новый свежесобранный в папке /usr/src/php5-5.2.6.dfsg.1/debian/php5-gd/usr/lib/php5/20060613/. Заменяем старый файл на новый.

Ну и наконец-то перезагружаем сервер:
/etc/init.d/apache2 restart
Проверяем phpinfo() и удостоверяемся, что модуль GD примерно такой – bundled (2.0.34 compatible)
Файлы из каталога /usr/src/php5-5.2.6.dfsg.1/ можно удалить, а можно и оставить, на всякий случай.

Комментариев нет:

Отправить комментарий