Criando pacotes deb (Debian/Ubuntu) para sistemas em PHP

De artista.frustrado

Um dos maiores problemas que tenho encontrar em colocar em produção, normalmente na pressa, sisetmas PHP é justamente o fato de não haver planejamento. Tudo deve ser para ontem. Por esse motivo criei duas soluções:

  1. Shell scripts para automatizar a instalação em servidores nos quais não administro
  2. Pacotes deb para automatizar a instalação em servidores que administro.

Como exemplo utilizarei o Zend Framework. O Zend Framework é desenvolvido pela Zend, empresa Israelita mantenedora do PHP, e por uma ampla e engajada comunidade de desenvolvedores.

Tabela de conteúdo

Configurando Ambiente

 export DEBFULLNAME="Artista Frustrado"
 export DEBEMAIL="e-mail.do.artista@mais.frustrado.com.uk"

criar diretorios

 
 mkdir -p ~/Empacotamento/zf/zend-framework-0.10.6
 cd ~/Empacotamento/zf/zend-framework-0.10.6
 vim Makefile

colocar no Makefile

 all:
       wget http://framework.zend.com/releases/ZendFramework-1.10.6/ZendFramework-1.10.6.tar.gz -O /tmp/ZendFramework-1.10.6.tar.gz
       tar -zxvf /tmp/ZendFramework-1.10.6.tar.gz -C .
 clean:                                                                                                                                                                                                    
       rm -fr ZendFramework-1.10.6

"Debianização" Inicial com CDBS

 tar -zcvf ../zend_framework-0.10.6.tar.gz ../zend_framework-0.10.6


 dh_make -c gpl -s -b -f ../zend_framework-0.10.6.tar.gz
 Maintainer name : Artista Frustrado
 Email-Address   : e-mail.do.artista@mais.frustrado.com.uk
 Date            : Wed, 24 Feb 2010 19:53:51 +0530
 Package Name    : zend-framework
 Version         : 0.16.6
 License         : gpl3
 Using dpatch    : no
 Using quilt     : no
 Type of Package : cdbs
 Hit <enter> to confirm: 
 Currently there is no top level Makefile.  This may require additional tuning.
 Done.  Please edit the files in the debian/ subdirectory now.  You should also
 check that the terminator Makefiles install into $DESTDIR and not in / .

e será criado um diretório debian

 cd debian
 vim dirs

No arquivo dirs

 var/www/ZF/versions/
 var/www/ZF/apps/

No arquivo install

 ZendFramework-1.10.6    var/www/ZF/version/

no arqivo control

 Source: zend-framework
 Section: php
 Priority: extra
 Maintainer:  Artista Frustrado <e-mail.do.artista@mais.frustrado.com.uk>
 Build-Depends: cdbs
 Standards-Version: 3.8.4
 Homepage: http://framework.zend.com
    Zend-Framework
 
 Package: zend-framework
 Architecture: all
 Depends: php5, php5-cli, php5-mysql, php5-xsl, php5-sqlite, php5-resource, php5-pspell, php5-pgsql, php5-mcrypt, php5-ldap, php5-intl, php5-imap, php5-gd, php5-cli, php-pear, php5-ming, php5-auth-pam, php5-geoip, php5-imagick, php5-ps
 Description: Zend Framework
  Zend Framework

e no arquivo postinst

 + crap.txt                                                                                                                                                                                                
 #!/bin/sh
 # postinst script for zend-framework
 #
 # see: dh_installdeb(1)
 set -e
 case "$1" in
     configure)
         if [ -f /var/www/ZF/zend ]
         then
             rm /var/www/ZF/zend
         fi
 
         if [ -f /usr/local/bin/zf.sh ]
         then
             rm /usr/local/bin/zf.sh
         fi
 
         ln -s /var/www/ZF/versions/ZendFramework-1.10.2/library/ /var/www/ZF/zend
         ln -s /var/www/ZF/versions/ZendFramework-1.10.2/bin/zf.sh /usr/local/bin/zf.sh
     ;;
 
     abort-upgrade|abort-remove|abort-deconfigure)
     ;;
 
     *)
         echo "postinst called with unknown argument \`$1'" >&2
         exit 1
     ;;
 esac
 exit 0

Empacotando

 debuild -us -uc


Conclusão

Publiquei em minha conta do github [1] os arquivos de exmplo.

[1] http://github.com/artistafrustrado/deb_zend-framework