PHP Coder
Publicado por Isaque Vieira de Sousa Alves (última atualização em 12/12/2010)
[ Hits: 7.502 ]
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())
Calcula a idade da pessoa em dias
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
O programa assinador digital (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)









