PHP Coder
Publicado por Isaque Vieira de Sousa Alves (última atualização em 12/12/2010)
[ Hits: 7.258 ]
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())
Script para Away com varias funções para xchat.
Cálculo de pontuação em Tranca
Gerador de cartão de crédito com Tkinter
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)