segunda-feira, 22 de junho de 2009

Compilando o PHP4 no Debian Etch/ Lenny

Este documento é referente a instalação e configuração de um servidor que tive que configurar estes dias, o grande problema era que ele precisava ter o php4 compilado com suporte a postgresql e com uma versão atual do Debian, o que dificulta pois nas versões atuais é tudo phphpp5 e etc.

Pacotes



Obrigatoriamente precisamos da vesão 4.3.10 do PHP
http://www.filewatcher.com/m/php-4.3.10.tar.bz2.4026148.0.0.html




deb http://ftp.br.debian.org/debian/ etch main
deb-src http://ftp.br.debian.org/debian/ etch main





Bom, a regra número 1 é não instalar NADA do php pelo apt-get, pois vamos compilar o php,
e somente vamos instalar pelo apt as milhões de bibliotecas necessárias para que ele funcione.

Segue a lista dos pacotes necessários, provavelmente eu vou esquecer de algum mas nada que um apt-cache search
não resolva
apache2
apache2-mpm-worker
apache2-threaded-dev
apache2-utils
apache2.2-common
make
makedev
gcc
gcc-4.1
gcc-4.1-base
libgcc1
g++
g++-4.1
flex
zlib1g
zlib1g-dev
zlibc
libxau-dev
libxau6
libxdmcp-dev
libxdmcp6
libxext-dev
libxext6
libxml++2.6-2
libxml++2.6-dev
libxml2
libxml2-dev
libxpm-dev
libxpm4
libxslt1-dev
libxslt1.1
libmodxslt0
libmodxslt0-dev
libmozjs-dev
libmozjs0d
libjpeg62
libjpeg62-dev
libsablot0
libsablot0-dev
sablotron
libpng12-0
libpng12-dev
libpng3
libjpeg62
libjpeg62-dev
libgdbm3

Adicionais
postgresql-8.1
postgresql-client-8.1
postgresql-client-common
postgresql-common
postgresql-contrib-8.1
libdbd-mysql-perl
libmysqlclient15off
mysql-client-5.0
mysql-common
mysql-server
mysql-server-5.0
libcurl3
libcurl3-dev
libcurl3-openssl-dev
curl

Compilando o PHP

Depois de descompactar o arquivo, entre no diretório e rode o configure
./configure -with-apxs2=/usr/bin/apxs2 --enable-dbase --with-curl=/usr
--with-pgsql=/usr --with-gettext --enable-ftp --enable-track-vars
--enable-sockets --enable-sigchild --enable-memory-limit=yes --enable-trans-sid
--with-zlib=/usr --with-dom=shared,/usr --enable-wddx --with-xmlrpc
--with-freetype-dir=/usr --with-xpm-dir=/usr --with-jpeg-dir=shared,/usr
--with-png-dir=shared,/usr --with-gd --enable-xslt --with-xslt-sablot
 --with-expat --with-iconv --with-mime-magic

Agora rode o make, make install

make; make install

Copie o php.ini

cp /root/php-4.3.10/php.ini-dist /usr/local/lib/php.ini

Erros / Patches

Teoricamente é facil compilar, mas agora é que vem o problema, apanhei muito e tive até que modificar
algumas bibliotecas em C

Erros que vão acontecer quando compilar o php



    apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file..
apxs:Error: At least one `LoadModule’ directive already has to exist..
make: *** [install-sapi] Error

Caso sim, remova o arquivo httpd.conf atual (que é vazio por padrão) e crie um novo arquivo

/etc/apache2/httpd.conf como um link relativo para /etc/apache2/apache2.conf.
    #remove httpd.conf antigo (vazio por padrão no debian/ubuntu).
sudo rm -rf /etc/apache2/httpd.conf
#cria link relativo
sudo ln -s /etc/apache2/apache2.conf /etc/apache2/httpd.conf

Continue:

Abra o arquivo de configuração do apache com o comando:
#abre arquivo de configuração
vi /etc/apache2/apache2.conf

Com o arquivo de configuração do apache2 aberto, execute os seguintes passos:
 1. Procure por “Include /etc/apache2/httpd.conf”, e quando achar, 
comente a linha adicionando um “#” antes de Include. Ex: “#Include /etc/apache2/httpd.conf”.

2. Adicione as seguintes linhas ao final do arquivo:
* LoadModule php4_module /usr/lib/apache2/modules/libphp4.so

AGORA RODE O MAKE NOVAMENTE MAS PROVAVELMENTE VC VAI CAIR NO PROXIMO PROBLEMA



make: *** [ext/xmlrpc/libxmlrpc/xml_element.lo] Error 1

Agora nós temos um erro na biblioteca libxmlrcp, procurando sobre bugs no PHP descobri que o

libxmlrpc NÃO compila perfeitamente na versão 4 do GCC ( Que estou utilizando no Debian 4),

infelizmente o caminho da biblioteca é para o php5 e não para o php4, então nós vamos precisar criar um

patch e modificar algumas bibliotecas e mudar de 0 para NULL.

São 3 arquivos de teremos que mudar : simplestring.c, xml_element.c e xmlrpc_private.h.



Neste arquivo vamos alterar a seguinte linha
vi ext/xmlrpc/libxmlrpc/simplestring.c

Comente a primeira linha e adicione a segunda com o valor NULL
/*#define my_free(thing)  if(thing) {free(thing); thing = 0;}*/
#define my_free(thing) if(thing) {free(thing); thing = NULL;}




vi ext/xmlrpc/libxmlrpc/xml_element.c

Vamos mudar as seguintes linhas neste arquivo.

Comente a primeira linha e adicione a segunda com o valor NULL
/*#define my_free(thing)  if(thing) {free(thing); thing = 0;}*/
#define my_free(thing) if(thing) {free(thing); thing = NULL;}

Tambem vamos adicionar um if nesta função no mesmo arquivo, ficando assim :
    Q_Destroy(&root->children);
Q_Destroy(&root->attrs);
//my_free((char*)root->name);
if(root->name) {
free((char *)root->name);
root->name=NULL;
}
simplestring_free(&root->text);
my_free(root);
}
}




vi ext/xmlrpc/libxmlrpc/xmlrpc_private.h

Vamos mudar as seguintes linhas neste arquivo.

Comente a primeira linha e adicione a segunda com o valor NULL
/*#define my_free(thing)  if(thing) {free(thing); thing = 0;}*/
#define my_free(thing) if(thing) {free(thing); thing = NULL;}

AGORA RODE O MAKE NOVAMENTE



Isto ocorre quando não instalamos um MTA antes de compilar o php,
caso vc tenha feito isto, instale o MTA postfix
apt-get install postfix

e agora ANTES DE RECOMPILAR O PHP NOVAMENTE execute o comando:
make clean

Para testar se a função esta funcionando, crie um info.php desta maneira
<?
phpinfo();
mail(bzanelato@gmail.com", "Assunto NAO SEI", "TESTE DE E-MAIL", "From: bzanelato@gmail.com\nContent-type: text/html; charset=iso-8859-1");
?>


0 comentários:

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger | Printable Coupons