CMS Plone 4.1.6 com invólucro Virtualenv + Buildout + Mount Point + BLOB Storage + Unicode UTF-8

Introdução – Escopo – Dependências

Segundo plone.org, o Plone 4 é a versão mais rápida, poderosa e bela. O state-of-the-art do CMS Plone.

Linux: CMS Plone 4.1.6 com invólucro virtualenv + buildout + mount point + BLOB storage + Unicode UTF-8

O Plone, também conhecido por PZP – Python/Zope/Plone – Assim chamado pela formação do ambiente que envolve a linguagem de programação interpretada Python, o framework para desenvolvimento Web Zope e o CMS – Content Management System – Plone.

O Plone está entre os CMS com menor índice de falhas de segurança, possui várias funcionalidades técnicas que podem ser comparadas com outros CMS na URL:

E de acordo com a pesquisa apresentada pela IBM, em Manyeyes, foi o CMS que apresentou menos vulnerabilidades.

Trata-se de uma plataforma para gerenciamento de diversos tipos de conteúdo sem que sejam necessários conhecimentos técnicos em relação à estrutura codificada da plataforma.

Com o CMS Plone, pode-se construir um site completo, com diversas funcionalidades, sem a necessidade da construção de códigos complexos em linguagem de programação.

O Plone abre espaço para customização de sua aparência e estrutura de navegação, além de possibilitar personalização do site através da escolha de cores, imagens e posicionamentos de diversos componentes, que agora incluem Gadgets.

Em um nível mais avançado, a utilização do Plone dá conta da implementação de novas funcionalidades por parte de desenvolvedores de softwares, que podem ser agregadas à estrutura já existente, como sistemas de diretórios (AD/LDAP), Samba, e outros recursos estruturais.

O que é o Plone?

O Plone, classificado como um Sistema Gerenciador de Conteúdo, ou popularmente chamado pelo acrônimo em Inglês CMS – Content Management System – é um software livre e de código aberto.

Possui incorporado, um sistema de workflow, diretivas de segurança e funções pré-configuradas, metadados para tipos conteúdo e suporte para múltiplos idiomas.

Além disto, desenvolvedores e testadores de todo o mundo contribuem com a sua construção e melhoria.

O que pode ser feito com o Plone?

  • Criar sites facilmente;
  • Gerenciar todo o conteúdo do site através de uma interface amigável;
  • Delegar subtarefas em áreas especificas do sítio sem comprometer a escalabilidade e a segurança;
  • Criar e organizar conteúdo de forma colaborativa através de um fluxo de trabalho;
  • Personalizar do aspecto visual básico do site através de interface intuitiva;
  • Divulgar notícias, feed, eventos e links;
  • Publicar fotos, arquivos e vídeos;
  • Organizar hierarquicamente seu conteúdo através de menus de navegação.

Quais recursos são oferecidos pelo Plone?

  • Criação e manutenção de conteúdo;
  • Todo gerenciamento de conteúdo realizado através do navegador Web;
  • Gerenciamento de usuários com níveis hierárquicos;
  • Fluxo de publicação colaborativa de conteúdo (workflow);
  • Geração automática de infraestrutura de navegação;
  • Mecanismo de busca avançada;
  • Possibilidade de criação de portais de Internet ou Intranet;
  • Criação de blog corporativo;
  • Ferramentas colaborativas para groupware;
  • Repositório de conteúdos como imagens, documentos e vídeos;
  • Agendamento e divulgação de eventos;
  • Galeria de imagens;
  • Área integrada de notícias;
  • Segurança e integridade dos dados;
  • Suporte a internacionalização.

Escopo

O escopo de customização está limitado ao seguinte ambiente:

O Plone 4.1.6, é a ultima revisão estável da versão 4.1, e possui os seguintes pacotes incorporados e respectivas versões:

  • packages/buildout-cache.tar.bz2
  • packages/distribute-0.6.19.tar.gz
  • packages/issue12012-sslv2.txt
  • packages/issue9670-v2.txt
  • packages/jpegsrc.v8c.tar.bz2
  • packages/multiarch-patch.txt
  • packages/Python-2.6.8.tar.bz2
  • packages/readline-6.2.tar.bz2
  • packages/virtualenv-1.6.1.tar.bz2
  • packages/zlib-1.2.5.tar.bz2

Dependências

Considerando que, o sistema operacional esteja instalado e configurado corretamente, execute:

Debian Like:

$ sudo aptitude install build-essential libssl-dev

Red Hat Like:

$ sudo yum install gcc cpp gcc-c++ make openssl-devel

PZP – Virtualenv – Buildout

Instalação do PZP

Nesta etapa, cria-se o invólucro completamente independente do sistema operacional, para que o ambiente não sofra quebra de configuração devido às atualizações de segurança, ou afins.

O invólucro “/opt/p416”, conterá todos os programas necessários para funcionamento do ambiente PZP, incluindo zlib, JPEG, Python e as demais dependências.

Baixe e descompacte, primeiramente, o Plone-4.1.6-UnifiedInstaller:

# wget https://launchpad.net/plone/4.1/4.1.6/+download/Plone-4.1.6-UnifiedInstaller-20120708.tgz
# tar xvzf ~/Downloads/Plone-4.1.6-UnifiedInstaller-20120708.tgz -C /tmp/
# cd /tmp/Plone-4.1.6-UnifiedInstaller
# ./install.sh zeo –zlib=local –jpeg=local –user=admin –password=admin –target=/opt/p416 –clients=4 –instance=modelo

As opções do comando install.sh, informam que a instalação é modo zeo, sendo que as bibliotecas “zlib” e “jpeg”, serão locais, o usuário admin e senha admin, no diretório “/opt/p416”, com 4 clientes zope e o nome do cluster modelo.

Virtualenv

Nesta etapa, instala-se o ambiente virtual, do inglês Virtual Environment, sob acrônimo Virtualenv.

O Virtualenv possibilita a utilização de um encapsulamento de subinstâncias Python, que permite a total personalização, sem a modificação da instalação principal.

O ambiente Plone a partir da versão 3, já vem disponibilizado o easy_install, que é instalador para módulos Python, o qual será usado neste artigo.

# cd /opt/p416/
# ./Python-2.6/bin/easy_install virtualenv

Para melhor entendimento, com a finalidade de organização, o diretório app (applications), conterá todos os ambientes criados.

Agora, cria-se o ambiente virtual, da seguinte forma:

# ./Python-2.6/bin/virtualenv app/env001

Buildout

Buildout é uma ferramenta Open Source de construção de softwares, desenvolvida utilizando-se da linguagem de programação Python, para fornecer suporte à criação de instâncias de aplicações, principalmente àquelas escritas em Python.

O Buildout fornece ferramentas para criação de aplicações através segmentos, denominados parts, que podem ser módulos Python, servidores Web, servidores de aplicação e qualquer elemento de aplicação para infraestrutura.

Há como configurar o buildout para utilizar os arquivos de configuração diretamente pela Web, mas deste artigo, usaremos o modelo da própria estrutura do invólucro.

# cp -vf modelo/*.{py,cfg} app/env001/

Os seguintes arquivos serão copiados:

  • modelo/bootstrap.py
  • modelo/base.cfg
  • modelo/buildout.cfg
  • modelo/develop.cfg
  • modelo/lxml_static.cfg
  • modelo/versions.cfg
  • modelo/zopeapp-versions.cfg
  • modelo/zope-versions.cfg
  • modelo/ztk-versions.cfg

Configuração:

# cd app/env001/
# vim buildout.cfg

Para personalizar as portas, localize o trecho a seguir, no arquivo buildout.cfg:

# Ports
# —–
# Specify the ports on which your Zope installation
# will listen.
# ZEO Server
zeo-address = 127.0.0.1:8100
# Zope client 1
http-address = 8080
# Additional clients:
client2-address = 8081

E modifique para as portas desejadas, tal como exemplo, zeo aceitando apenas conexões locais na porta 8100, e os clientes zope, rodando nas portas 8101 e 8102 respectivamente.

# Ports
# —–
# Specify the ports on which your Zope installation
# will listen.
# ZEO Server
zeo-address = 127.0.0.1:8100
# Zope client 1
http-address = 8101
# Additional clients:
client2-address = 8102

No Plone 4, também faz-se necessário modificar algumas permissões, e criar alguns diretórios para o bom funcionamento do ambiente.

Façamos pelo buildout, no arquivo base.cfg.

[chown-zeo]
# This recipe is used to set permissions for root mode installs
# For options see http://pypi.python.org/pypi/plone.recipe.command
recipe = plone.recipe.command
command =
echo Dummy references to force this to execute after referenced parts
echo ${backup:location} ${unifiedinstaller:sudo-command}
chmod 600 .installed.cfg
touch ${buildout:directory}/var/zeoserver/zeoserver.log
find ${buildout:directory}/var -type d -exec chmod 700 {} \;
chmod 744 ${buildout:directory}/bin/*
update-command = ${chown-zeo:command}

Acrescente o trecho que compreende as linhas 109 a 111, como abaixo:

[chown-zeo]

chmod 744 ${buildout:directory}/bin/*
chmod 755 ${buildout:directory}/bin/python
mkdir -pm 755 ${buildout:directory}/{products,src}
chown -R ${buildout:effective-user} ${buildout:directory}/var
update-command = ${chown-zeo:command}

Instalação

Considerando que esteja no diretório /opt/p416/app/env001/, execute os comandos abaixo:

# mkdir -pv ../buildout-cache/{eggs,downloads}
# export http_proxy=http://10.1.101.101:8080

Obs.: Se houver proxy na rede, coloque o IP e porta do proxy

# ./bin/python bootstrap.py

A etapa três pode ser substituída por:

# cp -va /opt/p416/buildout-cache/ /opt/p416

Ou:

# ln -sv /opt/p416/buildout-cache/ /opt/p416

O objetivo desta substituição, é simplificar o processo de download dos módulos eggs, que já foram baixados quando o modelo foi criado.

* Lembrando que, é opcional a substituição, restando para tanto, o novo downloads dos módulos eggs.

# ./bin/buildout -v -t 30

Onde:

  • -v : Incrementa o nível de detalhamento;
  • -t 30 : Define o timeout em 30s para cada repositório.

Faz-se necessário executar o comando:

# ./bin/buildout

…Para cada atualização realizada no ambiente.

Mount point

O Moint Point não necessita de instalação, pois é apenas um recurso de configuração do ZODB (Zope Object Data Base), em modo ZEO (Zope Enterprise Objects), que permite utilização de múltiplos arquivos “.fs”, na mesma instância.

O ZEO com Mount Point ativado, funciona como um SGBD (Sistema Gerenciador de Banco de Dados), que gerencia acessos concorrentes, a múltiplas bases de dados em um SGBD relacional, tais como PostgreSQL, Oracle, MySQL e MSSQL Server.

No artigo: Brito: Plone 3.3.5 + buildout + mount point, destaquei onde deve ser modificado no arquivo buildout.cfg, e algumas premissas que deve ser contempladas, ou melhor tomadas por regras.

Entre as premissas, destaca-se usar algo que identifique a aplicação adequadamente, e nomes com as regras abaixo, que funcionam com louvor.

  • Letras minúsculas (caixa baixa);
  • Não utilizar caracteres especiais;
  • Não utilizar traço(-).

Vantagens

Como toda solução, há vantagens e desvantagens. A vantagem em relação à configuração sem Mount Point, está na hora de recuperar o backup de apenas uma das aplicações, que neste caso, é pontual, e bastante facilitada com o repozo, aplicação que já compõe a estrutura.

Minimiza o tempo de ociosidade dos processos PZP, pois uma instancia serve vários Plone sites.

Desvantagens

Realizar o backup individual em cada arquivo.

Configuração

Diferentemente do Plone 3, o Plone 4 possui uma gama de novos arquivos, e uma nova estrutura de configuração, e as alterações para Mount Point ZEO, deverão ser realizadas no arquivo “base.cfg”.

# vim base.cfg

No trecho do [zeoserver], aproximadamente na linha 81, como segue abaixo:

[zeoserver]
# Use this section to install and configure a Zope
# Enterprise Objects server.
# For options see http://pypi.python.org/pypi/plone.recipe.zeoserver
recipe = plone.recipe.zeoserver
zeo-address = ${buildout:zeo-address}
# if we try to start as root, Zope will switch to the user below
effective-user = ${buildout:effective-user}
# Put the log, pid and socket files in var/zeoserver
zeo-log = ${buildout:directory}/var/zeoserver/zeoserver.log
pid-file = ${buildout:directory}/var/zeoserver/zeoserver.pid
socket-name = ${buildout:directory}/var/zeoserver/zeo.zdsock
blob-storage = ${buildout:directory}/var/blobstorage
# You may also control the environment variables for the zeoserver.
environment-vars = ${buildout:environment-vars}

Acrescenta-se a diretiva “zeo-conf-additional” ao final da sessão, para incrementar o filestorage do ZEO, como abaixo.

[zeoserver]

eggs = tempstorage

zeo-conf-additional =

path ${buildout:directory}/var/filestorage/mp001BD.fs

path ${buildout:directory}/var/filestorage/mp002BD.fs

path ${buildout:directory}/var/filestorage/mp003BD.fs

%import tempstorage

name temporary storage for sessioning

No trecho do [client1], aproximadamente na linha 129, como segue abaixo:

[client1]
# Use this section to install and configure a Zope
# client instance.
# For options see http://pypi.python.org/pypi/plone.recipe.zope2instance
# Additional clients are a
recipe = plone.recipe.zope2instance
zeo-client = true
zeo-address = ${zeoserver:zeo-address}
# The line below sets only the initial password. It will not change an
# existing password.
user = ${buildout:user}
# if we try to start as root, Zope will switch to the user below
effective-user = ${buildout:effective-user}
\ http-address = ${buildout:http-address}
blob-storage = ${zeoserver:blob-storage}
shared-blob = on
# change debug-mode to “on” to run in development mode
debug-mode = ${buildout:debug-mode}
# change verbose-security to “on” for detailed security
# errors while developing
verbose-security = ${buildout:verbose-security}
deprecation-warnings = ${buildout:deprecation-warnings}
# Put the log, pid, lock files in var/client1
event-log = ${buildout:directory}/var/client1/event.log
z2-log = ${buildout:directory}/var/client1/Z2.log
pid-file = ${buildout:directory}/var/client1/client1.pid
lock-file = ${buildout:directory}/var/client1/client1.lock

# If you want Zope to know about any additional eggs, list them here.
# e.g. eggs = ${buildout:eggs} my.package
eggs = ${buildout:eggs}

# If you want to register ZCML slugs for any packages, list them here.
# e.g. zcml = my.package my.other.package
zcml = ${buildout:zcml}

products = ${buildout:directory}/products

# You may also control the environment variables for the instance.
environment-vars = ${buildout:environment-vars}

Acrescenta-se a diretiva “zope-conf-additional” ao final da sessão, para incrementar o filestorage do ZEO, como abaixo.

[client1]
zope-conf-additional =
           <zodb_db mp001bd="">
          mount-point /mp001bd
          cache-size 5000
          <zeoclient>
              name mp001bd
              server ${buildout:zeo-address}
              storage mp001bd
              var ${buildout:directory}/var
          </zeoclient>      
         </zodb_db>
          
         <zodb_db mp002bd="">
          mount-point /mp002bd
          cache-size 5000
          <zeoclient>
              name mp002bd
              server ${buildout:zeo-address}
              storage mp001bd
              var ${buildout:directory}/var
          </zeoclient>      
         </zodb_db>
          
         <zodb_db mp003bd="">
          mount-point /mp003bd
          cache-size 5000
          <zeoclient>
              name mp003bd
              server ${buildout:zeo-address}
              storage mp003bd
              var ${buildout:directory}/var
          </zeoclient>      
         </zodb_db>
          
 zodb-temporary-storage =
         <zodb_db temporary="">
             <zeoclient>
               server ${buildout:zeo-address}
               storage temp
               name zeostorage
               var ${buildout:directory}/var
             </zeoclient>
             mount-point /temp_folder
             container-class Products.TemporaryFolder.TemporaryContainer
         </zodb_db>

Salve feche o arquivo, e execute o buildout novamente, e a sequência seguinte:

# ./bin/buildout -v -t 30
# ./bin/buildout -v -t 30
# ./bin/plonectl stop
# ./bin/plonectl start

Agora, no navegador:

  1. Acesse: http://ip.do.serv:8101/manage
  2. Entre com o usuário e senha (admin e admin);
  3. Localize a combobox com o texto ATContentTipes tool;
  4. Nesta combobox, selecione ZODB Mount Point;
  5. Na página seguinte: Add ZODB Mount Points, selecione os Mount Points desejados e clique no botão: Create selected mount points;
  6. Com esta ação será criado um diretório na raiz do ambiente, o qual mapeia a estrutura configurada anteriormente.

Obs.: A opção restart, pode não funcionar adequadamente, por esta razão, recomendo executar o stop e start, nos passos 3 e 4.

Se por ventura não aplicar a mudança, ou demorar demasiadamente, suba uma das instancias em modo foreground:

./bin/client1 fg

BLOB Storage

O Binary Large OBject, identificado por seu acrônimo, BLOB, são tipicamente identificados por imagens, áudio ou outros objetos multimídia de grande volume.

Usualmente, as Base de Dados não suportam BLOBs. Este pacote é um complemento para o Plone, a partir da release Plone 3.0.4, que permite a integração de BLOB com ZODB 3,8; possibilitando que os dados binários sejam geridos pelo ZODB, mas separadamente do seu habitual FileStorage (Data.fs) de armazenamento para o banco de dados.

Isto tem várias vantagens, sobretudo, uma redução real do FileStorage (Data.fs) e melhor desempenho tanto das CPU’s, quanto em otimização de memória RAM.

O Zope trabalha com BLOB’s, através do pacote plone.app.blob, este pacote substitui a função executada pelo FileSystemStorage (FSS), configurado pelo buildout em plone 3, através do “recipe=iw.recipe.fss”, descontinuado na versão 4 do Plone.

Instalação

A instalação através do buildout, é bem simples, basta acrescentar o pacote plone.app.blob, nas sessões “eggs” e “zcml” da diretiva buildout, como abaixo:

[buildout]
[..]
eggs =
Plone      plone.app.blob [..]
zcml = plone.app.blob

Este procedimento não é necessário a partir do Plone 4.1.4, que já vem com o plone.app.blob-1.5.1, instalado e necessitando apenas a sua configuração pertinente.

Configuração

O BLOB Storage, também possui duas modalidades de configuração, Stand Alone(Single) e ZEO.

Seguindo o Escopo, abaixo a configuração para o modo ZEO. No arquivo base.cfg, localize o trecho abaixo:

   [chown-zeo]
# This recipe is used to set permissions for root mode installs
# For options see http://pypi.python.org/pypi/plone.recipe.command
recipe = plone.recipe.command
command =
echo Dummy references to force this to execute after referenced parts
echo ${backup:location} ${unifiedinstaller:sudo-command}
chmod 600 .installed.cfg
touch ${buildout:directory}/var/zeoserver/zeoserver.log
find ${buildout:directory}/var -type d -exec chmod 700 {} \;
chmod 744 ${buildout:directory}/bin/*
chmod 755 ${buildout:directory}/bin/python
mkdir -pm 755 ${buildout:directory}/{products,src}
chown -R ${buildout:effective-user} ${buildout:directory}/var
update-command = ${chown-zeo:command}

Altere o trecho, acrescentando as linhas 116 e 117, como abaixo:

[chown-zeo]
[..]
chmod 744 ${buildout:directory}/bin/*     chmod 755 ${buildout:directory}/bin/python     mkdir -pm 755 ${buildout:directory}/{products,src}

mkdir -pm 755 ${buildout:directory}/var/blobstorage/mp00{1,2,3}bd/tmp     chown -R ${buildout:effective-user} ${buildout:directory}/var update-command = ${chown-zeo:command}

Esta modificação neste trecho, tem a finalidade de gerar os diretórios ao executar o buildout.cfg, criando os respectivos diretórios, para os 3 Mount Points que serão criados:

  • /opt/p416/app/env001/var/blobstorage/mp001bd
  • /opt/p416/app/env001/var/blobstorage/mp002bd
  • /opt/p416/app/env001/var/blobstorage/mp003bd

Agora, para configurar o blobstorage, é necessário alterar tanto a configuração do Zope Server, quanto do Zope Client.

Na sessão zeo-conf-additional, localize o trecho:

  zeo-conf-additional =
<filestorage mp001bd>
path ${buildout:directory}/var/filestorage/mp001BD.fs
</filestorage>

Acrescente a linha 100, conforme abaixo, referenciando o diretório do blobstorage acrescentado na sessão [chown-zeo].

zeo-conf-additional =

path ${buildout:directory}/var/filestorage/mp001BD.fs
blob-dir ${buildout:directory}/var/blobstorage/mp001bd

Na sessão zope-conf-additional, localize o trecho:

[client1]
[…]
zope-conf-additional =
<zodb_db mp001bd>
mount-point /mp001bd
cache-size 5000
<zeoclient>
name mp001bd
server ${buildout:zeo-address}
storage mp001bd
var ${buildout:directory}/var
</zeoclient>
</zodb_db>

Altere o trecho para:

zope-conf-additional =
        <zodb_db mp001bd="">
         mount-point /mp001bd
         cache-size 5000
         <zeoclient>
              blob-dir ${buildout:directory}/var/blobstorage/mp001bd
             shared-blob-dir on
              name mp001bd
             server ${buildout:zeo-address}
             storage mp001bd
             var ${buildout:directory}/var
         </zeoclient>
        </zodb_db>

Salve, feche e execute novamente os comandos abaixo novamente.

# ./bin/buildout -v -t 30
# ./bin/buildout -v -t 30
# ./bin/plonectl stop
# ./bin/plonectl start

Unicode UTF-8

O Unicode UTF-8 serve para evitar erros de codificação na língua portuguesa.

Para implementá-lo, basta adicionar o trecho abaixo no base.cfg.

[unicode]
recipe = plone.recipe.command
update-command = ${unicode:command}
command =
cat > ${buildout:directory}/lib/python2.6/site-packages/sitecustomize.py << EOF
import sys
sys.setdefaultencoding(‘utf-8’)
EOF

Salve, feche e execute novamente o buildout.

# ./bin/buildout -v -t 30

Desfecho, arquivos fontes e referências

Agora, para conclusão de todo o processo, acesse a Zope Manage Interface (ZMI), em seu navegador preferido, no IP da máquina e a porta, em que o Plone foi configurado.

No exemplo deste artigo, 8101 e 8102, para as instâncias, client1 e client2, respectivamente.

  • http://iphost:8101/manage
  • http://iphost:8102/manage

Exemplo: http://192.168.0.2:8102/manage

Este artigo, pode ser lido também em meu blog: http://brito.blog.incolume.com.br, e futuramente disponibilizarei a versão em PDF.

Abraço a todos. 🙂

Buildout.cfg Completo

############################################
#
# Buildout Configuration File for ZEO Plone
# -----------------------------------------
#
# After making changes in this configuration file,
# you should run bin/buildout to update the components.
#
# ALWAYS back up all Plone/Zope data and components
# before changing configuration.
#
# Running "bin/buildout" will update your installation,
# installing missing components as necessary.
#
# Use "bin/buildout -n" to update many components here to the newest
# available releases.
# This will update the add-on products you've added in the eggs= lines.
# This will not, however, upgrade Plone itself (or anything else you've
# pinned with a version specification). To upgrade Plone itself, see the
# comments in "Plone Component Versions".
#
# Tutorial instructions for using zc.buildout for
# configuration management are available at:
#
############################################
[buildout]
############################################
# Plone Component Versions
# ------------------------
# This version of the Unified Installer has the components of Plone 4
# preloaded so that it can install without an Internet connection.
# If you want to update, uncomment the "http://..." line below,
# edit it to point to the current version URL, comment out the
# "versions.cfg" line and run "bin/buildout" while attached to the
# Internet. Generally, you only want to do that as part of a planned migration.
# Note that if you are updating components, you should also check the versions
# section at the end of this file, since recipes or components other than
# those of Zope and Plone may need updating at the same time.
#
extends =
    base.cfg
    versions.cfg
# If you change your Plone version, you'll also need to update
# the repository below.
find-links +=
    http://dist.plone.org/release/4.1.6
############################################
# Ports
# -----
# Specify the ports on which your Zope installation
# will listen.
# ZEO Server
zeo-address = 127.0.0.1:8000
# Zope client 1
http-address = 8001
# Additional clients:
client2-address = 8002
client3-address = 8003
client4-address = 8004
# If you try to start Zope as root, it will change user id to run as
# the effective user specified here. This user id must own the var directory
# of your buildout.
effective-user = admin
############################################
# Eggs
# ----
# Add an indented line to the eggs section for any Python
# eggs or packages you wish to include.
#
eggs =
    Plone
    Pillow
############################################
# Optional Functionality
# ----------------------
# Uncomment the indented lines to include these products.
# Documentation on all of them, along with many more products,
# is available at
#
# Example products:
# * LinguaPlone provides tools for building multi-lingual sites
# * PloneFormGen provides through-the-web form building
#
#    Products.LinguaPlone==4.1.1
#    Products.PloneFormGen==1.7.0
#
# Note that versions may be specified here or in the [versions]
# section below. You should always specify versions that you know
# are compatible with the Plone release and at an acceptable
# development level.
#
# Commonly used development tools:
# Several excellent development tools are included in the develop.cfg
# buildout extension. Read it to learn how to activate these tools.
############################################
# ZCML Slugs
# ----------
# Some eggs need ZCML slugs to tell Zope to
# use them. Eggs with names beginning with "Products."
# usually don't need this.
zcml =
#    plone.reload
############################################
# Development Eggs
# ----------------
# You can use paster to create "development eggs" to
# develop new products/themes. Put these in the src/
# directory.
# You will also need to add the egg names in the
# eggs section above, and may also need to add them
# to the zcml section.
#
# Provide the *paths* to the eggs you are developing here:
develop =
#    src/my.package
############################################
# Debug Mode
# ----------
# Change debug-mode to "on" to run in development mode.
#
debug-mode = off
# Add-on developers should turn deprecation warnings on
deprecation-warnings = off
# change verbose-security to "on" for useful security errors while developing
verbose-security = off
############################################
# Backup Directory
# ----------------
# Sets the target directory for the bin/backup and bin/snapshotbackup
# commands. Default is inside this project's var directory, but ideally
# this should be on a separate volume or backup server.
#
backups-dir=${buildout:directory}/var
############################################
# Environment Variables
# ---------------------
# Some of the behavior of your Zope/Plone instances are controlled with OS
# environment variables. You may set those here in a key / value format.
# Some common settings:
#    * TZ allows you to set a time zone for systems where it's not
#      automatically available.
#    * zope_i18n_compile_mo_files allows for automatic compilation of
#      missing translation files (may slow startup).
#    * zope_i18n_allowed_languages allows you to limit the available
#      translations.
#    * PYTHON_EGG_CACHE determines where zipped python packages are unpacked
#      for use.
environment-vars =
    zope_i18n_compile_mo_files true
    PYTHON_EGG_CACHE ${buildout:directory}/var/.python-eggs
    PYTHONHASHSEED random
    #    TZ US/Eastern
    #    zope_i18n_allowed_languages en es de fr
############################################
# Initial User
# ------------
# This is the user id and password that will be used to create the initial
# user id that will allow you to log in and create a Plone site. This only
# sets the initial password; it will not allow you to change an already
# existing password. If you change the admin password via the web interface,
# the one below will no longer be valid.
# If you find yourself locked out of your Zope/Python installation, you may
# add an emergency user via "bin/plonectl client1 client2 client3 adduser".
user=admin:admin
############################################
# Parts Specification
# -------------------
# Specifies the components that should be included in the buildout.
# All the basics are in the base.cfg extension; you may add your
# own if you need them at the end of this file.
parts =
    zeoserver
    client1 client2 client3 client4
    zopepy
    zopeskel
    unifiedinstaller
    backup
    chown-zeo
############################################
# Versions Specification
# ----------------------
# Version information supplied here will "pin" Python packages to a particular
# version number, even when you use the "newest" flag running buildout.
# Specifying versions for all packages is a good idea and can prevent
# accidental changes when you add new packages to your buildout.
# Note that versions specified here will override those specified earlier
# in the configuration, including those from the Plone and Zope version
# config files.
#
[versions]
ZopeSkel = 2.21.2
Cheetah = 2.2.1
Pillow = 1.7.7
Products.DocFinderTab = 1.0.5
collective.recipe.backup = 2.4
ordereddict = 1.1
plone.recipe.command = 1.1
plone.recipe.unifiedinstaller = 4.1

Base.cfg Completo

######################################################
# Base Configuration; used by both standalone and zeo,
# which extend it.
# ---------------------------------------------------
# Buildout instructions in this file are
# usually only changed by experienced developers.
#
# Beyond here there be dragons!
[buildout]
eggs-directory=../buildout-cache/eggs
download-cache=../buildout-cache/downloads
# Don't download new things unless needed to satisfy dependencies.
# Override this on the command line with the "-n" flag.
newest = false
# Pick final releases over newer development releases when it's
# possible to do so and still fulfil requirements. Note that explicit
# version specifications will override this preference.
prefer-final = true
versions = versions
# Add additional egg download sources here. dist.plone.org contains archives
# of Plone packages.
find-links =
    http://dist.plone.org
    http://download.zope.org/ppix/
    http://download.zope.org/distribution/
    http://effbot.org/downloads
# unzip all eggs for easier debugging
unzip = true
# Load the DumpPickedVersions extension, which will notify
# you of versions picked by buildout that were not specifically
# pinned.
extensions = buildout.dumppickedversions
[zopepy]
# installs a zopepy python interpreter that runs with your
# full Zope environment
recipe = zc.recipe.egg
eggs = ${buildout:eggs}
interpreter = zopepy
scripts = zopepy
[unifiedinstaller]
# This recipe installs the plonectl script and a few other convenience
# items.
recipe = plone.recipe.unifiedinstaller
user = ${buildout:user}
primary-port = ${buildout:http-address}
sudo-command = sudo -u admin
[repozo]
# This recipe builds the repozo script for non-zeo installations.
recipe = zc.recipe.egg
eggs = ZODB3
scripts = repozo
[backup]
# This recipe builds the backup, restore and snapshotbackup commands.
recipe = collective.recipe.backup
location = ${buildout:backups-dir}/backups
snapshotlocation = ${buildout:backups-dir}/snapshotbackups
[zeoserver]
# Use this section to install and configure a Zope
# Enterprise Objects server.
recipe = plone.recipe.zeoserver
zeo-address = ${buildout:zeo-address}
# if we try to start as root, Zope will switch to the user below
effective-user = ${buildout:effective-user}
# Put the log, pid and socket files in var/zeoserver
zeo-log     = ${buildout:directory}/var/zeoserver/zeoserver.log
pid-file    = ${buildout:directory}/var/zeoserver/zeoserver.pid
socket-name = ${buildout:directory}/var/zeoserver/zeo.zdsock
blob-storage = ${buildout:directory}/var/blobstorage
# You may also control the environment variables for the zeoserver.
environment-vars = ${buildout:environment-vars}
eggs = tempstorage
zeo-conf-additional =
     <filestorage mp001bd="">
       path ${buildout:directory}/var/filestorage/mp001BD.fs
       blob-dir ${buildout:directory}/var/blobstorage/mp001bd
     </filestorage>
     <filestorage mp002bd="">
       path ${buildout:directory}/var/filestorage/mp002BD.fs
       blob-dir ${buildout:directory}/var/blobstorage/mp002bd
     </filestorage>
     <filestorage mp003bd="">
       path ${buildout:directory}/var/filestorage/mp003BD.fs
       blob-dir ${buildout:directory}/var/blobstorage/mp003bd
     </filestorage>
    %import tempstorage
    <temporarystorage temp="">
       name temporary storage for sessioning
    </temporarystorage>
[chown-zeo]
# This recipe is used to set permissions for root mode installs
recipe = plone.recipe.command
command =
    echo Dummy references to force this to execute after referenced parts
    echo ${backup:location} ${unifiedinstaller:sudo-command}
    chmod 600 .installed.cfg
    touch ${buildout:directory}/var/zeoserver/zeoserver.log
    find ${buildout:directory}/var -type d -exec chmod 700 {} \;
    chmod 744 ${buildout:directory}/bin/*
    chmod 755 ${buildout:directory}/bin/python
    mkdir -pm 755 ${buildout:directory}/{products,src}
    mkdir -pm 755 ${buildout:directory}/var/blobstorage/mp00{1,2,3}bd/tmp
    chown -R ${buildout:effective-user} ${buildout:directory}/var
update-command = ${chown-zeo:command}
[zopeskel]
# installs paster and Zopeskel
recipe = zc.recipe.egg
eggs =
    ZopeSkel
    Paste
    PasteDeploy
    PasteScript
    ${buildout:eggs}
[client1]
# Use this section to install and configure a Zope
# client instance.
# Additional clients are a
recipe = plone.recipe.zope2instance
zeo-client = true
zeo-address = ${zeoserver:zeo-address}
# The line below sets only the initial password. It will not change an
# existing password.
user = ${buildout:user}
# if we try to start as root, Zope will switch to the user below
effective-user = ${buildout:effective-user}
http-address = ${buildout:http-address}
icp-address = ${buildout:http-address}
blob-storage = ${zeoserver:blob-storage}
shared-blob = on
# change debug-mode to "on" to run in development mode
debug-mode = ${buildout:debug-mode}
# change verbose-security to "on" for detailed security
# errors while developing
verbose-security = ${buildout:verbose-security}
deprecation-warnings = ${buildout:deprecation-warnings}
# Put the log, pid, lock files in var/client1
event-log = ${buildout:directory}/var/client1/event.log
z2-log    = ${buildout:directory}/var/client1/Z2.log
pid-file  = ${buildout:directory}/var/client1/client1.pid
lock-file = ${buildout:directory}/var/client1/client1.lock
# If you want Zope to know about any additional eggs, list them here.
# e.g. eggs = ${buildout:eggs} my.package
eggs = ${buildout:eggs}
# If you want to register ZCML slugs for any packages, list them here.
# e.g. zcml = my.package my.other.package
zcml = ${buildout:zcml}
    
products = ${buildout:directory}/products
# You may also control the environment variables for the instance.
environment-vars = ${buildout:environment-vars}
zope-conf-additional =
        <zodb_db mp001bd="">
         mount-point /mp001bd
         cache-size 5000
         <zeoclient>
             blob-dir ${buildout:directory}/var/blobstorage/mp001bd
             shared-blob-dir on
             name mp001bd
             server ${buildout:zeo-address}
             storage mp001bd
             var ${buildout:directory}/var
         </zeoclient>        
        </zodb_db>
        <zodb_db mp002bd="">
         mount-point /mp002bd
         cache-size 5000
         <zeoclient>
             blob-dir ${buildout:directory}/var/blobstorage/mp002bd
             shared-blob-dir on
             name mp002bd
             server ${buildout:zeo-address}
             storage mp001bd
             var ${buildout:directory}/var
         </zeoclient>        
        </zodb_db>
        <zodb_db mp003bd="">
         mount-point /mp003bd
         cache-size 5000
         <zeoclient>
             blob-dir ${buildout:directory}/var/blobstorage/mp003bd
             shared-blob-dir on
             name mp003bd
             server ${buildout:zeo-address}
             storage mp003bd
             var ${buildout:directory}/var
         </zeoclient>        
        </zodb_db>
zodb-temporary-storage =
        <zodb_db temporary="">
            <zeoclient>
              server ${buildout:zeo-address}
              storage temp
              name zeostorage
              var ${buildout:directory}/var
            </zeoclient>
            mount-point /temp_folder
            container-class Products.TemporaryFolder.TemporaryContainer
        </zodb_db>
[client2]
# a copy of client1, except adjusted address and var location
<= client1
http-address = ${buildout:client2-address}
icp-address = ${buildout:client2-address}
event-log = ${buildout:directory}/var/client2/event.log
z2-log    = ${buildout:directory}/var/client2/Z2.log
pid-file  = ${buildout:directory}/var/client2/client2.pid
lock-file = ${buildout:directory}/var/client2/client2.lock
[client3]
# a copy of client1, except adjusted address and var location
<= client1
http-address = ${buildout:client3-address}
icp-address = ${buildout:client3-address}
event-log = ${buildout:directory}/var/client3/event.log
z2-log    = ${buildout:directory}/var/client3/Z2.log
pid-file  = ${buildout:directory}/var/client3/client3.pid
lock-file = ${buildout:directory}/var/client3/client3.lock
[client4]
# a copy of client1, except adjusted address and var location
<= client1
http-address = ${buildout:client4-address}
icp-address = ${buildout:client4-address}
event-log = ${buildout:directory}/var/client4/event.log
z2-log    = ${buildout:directory}/var/client4/Z2.log
pid-file  = ${buildout:directory}/var/client4/client4.pid
lock-file = ${buildout:directory}/var/client4/client4.lock
[unicode]
recipe = plone.recipe.command
update-command = ${unicode:command}
command =
   cat > ${buildout:directory}/lib/python2.6/site-packages/sitecustomize.py << EOF
   import sys
   sys.setdefaultencoding('utf-8')
   EOF
Rolar para cima