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 ph
p5 e etc.
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-magicAgora 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 / PatchesTeoricamente é facil compilar, mas agora é que vem o problema, apanhei muito e tive até que modificar
algumas bibliotecas em CErros 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] ErrorCaso 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.confContinue:
Abra o arquivo de configuração do apache com o comando:
#abre arquivo de configuração vi /etc/apache2/apache2.confCom 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.soAGORA RODE O MAKE NOVAMENTE MAS PROVAVELMENTE VC VAI CAIR NO PROXIMO PROBLEMA
make: *** [ext/xmlrpc/libxmlrpc/xml_element.lo] Error 1Agora 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 linhavi ext/xmlrpc/libxmlrpc/simplestring.cComente 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.cVamos 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.hVamos 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 postfixapt-get install postfixe agora ANTES DE RECOMPILAR O PHP NOVAMENTE execute o comando:
make cleanPara 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"); ?>


