PHP Coder
Publicado por Isaque Vieira de Sousa Alves (última atualização em 12/12/2010)
[ Hits: 7.256 ]
Homepage: www.isaquealves.com
Download phpcoder-0.1.0-alpha.tar.gz
Script desenvolvido em python para facilitar e agilizar a criação de um ambiente de desenvolvimento LAMP + Zend Framework + doctrine ORM.
O script é simples, foi criado especificamente para uma oficina que trabalhei no Enucomp 2010, sobre desenvolvimento rápido usando ZF + Doctrine ORM.
O que ele faz:
- Verifica se o usuário possui os pacotes do apache webserver, mysql, php e curl instalados. Se não, instala.
- Cria os containers (diretórios) /home/user/Library e /home/user/Sites para armazenar as bibliotecas e os projetos.
- Faz o download de versões estáveis das bibliotecas e as instala em /home/user/Library.
TODO :
- Verificar atualizações do ZF, DOCTRINE e PHP Unit.
- Automatizar a criação dos projetos usando o ZF (com o zendtool).
Status de desenvolvimento:
- Ativo
Em breve divulgo o endereço do repositório no site bitbucket.com (uso o mercurial para controle de versões)
#!/usr/bin/env python # -*- coding:utf8 -*- """Base.py: Todos os pacotes instalados por este programa estão disponíveis sob licença GPL ou compatível, Os pacotes apache2, php5, mysql-server-5.1 e todas as dependências relacionadas podem ser instalados também por meio dos utilitários 'apt-get' ou 'synaptic' em uma instalação padrão do GNU/Linux Ubuntu. Este programa faz uso do utilitário curl para realizar o download dos pacotes do ZendFramework, do Doctrine ORM e do PHP Unit. O pacote Zend Framework pode ser obtido gratuitamente em <http://framework.zend.com/> O pacote Doctrine ORM pode ser obtido em <http://www.doctrine-project.org/> O pacote PHP Unit pode ser obtido em <http://github.com/sebastianbergmann/phpunit> """ # # # PHP CODER Environment Builder v0.01.1alpha # Constrói um ambiente básico para desenvolvimento de aplicativos em PHP utilizando Zend Framework/ # Doctrine e PHP Unit. # Developer: Isaque Alves<isaquealves@gmail.com> # website : http://www.isaquealves.com # Estudante de Sistemas de Informação pela FAP - Parnaíba # O Presente script é distribuido sob os termos da licença GPLv2 # # import os import sys from subprocess import Popen, PIPE import time import platform CURRENT_DIR = os.path.realpath(os.path.dirname(__file__)) DPKGQUERY ='/usr/bin/dpkg-query' DPKG ='/usr/bin/dpkg' #Define a localização padrão do utilitário dpkg APT_INSTALL ='/usr/bin/apt-get install -y' USERNAME = os.getenv('USERNAME') #Obtém o nome de usuário do usuário atual ZF_PKG = 'ZendFramework-1.10.8' #TODO Doctrine_PKG = 'Doctrine-1.2.3' #TODO ZF_EXEC = '~/Library/' + ZF_PKG + '/bin/zf.sh' BAR = CURRENT_DIR + "bar" APP_VERSION = '0.01.0-alpha' #If you need, add more packages to this one PACKAGELIST = ['apache2','php5','mysql-server-5.1','curl'] #Do it by this way: PACKAGELIST = ['apache2','php5','mysql-server-5.1','otherpackage'] # or this : PACKAGELIST.append('otherpackage') def execWithRootPrivileges(executable): '''Get Root acces to the system by asking administrator password''' os.system('gksudo ' + executable) def checkResourcesInstalation(): ''' Check if a package is installed or not by searching the dpkg database''' is_not_installed = [] for resourceName in PACKAGELIST: DPKG_QUERY = os.system(DPKGQUERY + ' -l | grep ' + resourceName +' > /dev/null') if(DPKG_QUERY): is_not_installed.append(True) else: is_not_installed.append(False) return is_not_installed ################################################################################ #from Envy source code def cmdoutput(command, verbose=None): ''' USAGE: * the command must be a string * you can pass 'noverbose' in order to make sure that stderr > /dev/null ''' if verbose == 'noverbose': NULL = open('/dev/null', 'w') comnd = Popen(command, shell=True, stdout=PIPE, stderr=NULL) sts = os.waitpid(comnd.pid, 0) NULL.close() else: comnd = Popen(command, shell=True)# stdout=PIPE) sts = os.waitpid(comnd.pid, 0) ################################################################################ def buildPackageList(): toinstall = [] checked = checkResourcesInstalation() index = 0 for installedPackage in checked: if(not installedPackage): index += 1 else: toinstall.append(PACKAGELIST.pop(index)) return toinstall def installPackages(installList): installstring = APT_INSTALL + " ".join(installList) cmdoutput('sudo apt-get update') cmdoutput('sudo ' + installstring) def createContainers(): CMDSTR = 'mkdir -p /home/'+ USERNAME +'/Library/bin' cmdoutput(CMDSTR) CMDSTR = 'echo "PATH=$PATH:/home/'+ USERNAME +'/Library/bin" >> /home/'+ USERNAME +'/.bashrc' cmdoutput(CMDSTR) CMDSTR = 'mkdir -p /home/'+ USERNAME +'/Sites/public_html' cmdoutput(CMDSTR) cmdoutput('source /home/'+ USERNAME +'/.bashrc') def getSourcePackage(url,destination): ''' @TODO Verificar a existência de versões mais recentes do pacote a ser baixado e apresentar uma lista das 3 últimas versões ao desenvolvedor. ''' filename = destination.split("/") cmdoutput('curl -# ' + url + ' -o ' + destination + ' 2>&1 | zenity --text="Obtendo '+ filename[2] + ' de '+ url +'" --title=" Obtendo'+ filename[2] +' a partir de '+ url +'" --progress --pulsate --auto-kill') def getZendFramework(): ''' @TODO Melhorar esta função ''' print"testando se há algum pacote anteriormente baixado..." filename = '/tmp/'+ ZF_PKG + '.zip' if (os.path.isfile(filename)): size = os.path.getsize(filename) if((size == 25221796L)): print "O pacote já foi obtido. Prosseguindo..." return else: print "O pacote foi parcialmente obtido. Reiniciando o download" getSourcePackage('http://framework.zend.com/releases/' + ZF_PKG + '/' + ZF_PKG + '.zip' ,filename) else: print "Obtendo o Zend Framework:" getSourcePackage('http://framework.zend.com/releases/' + ZF_PKG + '/' + ZF_PKG + '.zip' ,filename) def installZendFramework(): cmdoutput('unzip -o /tmp/' + ZF_PKG + '.zip -d /home/'+ USERNAME +'/Library/ 2>&1 | zenity --progress --pulsate') if(file('/home/'+ USERNAME +'/Library/ZendFramework-1.10.8/bin/zf.sh')): cmdoutput('ln -s /home/'+ USERNAME +'/Library/ZendFramework-1.10.8/bin/zf.sh /home/'+ USERNAME +'/Library/bin/zf') else: print "Há algo errado. Verifique a instalação do Zend Framework em /home/"+ USERNAME +"/Library/" + ZF_PKG def getDoctrineORM(): print"testando se há algum pacote anteriormente baixado..." filename = '/tmp/'+ Doctrine_PKG +'.tgz' if (os.path.isfile(filename)): size = os.path.getsize(filename) if(file(filename) and (size == 377480L)): print "O pacote já foi obtido. Prosseguindo..." return else: print "O pacote foi parcialmente obtido. Reiniciando o download" getSourcePackage('http://www.doctrine-project.org/downloads/'+ Doctrine_PKG +'.tgz',filename) else: print "Obtendo o Doctrine ORM" getSourcePackage('http://www.doctrine-project.org/downloads/'+ Doctrine_PKG +'.tgz',filename) def installDoctrine(): cmdoutput('cd /home/'+ USERNAME +'/Library/ && tar -xzpf /tmp/' + Doctrine_PKG + '.tgz 2>&1 | zenity --progress --pulsate') cmdoutput('cd -') #PHP Unit GIT Repo: http://github.com/sebastianbergmann/phpunit def getPHPUnit(): print"testando se há algum pacote anteriormente baixado..." filename = '/tmp/PHP_Unit-3.5.tar.gz' if (os.path.isfile(filename)): size = os.path.getsize(filename) if (file(filename) and (size == 130L)): print "O pacote já foi obtido. Prosseguindo..." return else: print "O pacote foi parcialmente obtido. Reiniciando o download" getSourcePackage('http://nodeload.github.com/sebastianbergmann/phpunit/tarball/3.5',filename) else: print "Obtendo o PHP Unit" getSourcePackage('http://nodeload.github.com/sebastianbergmann/phpunit/tarball/3.5',filename) def installPHPUnit(): cmdoutput('cd /home/'+ USERNAME +'/Library/ && tar -xzpf /tmp/PHP_Unit-3.5.tar.gz && mv /home/'+ USERNAME +'/Library/sebastianbergmann* /home/'+ USERNAME +'/Library/PHP_Unit 2>&1 | zenity --progress --pulsate') cmdoutput('cd -') def editPHPConf(): pass def createVHost(): os.system("sed 's/USERNAME/"+USERNAME+"/g' "+ CURRENT_DIR +"/zfsite.example > "+ CURRENT_DIR +"/zfsite") execWithRootPrivileges("cp "+ CURRENT_DIR +"/zfsite /etc/apache2/sites-available/zfsite") cmdoutput('sudo a2ensite zfsite') #execWithRootPrivileges('gnome-terminal --command="nano -w /etc/apache2/sites-available/zfsite"') def editHostsFile(): print "Adicione ao final da primeira linha do arquivo /etc/hosts, após localhost, a palavra zendserver" print "Vamos abrir o arquivo para que você faça isso, ok?!!" time.sleep(3) cmdoutput("sudo nano -w /etc/hosts") def enableModRewrite(): cmdoutput('sudo a2enmod rewrite') def restartApacheServer(): cmdoutput('sudo service apache2 restart') def main(): from TerminalController import TerminalController t = TerminalController() print t.RED + t.BOLD +"PHP Coder Environment Builder" + APP_VERSION + t.NORMAL print __doc__ print t.GREEN + "Vamos preparar o ambiente para desenvolvimento" print "Verificando se o ambiente já possui o webserver apache2, o sgdb mysql 5.1 e o php versão 5" + t.NORMAL toinstall = buildPackageList() if(len(toinstall) == 0): print t.BOLD + "Todos os pacotes estão instalados. Vamos adiante!" + t.NORMAL else: installPackages(toinstall) os.system('reset') print "Vamos obter agora, os pacotes do Zend Framework, Doctrine ORM e PHP Unit" print "Depois, será criado um novo container (Folder) em seu diretório pessoal chamado 'Library'" print "onde serão instalados o Zend Framework, o Doctrine ORM e o PHP Unit" getZendFramework() getDoctrineORM() getPHPUnit() print "Criando os containers 'Library' e 'Library/bin' em /home/"+ USERNAME + " e adicionando 'Library/bin' ao PATH do usuário " + USERNAME createContainers() print "Instalando os componentes" print "Zend framework" installZendFramework() print "Doctrine" installDoctrine() print "PHP Unit" installPHPUnit() print "Ativando o módulo 'mod_rewrite' do Apache Web Server" enableModRewrite() print "Criando um Virtual Host no Apache" createVHost() editHostsFile() print "Reiniciando o apache web server" restartApacheServer() print "Pronto. Para acessar o seu container de websites utilizando qualquer browser, acesse o endereço abaixo:" cmdoutput('echo http://zendserver/') if __name__ == "__main__": if(platform.system() == "Linux"): if((platform.dist()[0] == "Ubuntu") or (platform.dist()[0]=="Debian")): main() else: print "Você está usando GNU/Linux %s mas este programa ainda não foi portado para outras distribuições além do Ubuntu. Sinta-se à vontade para fazê-lo!!" %(platform.dist()[0],) else: print "Você está usando %s - %s mas este programa não foi portado para outras plataformas" % (platform.system(),platform.release())
Plano de fundo rotatório no Gnome
Gerador de números para Mega-Sena
Avaliador de Expressões Simples
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)