FastNetMon

Thursday, 25 February 2010

Пересборка PHP на Debian для поддержки imagerotate

И да, то, что PHP в Debian 5 Lenny собран с системным gd, а не со встроенным, тоже его баг. Аналогичная проблема с функциями imageconvolution(), imageantialias().

Убеждаемся,что стоит не Bundled версия GD:
php -i | grep gd -i
/etc/php5/cli/conf.d/gd.ini,
ffmpeg-php gd support => enabled
gd
GD Support => enabled
GD Version => 2.0 or higher


Предварительно рекомендую обновить систему, чтобы поставить актуальную версию PHP:
apt-get update;
apt-get -y upgrade;

cd /usr/src
apt-get install -y dpkg-dev devscripts build-essential fakeroot
apt-get source libapache2-mod-php5
apt-get build-dep -y libapache2-mod-php5
cd php5-5.2.6.dfsg.1


Теперь вносим коррективы (переключаемся с внешнего gd на внутренний):

sed -i 's/-with-gd=shared,\/usr/-with-gd=shared/' debian/rules



Собираем:

debuild -us -uc # -us unsigned source, -uc unsigned changes
# если же требуется на 64 битной архитектуре собирать 32 битный пакет, то команда будет иной:
# debuild -us -uc -ai386


Ставим обновленный gd (32 бита):
cd ..
dpkg -i php5-gd_5.2.6.dfsg.1-1+lenny9_i386.deb

Или так (64 бита):
cd ..
dpkg -i php5-gd_5.2.6.dfsg.1-1+lenny9_amd64.deb

Рестартим Апача:

/etc/init.d/apache2 restart


Убеждаемся, что встала Bundled сборка GD:
php -i | grep gd -i
/etc/php5/cli/conf.d/gd.ini,
ffmpeg-php gd support => enabled
gd
GD Support => enabled
GD Version => bundled (2.0.34 compatible)


Тестим работу:
php -r "imagerotate();"


и еще вторую функцию:
php -r "imageconvolution();"


Блокируем обновление php5-gd, чтобы более новая версия не заменила нашу:
echo "php5-gd hold" | dpkg --set-selections


Кому требуется "легкий путь", вот уже собранная под 32 и 64 битный Debian версия:
apt-get update; apt-get upgrade
cd /usr/src


32 бита:
wget http://fastvps.googlecode.com/files/php5-gd_5.2.6.dfsg.1-1%2Blenny8_i386.deb
dpkg -i php5-gd_5.2.6.dfsg.1-1+lenny8_i386.deb


64 бита:
wget http://fastvps.googlecode.com/files/php5-gd_5.2.6.dfsg.1-1%2Blenny8_amd64.deb
dpkg -i php5-gd_5.2.6.dfsg.1-1+lenny8_amd64.deb



echo "php5-gd hold" | dpkg --set-selections
/etc/init.d/apache2 restart


основано на: http://digitalconsumption.com/forum/622-PHP-imagerotate-on-Debian и http://cumu.li/2008/5/13/recompiling-php5-with-bundled-support-for-gd-on-ubuntu

9 comments :

  1. Здравствуйте!
    после команды
    apt-get build-dep libapache2-mod-php5
    получаю
    "Заметьте, вместо libc-client-dev выбирается libc-client2007b-dev
    E: Зависимости для сборки php5 не могут быть удовлетворены."

    Как это можно исправить?

    ReplyDelete
  2. Странно, такое может быть лишь, если какой-то косяк с репозиториями. Покажите выдачу команды: cat /etc/debian_version (в отвел должна быть 5.0.* версия), а также cat /etc/apt/sources.list

    ReplyDelete
  3. Косяк с Debian наверно. (
    cat /etc/debian_version
    squeeze/sid

    cat /etc/apt/sources.list
    deb ftp://mirror.hetzner.de/debian/packages lenny main contrib non-free
    deb ftp://mirror.hetzner.de/debian/security lenny/updates main contrib non-free

    deb http://ftp.de.debian.org/debian lenny main non-free contrib
    deb-src http://ftp.de.debian.org/debian lenny main non-free contrib

    deb http://security.debian.org/ lenny/updates main contrib non-free
    deb-src http://security.debian.org/ lenny/updates main contrib non-free

    ReplyDelete
  4. В общем, полгода назад вручную обновлялись MySQL и nginx, подключались другие репозитории. Похоже оттуда такая солянка.
    Можно это как-нибудь восстановить.

    ReplyDelete
  5. Покажите: dpkg -l | grep php -i

    ReplyDelete
  6. dpkg -l | grep php -i
    ii libapache2-mod-php5 5.2.6.dfsg.1-1+lenny9 server-side, HTML-embedded scripting language (Apache 2 module
    ii php5 5.2.6.dfsg.1-1+lenny9 server-side, HTML-embedded scripting language (metapackage)
    ii php5-cgi 5.2.6.dfsg.1-1+lenny9 server-side, HTML-embedded scripting language (CGI binary)
    ii php5-cli 5.2.6.dfsg.1-1+lenny9 command-line interpreter for the php5 scripting language
    ii php5-common 5.2.6.dfsg.1-1+lenny9 Common files for packages built from the php5 source
    ii php5-curl 5.2.6.dfsg.1-1+lenny9 CURL module for php5
    ii php5-gd 5.2.6.dfsg.1-1+lenny9 GD module for php5
    ii php5-mcrypt 5.2.6.dfsg.1-1+lenny9 MCrypt module for php5
    ii php5-mysql 5.2.6.dfsg.1-1+lenny9 MySQL module for php5
    ii phpmyadmin 4:2.11.8.1-5+lenny4 MySQL web administration tool

    Вот еще, вдруг пригодится:
    lsb_release -a
    No LSB modules are available.
    Distributor ID: Debian
    Description: Debian GNU/Linux 5.0.5 (lenny)
    Release: 5.0.5
    Codename: lenny

    ReplyDelete
  7. Угу, вижу почему. Система обновлена до sid/squeeze, а репозитории подцеплены от lenny, разумеется, там нету исходников пакетов от squeeze. Так что вариант собрать один - менять поочередно в /etc/apt/sources.list lenny на squeeze, обновляться и смотреть, как все будет работать дальше. Но обновляться в такой ситуации я бы рекомендовал с максимальной осторожностью, все может упасть.

    ReplyDelete
  8. Не хватало еще уронить рабочий сервер ) перебьюсь.

    Спасибо за помощь!

    ReplyDelete
  9. Ага, но вообще лучше так не делать было изначально, но если уж сделали, то лучше не трогать. Я как-то подобный апгерйд часов 5 фиксил ))

    ReplyDelete

Note: only a member of this blog may post a comment.