{"id":320,"date":"2012-08-09T14:08:03","date_gmt":"2012-08-09T17:08:03","guid":{"rendered":"http:\/\/linuxrs.com.br\/?p=320"},"modified":"2012-08-09T14:08:03","modified_gmt":"2012-08-09T17:08:03","slug":"cms-plone-4-1-6-com-involucro-virtualenv-buildout-mount-point-blob-storage-unicode-utf-8","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=320","title":{"rendered":"CMS Plone 4.1.6 com inv\u00f3lucro Virtualenv + Buildout + Mount Point + BLOB Storage + Unicode UTF-8"},"content":{"rendered":"<table width=\"100%\" border=\"0\" cellspacing=\"3\" cellpadding=\"3\">\n<tbody>\n<tr>\n<td colspan=\"2\"><strong>Introdu\u00e7\u00e3o &#8211; Escopo &#8211; Depend\u00eancias<\/strong><\/p>\n<div>Segundo <a href=\"http:\/\/plone.org\/\">plone.org<\/a>, o Plone 4 \u00e9 a vers\u00e3o mais r\u00e1pida, poderosa e bela. O state-of-the-art do <em>CMS Plone<\/em>.<\/p>\n<div><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/img.vivaolinux.com.br\/imagens\/artigos\/comunidade\/1343761902.logo.png\" alt=\"Linux: CMS Plone 4.1.6 com inv\u00f3lucro virtualenv + buildout + mount point + BLOB storage + Unicode UTF-8\" width=\"215\" height=\"56\" \/><\/div>\n<p>O Plone, tamb\u00e9m conhecido por PZP \u2013 Python\/Zope\/Plone &#8211; Assim chamado pela forma\u00e7\u00e3o do ambiente que envolve a linguagem de programa\u00e7\u00e3o interpretada <em>Python<\/em>, o framework para desenvolvimento Web Zope e o CMS \u2013 Content Management System \u2013 Plone.<\/p>\n<p>O Plone est\u00e1 entre os CMS com menor \u00edndice de falhas de seguran\u00e7a, possui v\u00e1rias funcionalidades t\u00e9cnicas que podem ser comparadas com outros CMS na URL:<\/p>\n<ul>\n<li><a href=\"http:\/\/cmsmatrix.org\/matrix\/cms-matrix\/plone\">http:\/\/cmsmatrix.org\/matrix\/cms-matrix\/plone<\/a><\/li>\n<\/ul>\n<p>E de acordo com a pesquisa apresentada pela IBM, em Manyeyes, foi o CMS que apresentou menos vulnerabilidades.<\/p>\n<p>Trata-se de uma plataforma para gerenciamento de diversos tipos de conte\u00fado sem que sejam necess\u00e1rios conhecimentos t\u00e9cnicos em rela\u00e7\u00e3o \u00e0 estrutura codificada da plataforma.<\/p>\n<p>Com o CMS Plone, pode-se construir um site completo, com diversas funcionalidades, sem a necessidade da constru\u00e7\u00e3o de c\u00f3digos complexos em linguagem de programa\u00e7\u00e3o.<\/p>\n<p>O Plone abre espa\u00e7o para customiza\u00e7\u00e3o de sua apar\u00eancia e estrutura de navega\u00e7\u00e3o, al\u00e9m de possibilitar personaliza\u00e7\u00e3o do site atrav\u00e9s da escolha de cores, imagens e posicionamentos de diversos componentes, que agora incluem Gadgets.<\/p>\n<p>Em um n\u00edvel mais avan\u00e7ado, a utiliza\u00e7\u00e3o do Plone d\u00e1 conta da implementa\u00e7\u00e3o de novas funcionalidades por parte de desenvolvedores de softwares, que podem ser agregadas \u00e0 estrutura j\u00e1 existente, como sistemas de diret\u00f3rios (AD\/LDAP), <em>Samba<\/em>, e outros recursos estruturais.<\/p>\n<p>O que \u00e9 o Plone?<\/p>\n<p>O Plone, classificado como um Sistema Gerenciador de Conte\u00fado, ou popularmente chamado pelo acr\u00f4nimo em Ingl\u00eas CMS \u2013 Content Management System &#8211; \u00e9 um software livre e de c\u00f3digo aberto.<\/p>\n<p>Possui incorporado, um sistema de workflow, diretivas de seguran\u00e7a e fun\u00e7\u00f5es pr\u00e9-configuradas, metadados para tipos conte\u00fado e suporte para m\u00faltiplos idiomas.<\/p>\n<p>Al\u00e9m disto, desenvolvedores e testadores de todo o mundo contribuem com a sua constru\u00e7\u00e3o e melhoria.<\/p>\n<p>O que pode ser feito com o Plone?<\/p>\n<ul>\n<li>Criar sites facilmente;<\/li>\n<li>Gerenciar todo o conte\u00fado do site atrav\u00e9s de uma interface amig\u00e1vel;<\/li>\n<li>Delegar subtarefas em \u00e1reas especificas do s\u00edtio sem comprometer a escalabilidade e a seguran\u00e7a;<\/li>\n<li>Criar e organizar conte\u00fado de forma colaborativa atrav\u00e9s de um fluxo de trabalho;<\/li>\n<li>Personalizar do aspecto visual b\u00e1sico do site atrav\u00e9s de interface intuitiva;<\/li>\n<li>Divulgar not\u00edcias, feed, eventos e links;<\/li>\n<li>Publicar fotos, arquivos e v\u00eddeos;<\/li>\n<li>Organizar hierarquicamente seu conte\u00fado atrav\u00e9s de menus de navega\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>Quais recursos s\u00e3o oferecidos pelo Plone?<\/p>\n<ul>\n<li>Cria\u00e7\u00e3o e manuten\u00e7\u00e3o de conte\u00fado;<\/li>\n<li>Todo gerenciamento de conte\u00fado realizado atrav\u00e9s do navegador Web;<\/li>\n<li>Gerenciamento de usu\u00e1rios com n\u00edveis hier\u00e1rquicos;<\/li>\n<li>Fluxo de publica\u00e7\u00e3o colaborativa de conte\u00fado (workflow);<\/li>\n<li>Gera\u00e7\u00e3o autom\u00e1tica de infraestrutura de navega\u00e7\u00e3o;<\/li>\n<li>Mecanismo de busca avan\u00e7ada;<\/li>\n<li>Possibilidade de cria\u00e7\u00e3o de portais de Internet ou Intranet;<\/li>\n<li>Cria\u00e7\u00e3o de blog corporativo;<\/li>\n<li>Ferramentas colaborativas para groupware;<\/li>\n<li>Reposit\u00f3rio de conte\u00fados como imagens, documentos e v\u00eddeos;<\/li>\n<li>Agendamento e divulga\u00e7\u00e3o de eventos;<\/li>\n<li>Galeria de imagens;<\/li>\n<li>\u00c1rea integrada de not\u00edcias;<\/li>\n<li>Seguran\u00e7a e integridade dos dados;<\/li>\n<li>Suporte a internacionaliza\u00e7\u00e3o.<\/li>\n<\/ul>\n<h1>Escopo<\/h1>\n<p>O escopo de customiza\u00e7\u00e3o est\u00e1 limitado ao seguinte ambiente:<\/p>\n<ul>\n<li>Sistema Operacional GNU\/Linux: <a href=\"http:\/\/distrowatch.com\/\">Distrowatch<\/a><\/li>\n<li>Plone-4.1.6-UnifiedInstaller: <a href=\"https:\/\/launchpad.net\/plone\/4.1\/4.1.6\/+download\/Plone-4.1.6-UnifiedInstaller-20120708.tgz\">https:\/\/launchpad.net\/plone &#8211; Download<\/a><\/li>\n<li>Plone.app.blob<\/li>\n<li>plone.app.blob-1.5.2 via buildout em modo ZEO<\/li>\n<\/ul>\n<p>O Plone 4.1.6, \u00e9 a ultima revis\u00e3o est\u00e1vel da vers\u00e3o 4.1, e possui os seguintes pacotes incorporados e respectivas vers\u00f5es:<\/p>\n<ul>\n<li>packages\/buildout-cache.tar.bz2<\/li>\n<li>packages\/distribute-0.6.19.tar.gz<\/li>\n<li>packages\/issue12012-sslv2.txt<\/li>\n<li>packages\/issue9670-v2.txt<\/li>\n<li>packages\/jpegsrc.v8c.tar.bz2<\/li>\n<li>packages\/multiarch-patch.txt<\/li>\n<li>packages\/Python-2.6.8.tar.bz2<\/li>\n<li>packages\/readline-6.2.tar.bz2<\/li>\n<li>packages\/virtualenv-1.6.1.tar.bz2<\/li>\n<li>packages\/zlib-1.2.5.tar.bz2<\/li>\n<\/ul>\n<h1>Depend\u00eancias<\/h1>\n<p>Considerando que, o sistema operacional esteja instalado e configurado corretamente, execute:<\/p>\n<p><em>Debian Like<\/em>:<\/p>\n<p><strong>$ sudo aptitude install build-essential libssl-dev<\/strong><\/p>\n<p><em>Red Hat Like<\/em>:<\/p>\n<p><strong>$ sudo yum install gcc cpp gcc-c++ make openssl-devel<\/strong><\/p>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><strong>PZP &#8211; Virtualenv &#8211; Buildout<\/strong><\/p>\n<div>\n<h1>Instala\u00e7\u00e3o do PZP<\/h1>\n<p>Nesta etapa, cria-se o inv\u00f3lucro completamente independente do sistema operacional, para que o ambiente n\u00e3o sofra quebra de configura\u00e7\u00e3o devido \u00e0s atualiza\u00e7\u00f5es de seguran\u00e7a, ou afins.<\/p>\n<p>O inv\u00f3lucro &#8220;\/opt\/p416&#8221;, conter\u00e1 todos os programas necess\u00e1rios para funcionamento do ambiente PZP, incluindo zlib, JPEG, Python e as demais depend\u00eancias.<\/p>\n<p>Baixe e descompacte, primeiramente, o Plone-4.1.6-UnifiedInstaller:<\/p>\n<p><strong># wget<\/strong> <a href=\"https:\/\/launchpad.net\/plone\/4.1\/4.1.6\/+download\/Plone-4.1.6-UnifiedInstaller-20120708.tgz\">https:\/\/launchpad.net\/plone\/4.1\/4.1.6\/+download\/Plone-4.1.6-UnifiedInstaller-20120708.tgz<\/a><br \/>\n<strong># tar xvzf ~\/Downloads\/Plone-4.1.6-UnifiedInstaller-20120708.tgz -C \/tmp\/<br \/>\n# cd \/tmp\/Plone-4.1.6-UnifiedInstaller<br \/>\n# .\/install.sh zeo &#8211;zlib=local &#8211;jpeg=local &#8211;user=admin &#8211;password=admin &#8211;target=\/opt\/p416 &#8211;clients=4 &#8211;instance=modelo<\/strong><\/p>\n<p>As op\u00e7\u00f5es do comando <em>install.sh<\/em>, informam que a instala\u00e7\u00e3o \u00e9 modo <em>zeo<\/em>, sendo que as bibliotecas &#8220;zlib&#8221; e &#8220;jpeg&#8221;, ser\u00e3o locais, o usu\u00e1rio admin e senha admin, no diret\u00f3rio &#8220;\/opt\/p416&#8221;, com 4 clientes <em>zope<\/em> e o nome do cluster modelo.<\/p>\n<h1>Virtualenv<\/h1>\n<p>Nesta etapa, instala-se o ambiente virtual, do ingl\u00eas <em>Virtual Environment<\/em>, sob acr\u00f4nimo Virtualenv.<\/p>\n<p>O Virtualenv possibilita a utiliza\u00e7\u00e3o de um encapsulamento de subinst\u00e2ncias Python, que permite a total personaliza\u00e7\u00e3o, sem a modifica\u00e7\u00e3o da instala\u00e7\u00e3o principal.<\/p>\n<p>O ambiente Plone a partir da vers\u00e3o 3, j\u00e1 vem disponibilizado o <em>easy_install<\/em>, que \u00e9 instalador para m\u00f3dulos Python, o qual ser\u00e1 usado neste artigo.<\/p>\n<p><strong># cd \/opt\/p416\/<br \/>\n# .\/Python-2.6\/bin\/easy_install virtualenv<\/strong><\/p>\n<p>Para melhor entendimento, com a finalidade de organiza\u00e7\u00e3o, o diret\u00f3rio <em>app<\/em> (applications), conter\u00e1 todos os ambientes criados.<\/p>\n<p>Agora, cria-se o ambiente virtual, da seguinte forma:<\/p>\n<p><strong># .\/Python-2.6\/bin\/virtualenv app\/env001<\/strong><\/p>\n<h1>Buildout<\/h1>\n<p><em>Buildout<\/em> \u00e9 uma ferramenta <em>Open Source<\/em> de constru\u00e7\u00e3o de softwares, desenvolvida utilizando-se da linguagem de programa\u00e7\u00e3o Python, para fornecer suporte \u00e0 cria\u00e7\u00e3o de inst\u00e2ncias de aplica\u00e7\u00f5es, principalmente \u00e0quelas escritas em Python.<\/p>\n<p>O Buildout fornece ferramentas para cria\u00e7\u00e3o de aplica\u00e7\u00f5es atrav\u00e9s segmentos, denominados <em>parts<\/em>, que podem ser m\u00f3dulos Python, servidores Web, servidores de aplica\u00e7\u00e3o e qualquer elemento de aplica\u00e7\u00e3o para infraestrutura.<\/p>\n<p>H\u00e1 como configurar o buildout para utilizar os arquivos de configura\u00e7\u00e3o diretamente pela Web, mas deste artigo, usaremos o modelo da pr\u00f3pria estrutura do inv\u00f3lucro.<\/p>\n<p><strong># cp -vf modelo\/*.{py,cfg} app\/env001\/<\/strong><\/p>\n<p>Os seguintes arquivos ser\u00e3o copiados:<\/p>\n<ul>\n<li>modelo\/bootstrap.py<\/li>\n<li>modelo\/base.cfg<\/li>\n<li>modelo\/buildout.cfg<\/li>\n<li>modelo\/develop.cfg<\/li>\n<li>modelo\/lxml_static.cfg<\/li>\n<li>modelo\/versions.cfg<\/li>\n<li>modelo\/zopeapp-versions.cfg<\/li>\n<li>modelo\/zope-versions.cfg<\/li>\n<li>modelo\/ztk-versions.cfg<\/li>\n<\/ul>\n<h1>Configura\u00e7\u00e3o:<\/h1>\n<p><strong># cd app\/env001\/<br \/>\n# vim buildout.cfg<\/strong><\/p>\n<p>Para personalizar as portas, localize o trecho a seguir, no arquivo <em>buildout.cfg<\/em>:<\/p>\n<blockquote><p># Ports<br \/>\n# &#8212;&#8211;<br \/>\n# Specify the ports on which your Zope installation<br \/>\n# will listen.<br \/>\n# ZEO Server<br \/>\nzeo-address = 127.0.0.1:8100<br \/>\n# Zope client 1<br \/>\nhttp-address = 8080<br \/>\n# Additional clients:<br \/>\nclient2-address = 8081<\/p><\/blockquote>\n<p>E modifique para as portas desejadas, tal como exemplo, <em>zeo<\/em> aceitando apenas conex\u00f5es locais na porta 8100, e os clientes <em>zope<\/em>, rodando nas portas 8101 e 8102 respectivamente.<\/p>\n<div># Ports<br \/>\n# &#8212;&#8211;<br \/>\n# Specify the ports on which your Zope installation<br \/>\n# will listen.<br \/>\n# ZEO Server<br \/>\nzeo-address = 127.0.0.1:8100<br \/>\n# Zope client 1<br \/>\nhttp-address = 8101<br \/>\n# Additional clients:<br \/>\nclient2-address = 8102<\/div>\n<p>No Plone 4, tamb\u00e9m faz-se necess\u00e1rio modificar algumas permiss\u00f5es, e criar alguns diret\u00f3rios para o bom funcionamento do ambiente.<\/p>\n<p>Fa\u00e7amos pelo <em>buildout<\/em>, no arquivo <em>base.cfg<\/em>.<\/p>\n<div>[chown-zeo]<br \/>\n# This recipe is used to set permissions for root mode installs<br \/>\n# For options see http:\/\/pypi.python.org\/pypi\/plone.recipe.command<br \/>\nrecipe = plone.recipe.command<br \/>\ncommand =<br \/>\necho Dummy references to force this to execute after referenced parts<br \/>\necho ${backup:location} ${unifiedinstaller:sudo-command}<br \/>\nchmod 600 .installed.cfg<br \/>\ntouch ${buildout:directory}\/var\/zeoserver\/zeoserver.log<br \/>\nfind ${buildout:directory}\/var -type d -exec chmod 700 {} \\;<br \/>\nchmod 744 ${buildout:directory}\/bin\/*<br \/>\nupdate-command = ${chown-zeo:command}<\/div>\n<p>Acrescente o trecho que compreende as linhas 109 a 111, como abaixo:<\/p>\n<div>[chown-zeo]<\/p>\n<p>chmod 744 ${buildout:directory}\/bin\/*<br \/>\nchmod 755 ${buildout:directory}\/bin\/python<br \/>\nmkdir -pm 755 ${buildout:directory}\/{products,src}<br \/>\nchown -R ${buildout:effective-user} ${buildout:directory}\/var<br \/>\nupdate-command = ${chown-zeo:command}<\/p><\/div>\n<h1>Instala\u00e7\u00e3o<\/h1>\n<p>Considerando que esteja no diret\u00f3rio <em>\/opt\/p416\/app\/env001\/<\/em>, execute os comandos abaixo:<\/p>\n<p><strong># mkdir -pv ..\/buildout-cache\/{eggs,downloads}<br \/>\n# export http_proxy=http:\/\/10.1.101.101:8080<\/strong><\/p>\n<p>Obs.: Se houver proxy na rede, coloque o IP e porta do proxy<\/p>\n<p><strong># .\/bin\/python bootstrap.py<\/strong><\/p>\n<p>A etapa tr\u00eas pode ser substitu\u00edda por:<\/p>\n<p><strong># cp -va \/opt\/p416\/buildout-cache\/ \/opt\/p416<\/strong><\/p>\n<p>Ou:<\/p>\n<p><strong># ln -sv \/opt\/p416\/buildout-cache\/ \/opt\/p416<\/strong><\/p>\n<p>O objetivo desta substitui\u00e7\u00e3o, \u00e9 simplificar o processo de download dos m\u00f3dulos <em>eggs<\/em>, que j\u00e1 foram baixados quando o modelo foi criado.<\/p>\n<p>* Lembrando que, \u00e9 opcional a substitui\u00e7\u00e3o, restando para tanto, o novo downloads dos m\u00f3dulos eggs.<\/p>\n<p><strong># .\/bin\/buildout -v -t 30<\/strong><\/p>\n<p>Onde:<\/p>\n<ul>\n<li><em>-v<\/em> : Incrementa o n\u00edvel de detalhamento;<\/li>\n<li><em>-t 30<\/em> : Define o timeout em 30s para cada reposit\u00f3rio.<\/li>\n<\/ul>\n<p>Faz-se necess\u00e1rio executar o comando:<\/p>\n<p><strong># .\/bin\/buildout<\/strong><\/p>\n<p>&#8230;Para cada atualiza\u00e7\u00e3o realizada no ambiente.<\/p>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><strong>Mount point<\/strong><\/p>\n<div>O <em>Moint Point<\/em> n\u00e3o necessita de instala\u00e7\u00e3o, pois \u00e9 apenas um recurso de configura\u00e7\u00e3o do ZODB (Zope Object Data Base), em modo ZEO (Zope Enterprise Objects), que permite utiliza\u00e7\u00e3o de m\u00faltiplos arquivos &#8220;.fs&#8221;, na mesma inst\u00e2ncia.<\/p>\n<p>O ZEO com Mount Point ativado, funciona como um SGBD (Sistema Gerenciador de Banco de Dados), que gerencia acessos concorrentes, a m\u00faltiplas bases de dados em um SGBD relacional, tais como PostgreSQL, Oracle, MySQL e MSSQL Server.<\/p>\n<p>No artigo: Brito: Plone 3.3.5 + buildout + mount point, destaquei onde deve ser modificado no arquivo <em>buildout.cfg<\/em>, e algumas premissas que deve ser contempladas, ou melhor tomadas por regras.<\/p>\n<p>Entre as premissas, destaca-se usar algo que identifique a aplica\u00e7\u00e3o adequadamente, e nomes com as regras abaixo, que funcionam com louvor.<\/p>\n<ul>\n<li>Letras min\u00fasculas (caixa baixa);<\/li>\n<li>N\u00e3o utilizar caracteres especiais;<\/li>\n<li>N\u00e3o utilizar tra\u00e7o(-).<\/li>\n<\/ul>\n<h1>Vantagens<\/h1>\n<p>Como toda solu\u00e7\u00e3o, h\u00e1 vantagens e desvantagens. A vantagem em rela\u00e7\u00e3o \u00e0 configura\u00e7\u00e3o sem Mount Point, est\u00e1 na hora de recuperar o backup de apenas uma das aplica\u00e7\u00f5es, que neste caso, \u00e9 pontual, e bastante facilitada com o <em>repozo<\/em>, aplica\u00e7\u00e3o que j\u00e1 comp\u00f5e a estrutura.<\/p>\n<p>Minimiza o tempo de ociosidade dos processos PZP, pois uma instancia serve v\u00e1rios Plone sites.<\/p>\n<h1>Desvantagens<\/h1>\n<p>Realizar o backup individual em cada arquivo.<\/p>\n<h1>Configura\u00e7\u00e3o<\/h1>\n<p>Diferentemente do Plone 3, o Plone 4 possui uma gama de novos arquivos, e uma nova estrutura de configura\u00e7\u00e3o, e as altera\u00e7\u00f5es para <em>Mount Point ZEO<\/em>, dever\u00e3o ser realizadas no arquivo &#8220;base.cfg&#8221;.<\/p>\n<p><strong># vim base.cfg<\/strong><\/p>\n<p>No trecho do [zeoserver], aproximadamente na linha 81, como segue abaixo:<\/p>\n<div>[zeoserver]<br \/>\n# Use this section to install and configure a Zope<br \/>\n# Enterprise Objects server.<br \/>\n# For options see http:\/\/pypi.python.org\/pypi\/plone.recipe.zeoserver<br \/>\nrecipe = plone.recipe.zeoserver<br \/>\nzeo-address = ${buildout:zeo-address}<br \/>\n# if we try to start as root, Zope will switch to the user below<br \/>\neffective-user = ${buildout:effective-user}<br \/>\n# Put the log, pid and socket files in var\/zeoserver<br \/>\nzeo-log = ${buildout:directory}\/var\/zeoserver\/zeoserver.log<br \/>\npid-file = ${buildout:directory}\/var\/zeoserver\/zeoserver.pid<br \/>\nsocket-name = ${buildout:directory}\/var\/zeoserver\/zeo.zdsock<br \/>\nblob-storage = ${buildout:directory}\/var\/blobstorage<br \/>\n# You may also control the environment variables for the zeoserver.<br \/>\nenvironment-vars = ${buildout:environment-vars}<\/div>\n<p>Acrescenta-se a diretiva &#8220;zeo-conf-additional&#8221; ao final da sess\u00e3o, para incrementar o filestorage do ZEO, como abaixo.<\/p>\n<div>[zeoserver]<\/p>\n<p>eggs = tempstorage<\/p>\n<p>zeo-conf-additional =<\/p>\n<p>path ${buildout:directory}\/var\/filestorage\/mp001BD.fs<\/p>\n<p>path ${buildout:directory}\/var\/filestorage\/mp002BD.fs<\/p>\n<p>path ${buildout:directory}\/var\/filestorage\/mp003BD.fs<\/p>\n<p>%import tempstorage<\/p>\n<p>name temporary storage for sessioning<\/p><\/div>\n<p>No trecho do [client1], aproximadamente na linha 129, como segue abaixo:<\/p>\n<div>[client1]<br \/>\n# Use this section to install and configure a Zope<br \/>\n# client instance.<br \/>\n# For options see http:\/\/pypi.python.org\/pypi\/plone.recipe.zope2instance<br \/>\n# Additional clients are a<br \/>\nrecipe = plone.recipe.zope2instance<br \/>\nzeo-client = true<br \/>\nzeo-address = ${zeoserver:zeo-address}<br \/>\n# The line below sets only the initial password. It will not change an<br \/>\n# existing password.<br \/>\nuser = ${buildout:user}<br \/>\n# if we try to start as root, Zope will switch to the user below<br \/>\neffective-user = ${buildout:effective-user}<br \/>\n\\ http-address = ${buildout:http-address}<br \/>\nblob-storage = ${zeoserver:blob-storage}<br \/>\nshared-blob = on<br \/>\n# change debug-mode to &#8220;on&#8221; to run in development mode<br \/>\ndebug-mode = ${buildout:debug-mode}<br \/>\n# change verbose-security to &#8220;on&#8221; for detailed security<br \/>\n# errors while developing<br \/>\nverbose-security = ${buildout:verbose-security}<br \/>\ndeprecation-warnings = ${buildout:deprecation-warnings}<br \/>\n# Put the log, pid, lock files in var\/client1<br \/>\nevent-log = ${buildout:directory}\/var\/client1\/event.log<br \/>\nz2-log = ${buildout:directory}\/var\/client1\/Z2.log<br \/>\npid-file = ${buildout:directory}\/var\/client1\/client1.pid<br \/>\nlock-file = ${buildout:directory}\/var\/client1\/client1.lock<\/p>\n<p># If you want Zope to know about any additional eggs, list them here.<br \/>\n# e.g. eggs = ${buildout:eggs} my.package<br \/>\neggs = ${buildout:eggs}<\/p>\n<p># If you want to register ZCML slugs for any packages, list them here.<br \/>\n# e.g. zcml = my.package my.other.package<br \/>\nzcml = ${buildout:zcml}<\/p>\n<p>products = ${buildout:directory}\/products<\/p>\n<p># You may also control the environment variables for the instance.<br \/>\nenvironment-vars = ${buildout:environment-vars}<\/p><\/div>\n<p>Acrescenta-se a diretiva &#8220;zope-conf-additional&#8221; ao final da sess\u00e3o, para incrementar o filestorage do ZEO, como abaixo.<\/p>\n<div id=\"forumCodeDiv\">\n<div id=\"highlighter_772873\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>\n<div><code>[client1]<\/code><\/div>\n<div><\/div>\n<div><code>zope-conf-additional =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zodb_db mp001bd=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>mount<\/code><code>-point <\/code><code>\/mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>cache-size 5000<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zeoclient&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>name mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>server ${buildout:zeo-address}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>storage mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>var ${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zeoclient<\/code><code>&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zodb_db<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zodb_db mp002bd=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>mount<\/code><code>-point <\/code><code>\/mp002bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>cache-size 5000<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zeoclient&gt; <\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>name mp002bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>server ${buildout:zeo-address}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>storage mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>var ${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zeoclient<\/code><code>&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zodb_db<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zodb_db mp003bd=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>mount<\/code><code>-point <\/code><code>\/mp003bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>cache-size 5000<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zeoclient&gt; <\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>name mp003bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>server ${buildout:zeo-address}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>storage mp003bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>var ${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zeoclient<\/code><code>&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zodb_db<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div><code>\u00a0<\/code><code>zodb-temporary-storage =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zodb_db temporary=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zeoclient&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>server ${buildout:zeo-address}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>storage temp<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>name zeostorage<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>var ${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zeoclient<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>mount<\/code><code>-point <\/code><code>\/temp_folder<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>container-class Products.TemporaryFolder.TemporaryContainer<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zodb_db<\/code><code>&gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Salve feche o arquivo, e execute o <em>buildout<\/em> novamente, e a sequ\u00eancia seguinte:<\/p>\n<p><strong># .\/bin\/buildout -v -t 30<br \/>\n# .\/bin\/buildout -v -t 30<br \/>\n# .\/bin\/plonectl stop<br \/>\n# .\/bin\/plonectl start<\/strong><\/p>\n<p>Agora, no navegador:<\/p>\n<ol>\n<li>Acesse: http:\/\/ip.do.serv:8101\/manage<\/li>\n<li>Entre com o usu\u00e1rio e senha (admin e admin);<\/li>\n<li>Localize a combobox com o texto ATContentTipes tool;<\/li>\n<li>Nesta combobox, selecione ZODB Mount Point;<\/li>\n<li>Na p\u00e1gina seguinte: Add ZODB Mount Points, selecione os Mount Points desejados e clique no bot\u00e3o: Create selected mount points;<\/li>\n<li>Com esta a\u00e7\u00e3o ser\u00e1 criado um diret\u00f3rio na raiz do ambiente, o qual mapeia a estrutura configurada anteriormente.<\/li>\n<\/ol>\n<p>Obs.: A op\u00e7\u00e3o <em>restart<\/em>, pode n\u00e3o funcionar adequadamente, por esta raz\u00e3o, recomendo executar o <em>stop<\/em> e <em>start<\/em>, nos passos 3 e 4.<\/p>\n<p>Se por ventura n\u00e3o aplicar a mudan\u00e7a, ou demorar demasiadamente, suba uma das instancias em modo foreground:<\/p>\n<p><strong>.\/bin\/client1 fg<\/strong><\/p>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><strong>BLOB Storage<\/strong><\/p>\n<div>O <em>Binary Large OBject<\/em>, identificado por seu acr\u00f4nimo, BLOB, s\u00e3o tipicamente identificados por imagens, \u00e1udio ou outros objetos multim\u00eddia de grande volume.<\/p>\n<p>Usualmente, as Base de Dados n\u00e3o suportam BLOBs. Este pacote \u00e9 um complemento para o Plone, a partir da release Plone 3.0.4, que permite a integra\u00e7\u00e3o de BLOB com ZODB 3,8; possibilitando que os dados bin\u00e1rios sejam geridos pelo ZODB, mas separadamente do seu habitual FileStorage (Data.fs) de armazenamento para o banco de dados.<\/p>\n<p>Isto tem v\u00e1rias vantagens, sobretudo, uma redu\u00e7\u00e3o real do FileStorage (Data.fs) e melhor desempenho tanto das CPU&#8217;s, quanto em otimiza\u00e7\u00e3o de mem\u00f3ria RAM.<\/p>\n<p>O Zope trabalha com BLOB&#8217;s, atrav\u00e9s do pacote <em>plone.app.blob<\/em>, este pacote substitui a fun\u00e7\u00e3o executada pelo <em>FileSystemStorage<\/em> (FSS), configurado pelo buildout em plone 3, atrav\u00e9s do &#8220;recipe=iw.recipe.fss&#8221;, descontinuado na vers\u00e3o 4 do Plone.<\/p>\n<h1>Instala\u00e7\u00e3o<\/h1>\n<p>A instala\u00e7\u00e3o atrav\u00e9s do <em>buildout<\/em>, \u00e9 bem simples, basta acrescentar o pacote <em>plone.app.blob<\/em>, nas sess\u00f5es &#8220;eggs&#8221; e &#8220;zcml&#8221; da diretiva buildout, como abaixo:<\/p>\n<div>[buildout]<br \/>\n[..]<br \/>\neggs =<br \/>\nPlone \u00a0\u00a0\u00a0\u00a0\u00a0plone.app.blob [..]<br \/>\nzcml = plone.app.blob<\/div>\n<p>Este procedimento n\u00e3o \u00e9 necess\u00e1rio a partir do Plone 4.1.4, que j\u00e1 vem com o <em>plone.app.blob-1.5.1<\/em>, instalado e necessitando apenas a sua configura\u00e7\u00e3o pertinente.<\/p>\n<h1>Configura\u00e7\u00e3o<\/h1>\n<p>O BLOB Storage, tamb\u00e9m possui duas modalidades de configura\u00e7\u00e3o, Stand Alone(Single) e ZEO.<\/p>\n<p>Seguindo o Escopo, abaixo a configura\u00e7\u00e3o para o modo ZEO. No arquivo base.cfg, localize o trecho abaixo:<\/p>\n<blockquote><p>\u00a0\u00a0 [chown-zeo]<br \/>\n# This recipe is used to set permissions for root mode installs<br \/>\n# For options see http:\/\/pypi.python.org\/pypi\/plone.recipe.command<br \/>\nrecipe = plone.recipe.command<br \/>\ncommand =<br \/>\necho Dummy references to force this to execute after referenced parts<br \/>\necho ${backup:location} ${unifiedinstaller:sudo-command}<br \/>\nchmod 600 .installed.cfg<br \/>\ntouch ${buildout:directory}\/var\/zeoserver\/zeoserver.log<br \/>\nfind ${buildout:directory}\/var -type d -exec chmod 700 {} \\;<br \/>\nchmod 744 ${buildout:directory}\/bin\/*<br \/>\nchmod 755 ${buildout:directory}\/bin\/python<br \/>\nmkdir -pm 755 ${buildout:directory}\/{products,src}<br \/>\nchown -R ${buildout:effective-user} ${buildout:directory}\/var<br \/>\nupdate-command = ${chown-zeo:command}<\/p><\/blockquote>\n<p>Altere o trecho, acrescentando as linhas 116 e 117, como abaixo:<\/p>\n<div>[chown-zeo]<br \/>\n[..]<br \/>\nchmod 744 ${buildout:directory}\/bin\/* \u00a0\u00a0\u00a0\u00a0chmod 755 ${buildout:directory}\/bin\/python \u00a0\u00a0\u00a0\u00a0mkdir -pm 755 ${buildout:directory}\/{products,src}<\/p>\n<p>mkdir -pm 755 ${buildout:directory}\/var\/blobstorage\/mp00{1,2,3}bd\/tmp \u00a0\u00a0\u00a0\u00a0chown -R ${buildout:effective-user} ${buildout:directory}\/var update-command = ${chown-zeo:command}<\/p><\/div>\n<p>Esta modifica\u00e7\u00e3o neste trecho, tem a finalidade de gerar os diret\u00f3rios ao executar o <em>buildout.cfg<\/em>, criando os respectivos diret\u00f3rios, para os 3 Mount Points que ser\u00e3o criados:<\/p>\n<ul>\n<li>\/opt\/p416\/app\/env001\/var\/blobstorage\/mp001bd<\/li>\n<li>\/opt\/p416\/app\/env001\/var\/blobstorage\/mp002bd<\/li>\n<li>\/opt\/p416\/app\/env001\/var\/blobstorage\/mp003bd<\/li>\n<\/ul>\n<p>Agora, para configurar o <em>blobstorage<\/em>, \u00e9 necess\u00e1rio alterar tanto a configura\u00e7\u00e3o do <em>Zope Server<\/em>, quanto do Zope Client.<\/p>\n<p>Na sess\u00e3o <em>zeo-conf-additional<\/em>, localize o trecho:<\/p>\n<blockquote><p>\u00a0\u00a0zeo-conf-additional =<br \/>\n&lt;filestorage mp001bd&gt;<br \/>\npath ${buildout:directory}\/var\/filestorage\/mp001BD.fs<br \/>\n&lt;\/filestorage&gt;<\/p><\/blockquote>\n<p>Acrescente a linha 100, conforme abaixo, referenciando o diret\u00f3rio do blobstorage acrescentado na sess\u00e3o [chown-zeo].<\/p>\n<div>zeo-conf-additional =<\/p>\n<p>path ${buildout:directory}\/var\/filestorage\/mp001BD.fs<br \/>\nblob-dir ${buildout:directory}\/var\/blobstorage\/mp001bd\n<\/p><\/div>\n<p>Na sess\u00e3o zope-conf-additional, localize o trecho:<\/p>\n<blockquote><p>[client1]<br \/>\n[&#8230;]<br \/>\nzope-conf-additional =<br \/>\n&lt;zodb_db mp001bd&gt;<br \/>\nmount-point \/mp001bd<br \/>\ncache-size 5000<br \/>\n&lt;zeoclient&gt;<br \/>\nname mp001bd<br \/>\nserver ${buildout:zeo-address}<br \/>\nstorage mp001bd<br \/>\nvar ${buildout:directory}\/var<br \/>\n&lt;\/zeoclient&gt;<br \/>\n&lt;\/zodb_db&gt;<\/p><\/blockquote>\n<p>Altere o trecho para:<\/p>\n<div id=\"forumCodeDiv\">\n<div id=\"highlighter_768713\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>\n<div><code>zope-conf-additional =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zodb_db mp001bd=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>mount<\/code><code>-point <\/code><code>\/mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>cache-size 5000<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zeoclient&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>blob-<\/code><code>dir<\/code> <code>${buildout:directory}<\/code><code>\/var\/blobstorage\/mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>shared-blob-<\/code><code>dir<\/code> <code>on<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>name mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>server ${buildout:zeo-address}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>storage mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>var ${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zeoclient<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zodb_db<\/code><code>&gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Salve, feche e execute novamente os comandos abaixo novamente.<\/p>\n<p><strong># .\/bin\/buildout -v -t 30<br \/>\n# .\/bin\/buildout -v -t 30<br \/>\n# .\/bin\/plonectl stop<br \/>\n# .\/bin\/plonectl start<\/strong><\/p>\n<h1>Unicode UTF-8<\/h1>\n<p>O <em>Unicode UTF-8<\/em> serve para evitar erros de codifica\u00e7\u00e3o na l\u00edngua portuguesa.<\/p>\n<p>Para implement\u00e1-lo, basta adicionar o trecho abaixo no <em>base.cfg<\/em>.<\/p>\n<div>[unicode]<br \/>\nrecipe = plone.recipe.command<br \/>\nupdate-command = ${unicode:command}<br \/>\ncommand =<br \/>\ncat &gt; ${buildout:directory}\/lib\/python2.6\/site-packages\/sitecustomize.py &lt;&lt; EOF<br \/>\nimport sys<br \/>\nsys.setdefaultencoding(&#8216;utf-8&#8217;)<br \/>\nEOF<\/div>\n<p>Salve, feche e execute novamente o buildout.<\/p>\n<p><strong># .\/bin\/buildout -v -t 30<\/strong><\/p>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><strong>Desfecho, arquivos fontes e refer\u00eancias<\/strong><\/p>\n<div>Agora, para conclus\u00e3o de todo o processo, acesse a <em>Zope Manage Interface<\/em> (ZMI), em seu navegador preferido, no IP da m\u00e1quina e a porta, em que o Plone foi configurado.<\/p>\n<p>No exemplo deste artigo, 8101 e 8102, para as inst\u00e2ncias, client1 e client2, respectivamente.<\/p>\n<ul>\n<li>http:\/\/iphost:8101\/manage<\/li>\n<li>http:\/\/iphost:8102\/manage<\/li>\n<\/ul>\n<p>Exemplo: http:\/\/192.168.0.2:8102\/manage<\/p>\n<p>Este artigo, pode ser lido tamb\u00e9m em meu blog: <a href=\"http:\/\/brito.blog.incolume.com.br\">http:\/\/brito.blog.incolume.com.br<\/a>, e futuramente disponibilizarei a vers\u00e3o em PDF.<\/p>\n<p>Abra\u00e7o a todos. \ud83d\ude42<\/p>\n<h1>Buildout.cfg Completo<\/h1>\n<div id=\"forumCodeDiv\">\n<div id=\"highlighter_481656\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>\n<div><code>############################################<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># Buildout Configuration File for ZEO Plone<\/code><\/div>\n<div><code># -----------------------------------------<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># After making changes in this configuration file,<\/code><\/div>\n<div><code># you should run bin\/buildout to update the components.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># ALWAYS back up all Plone\/Zope data and components<\/code><\/div>\n<div><code># before changing configuration.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># Running \"bin\/buildout\" will update your installation,<\/code><\/div>\n<div><code># installing missing components as necessary.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># Use \"bin\/buildout -n\" to update many components here to the newest<\/code><\/div>\n<div><code># available releases.<\/code><\/div>\n<div><code># This will update the add-on products you've added in the eggs= lines.<\/code><\/div>\n<div><code># This will not, however, upgrade Plone itself (or anything else you've<\/code><\/div>\n<div><code># pinned with a version specification). To upgrade Plone itself, see the<\/code><\/div>\n<div><code># comments in \"Plone Component Versions\".<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># Tutorial instructions for using zc.buildout for<\/code><\/div>\n<div><code># configuration management are available at:<\/code><\/div>\n<div><code># <a href=\"http:\/\/plone.org\/documentation\/tutorial\/buildout\">http:\/\/plone.org\/documentation\/tutorial\/buildout<\/a><\/code><\/div>\n<div><code># Full details at <a href=\"http:\/\/pypi.python.org\/pypi\/zc.buildout\">http:\/\/pypi.python.org\/pypi\/zc.buildout<\/a><\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code>############################################<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>[buildout]<\/code><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Plone Component Versions<\/code><\/div>\n<div><code># ------------------------<\/code><\/div>\n<div><code># This version of the Unified Installer has the components of Plone 4<\/code><\/div>\n<div><code># preloaded so that it can install without an Internet connection.<\/code><\/div>\n<div><code># If you want to update, uncomment the \"<a href=\"http:\/\/...\">http:\/\/...<\/a>\" line below,<\/code><\/div>\n<div><code># edit it to point to the current version URL, comment out the<\/code><\/div>\n<div><code># \"versions.cfg\" line and run \"bin\/buildout\" while attached to the<\/code><\/div>\n<div><code># Internet. Generally, you only want to do that as part of a planned migration.<\/code><\/div>\n<div><code># Note that if you are updating components, you should also check the versions<\/code><\/div>\n<div><code># section at the end of this file, since recipes or components other than<\/code><\/div>\n<div><code># those of Zope and Plone may need updating at the same time.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code>extends =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>base.cfg<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>versions.cfg<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0<a href=\"http:\/\/dist.plone.org\/release\/4.1-latest\/versions.cfg\">http:\/\/dist.plone.org\/release\/4.1-latest\/versions.cfg<\/a><\/code><\/div>\n<div><\/div>\n<div><code># If you change your Plone version, you'll also need to update<\/code><\/div>\n<div><code># the repository below.<\/code><\/div>\n<div><code>find<\/code><code>-links +=<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>http:<\/code><code>\/\/dist<\/code><code>.plone.org<\/code><code>\/release\/4<\/code><code>.1.6<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Ports<\/code><\/div>\n<div><code># -----<\/code><\/div>\n<div><code># Specify the ports on which your Zope installation<\/code><\/div>\n<div><code># will listen.<\/code><\/div>\n<div><code># ZEO Server<\/code><\/div>\n<div><code>zeo-address = 127.0.0.1:8000<\/code><\/div>\n<div><code># Zope client 1<\/code><\/div>\n<div><code>http-address = 8001<\/code><\/div>\n<div><code># Additional clients:<\/code><\/div>\n<div><code>client2-address = 8002<\/code><\/div>\n<div><code>client3-address = 8003<\/code><\/div>\n<div><code>client4-address = 8004<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><code># If you try to start Zope as root, it will change user id to run as<\/code><\/div>\n<div><code># the effective user specified here. This user id must own the var directory<\/code><\/div>\n<div><code># of your buildout.<\/code><\/div>\n<div><code>effective-user = admin<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Eggs<\/code><\/div>\n<div><code># ----<\/code><\/div>\n<div><code># Add an indented line to the eggs section for any Python<\/code><\/div>\n<div><code># eggs or packages you wish to include.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code>eggs =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>Plone<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>Pillow<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Optional Functionality<\/code><\/div>\n<div><code># ----------------------<\/code><\/div>\n<div><code># Uncomment the indented lines to include these products.<\/code><\/div>\n<div><code># Documentation on all of them, along with many more products,<\/code><\/div>\n<div><code># is available at<\/code><\/div>\n<div><code># <a href=\"http:\/\/plone.org\/products\/\">http:\/\/plone.org\/products\/<\/a><\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># Example products:<\/code><\/div>\n<div><code># * LinguaPlone provides tools for building multi-lingual sites<\/code><\/div>\n<div><code># * PloneFormGen provides through-the-web form building<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0Products.LinguaPlone==4.1.1<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0Products.PloneFormGen==1.7.0<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># Note that versions may be specified here or in the [versions]<\/code><\/div>\n<div><code># section below. You should always specify versions that you know<\/code><\/div>\n<div><code># are compatible with the Plone release and at an acceptable<\/code><\/div>\n<div><code># development level.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># Commonly used development tools:<\/code><\/div>\n<div><code># Several excellent development tools are included in the develop.cfg<\/code><\/div>\n<div><code># buildout extension. Read it to learn how to activate these tools.<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># ZCML Slugs<\/code><\/div>\n<div><code># ----------<\/code><\/div>\n<div><code># Some eggs need ZCML slugs to tell Zope to<\/code><\/div>\n<div><code># use them. Eggs with names beginning with \"Products.\"<\/code><\/div>\n<div><code># usually don't need this.<\/code><\/div>\n<div><code>zcml =<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0plone.reload<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Development Eggs<\/code><\/div>\n<div><code># ----------------<\/code><\/div>\n<div><code># You can use paster to create \"development eggs\" to<\/code><\/div>\n<div><code># develop new products\/themes. Put these in the src\/<\/code><\/div>\n<div><code># directory.<\/code><\/div>\n<div><code># You will also need to add the egg names in the<\/code><\/div>\n<div><code># eggs section above, and may also need to add them<\/code><\/div>\n<div><code># to the zcml section.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># Provide the *paths* to the eggs you are developing here:<\/code><\/div>\n<div><code>develop =<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0src\/my.package<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Debug Mode<\/code><\/div>\n<div><code># ----------<\/code><\/div>\n<div><code># Change debug-mode to \"on\" to run in development mode.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code>debug-mode = off<\/code><\/div>\n<div><code># Add-on developers should turn deprecation warnings on<\/code><\/div>\n<div><code>deprecation-warnings = off<\/code><\/div>\n<div><code># change verbose-security to \"on\" for useful security errors while developing<\/code><\/div>\n<div><code>verbose-security = off<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Backup Directory<\/code><\/div>\n<div><code># ----------------<\/code><\/div>\n<div><code># Sets the target directory for the bin\/backup and bin\/snapshotbackup<\/code><\/div>\n<div><code># commands. Default is inside this project's var directory, but ideally<\/code><\/div>\n<div><code># this should be on a separate volume or backup server.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code>backups-<\/code><code>dir<\/code><code>=${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Environment Variables<\/code><\/div>\n<div><code># ---------------------<\/code><\/div>\n<div><code># Some of the behavior of your Zope\/Plone instances are controlled with OS<\/code><\/div>\n<div><code># environment variables. You may set those here in a key \/ value format.<\/code><\/div>\n<div><code># Some common settings:<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0* TZ allows you to set a time zone for systems where it's not<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0automatically available.<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0* zope_i18n_compile_mo_files allows for automatic compilation of<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0missing translation files (may slow startup).<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0* zope_i18n_allowed_languages allows you to limit the available<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0translations.<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0* PYTHON_EGG_CACHE determines where zipped python packages are unpacked<\/code><\/div>\n<div><code>#\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for use.<\/code><\/div>\n<div><code>environment-vars =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>zope_i18n_compile_mo_files <\/code><code>true<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>PYTHON_EGG_CACHE ${buildout:directory}<\/code><code>\/var\/<\/code><code>.python-eggs<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>PYTHONHASHSEED random<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>#\u00a0\u00a0\u00a0\u00a0TZ US\/Eastern<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>#\u00a0\u00a0\u00a0\u00a0zope_i18n_allowed_languages en es de fr<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Initial User<\/code><\/div>\n<div><code># ------------<\/code><\/div>\n<div><code># This is the user id and password that will be used to create the initial<\/code><\/div>\n<div><code># user id that will allow you to log in and create a Plone site. This only<\/code><\/div>\n<div><code># sets the initial password; it will not allow you to change an already<\/code><\/div>\n<div><code># existing password. If you change the admin password via the web interface,<\/code><\/div>\n<div><code># the one below will no longer be valid.<\/code><\/div>\n<div><code># If you find yourself locked out of your Zope\/Python installation, you may<\/code><\/div>\n<div><code># add an emergency user via \"bin\/plonectl client1 client2 client3 adduser\".<\/code><\/div>\n<div><code>user=admin:admin<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Parts Specification<\/code><\/div>\n<div><code># -------------------<\/code><\/div>\n<div><code># Specifies the components that should be included in the buildout.<\/code><\/div>\n<div><code># All the basics are in the base.cfg extension; you may add your<\/code><\/div>\n<div><code># own if you need them at the end of this file.<\/code><\/div>\n<div><code>parts =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>zeoserver<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>client1 client2 client3 client4<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>zopepy<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>zopeskel<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>unifiedinstaller<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>backup<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>chown<\/code><code>-zeo<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>############################################<\/code><\/div>\n<div><code># Versions Specification<\/code><\/div>\n<div><code># ----------------------<\/code><\/div>\n<div><code># Version information supplied here will \"pin\" Python packages to a particular<\/code><\/div>\n<div><code># version number, even when you use the \"newest\" flag running buildout.<\/code><\/div>\n<div><code># Specifying versions for all packages is a good idea and can prevent<\/code><\/div>\n<div><code># accidental changes when you add new packages to your buildout.<\/code><\/div>\n<div><code># Note that versions specified here will override those specified earlier<\/code><\/div>\n<div><code># in the configuration, including those from the Plone and Zope version<\/code><\/div>\n<div><code># config files.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code>[versions]<\/code><\/div>\n<div><code>ZopeSkel = 2.21.2<\/code><\/div>\n<div><code>Cheetah = 2.2.1<\/code><\/div>\n<div><code>Pillow = 1.7.7<\/code><\/div>\n<div><code>Products.DocFinderTab = 1.0.5<\/code><\/div>\n<div><code>collective.recipe.backup = 2.4<\/code><\/div>\n<div><code>ordereddict = 1.1<\/code><\/div>\n<div><code>plone.recipe.<\/code><code>command<\/code> <code>= 1.1<\/code><\/div>\n<div><code>plone.recipe.unifiedinstaller = 4.1<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h1>Base.cfg Completo<\/h1>\n<div id=\"forumCodeDiv\">\n<div id=\"highlighter_348917\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>\n<div><code>######################################################<\/code><\/div>\n<div><code># Base Configuration; used by both standalone and zeo,<\/code><\/div>\n<div><code># which extend it.<\/code><\/div>\n<div><code># ---------------------------------------------------<\/code><\/div>\n<div><\/div>\n<div><code># Buildout instructions in this file are<\/code><\/div>\n<div><code># usually only changed by experienced developers.<\/code><\/div>\n<div><code>#<\/code><\/div>\n<div><code># Beyond here there be dragons!<\/code><\/div>\n<div><\/div>\n<div><code>[buildout]<\/code><\/div>\n<div><code>eggs-directory=..<\/code><code>\/buildout-cache\/eggs<\/code><\/div>\n<div><code>download-cache=..<\/code><code>\/buildout-cache\/downloads<\/code><\/div>\n<div><\/div>\n<div><code># Don't download new things unless needed to satisfy dependencies.<\/code><\/div>\n<div><code># Override this on the command line with the \"-n\" flag.<\/code><\/div>\n<div><code>newest = <\/code><code>false<\/code><\/div>\n<div><\/div>\n<div><code># Pick final releases over newer development releases when it's<\/code><\/div>\n<div><code># possible to do so and still fulfil requirements. Note that explicit<\/code><\/div>\n<div><code># version specifications will override this preference.<\/code><\/div>\n<div><code>prefer-final = <\/code><code>true<\/code><\/div>\n<div><\/div>\n<div><code>versions = versions<\/code><\/div>\n<div><\/div>\n<div><code># Add additional egg download sources here. dist.plone.org contains archives<\/code><\/div>\n<div><code># of Plone packages.<\/code><\/div>\n<div><code>find<\/code><code>-links =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>http:<\/code><code>\/\/dist<\/code><code>.plone.org<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>http:<\/code><code>\/\/download<\/code><code>.zope.org<\/code><code>\/ppix\/<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>http:<\/code><code>\/\/download<\/code><code>.zope.org<\/code><code>\/distribution\/<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>http:<\/code><code>\/\/effbot<\/code><code>.org<\/code><code>\/downloads<\/code><\/div>\n<div><\/div>\n<div><code># unzip all eggs for easier debugging<\/code><\/div>\n<div><code>unzip = <\/code><code>true<\/code><\/div>\n<div><\/div>\n<div><code># Load the DumpPickedVersions extension, which will notify<\/code><\/div>\n<div><code># you of versions picked by buildout that were not specifically<\/code><\/div>\n<div><code># pinned. <\/code><\/div>\n<div><code>extensions = buildout.dumppickedversions<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>[zopepy]<\/code><\/div>\n<div><code># installs a zopepy python interpreter that runs with your<\/code><\/div>\n<div><code># full Zope environment<\/code><\/div>\n<div><code>recipe = zc.recipe.egg<\/code><\/div>\n<div><code>eggs = ${buildout:eggs}<\/code><\/div>\n<div><code>interpreter = zopepy<\/code><\/div>\n<div><code>scripts = zopepy<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>[unifiedinstaller]<\/code><\/div>\n<div><code># This recipe installs the plonectl script and a few other convenience<\/code><\/div>\n<div><code># items.<\/code><\/div>\n<div><code># For options see <a href=\"http:\/\/pypi.python.org\/pypi\/plone.recipe.unifiedinstaller\">http:\/\/pypi.python.org\/pypi\/plone.recipe.unifiedinstaller<\/a><\/code><\/div>\n<div><code>recipe = plone.recipe.unifiedinstaller<\/code><\/div>\n<div><code>user = ${buildout:user}<\/code><\/div>\n<div><code>primary-port = ${buildout:http-address}<\/code><\/div>\n<div><code>sudo<\/code><code>-<\/code><code>command<\/code> <code>= <\/code><code>sudo<\/code> <code>-u admin<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>[repozo]<\/code><\/div>\n<div><code># This recipe builds the repozo script for non-zeo installations.<\/code><\/div>\n<div><code>recipe = zc.recipe.egg<\/code><\/div>\n<div><code>eggs = ZODB3<\/code><\/div>\n<div><code>scripts = repozo<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>[backup]<\/code><\/div>\n<div><code># This recipe builds the backup, restore and snapshotbackup commands.<\/code><\/div>\n<div><code># For options see <a href=\"http:\/\/pypi.python.org\/pypi\/collective.recipe.backup\">http:\/\/pypi.python.org\/pypi\/collective.recipe.backup<\/a><\/code><\/div>\n<div><code>recipe = collective.recipe.backup<\/code><\/div>\n<div><code>location = ${buildout:backups-<\/code><code>dir<\/code><code>}<\/code><code>\/backups<\/code><\/div>\n<div><code>snapshotlocation = ${buildout:backups-<\/code><code>dir<\/code><code>}<\/code><code>\/snapshotbackups<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>[zeoserver]<\/code><\/div>\n<div><code># Use this section to install and configure a Zope<\/code><\/div>\n<div><code># Enterprise Objects server.<\/code><\/div>\n<div><code># For options see <a href=\"http:\/\/pypi.python.org\/pypi\/plone.recipe.zeoserver\">http:\/\/pypi.python.org\/pypi\/plone.recipe.zeoserver<\/a><\/code><\/div>\n<div><code>recipe = plone.recipe.zeoserver<\/code><\/div>\n<div><code>zeo-address = ${buildout:zeo-address}<\/code><\/div>\n<div><code># if we try to start as root, Zope will switch to the user below<\/code><\/div>\n<div><code>effective-user = ${buildout:effective-user}<\/code><\/div>\n<div><code># Put the log, pid and socket files in var\/zeoserver<\/code><\/div>\n<div><code>zeo-log\u00a0\u00a0\u00a0\u00a0 = ${buildout:directory}<\/code><code>\/var\/zeoserver\/zeoserver<\/code><code>.log<\/code><\/div>\n<div><code>pid-<\/code><code>file<\/code>\u00a0\u00a0\u00a0\u00a0<code>= ${buildout:directory}<\/code><code>\/var\/zeoserver\/zeoserver<\/code><code>.pid<\/code><\/div>\n<div><code>socket-name = ${buildout:directory}<\/code><code>\/var\/zeoserver\/zeo<\/code><code>.zdsock<\/code><\/div>\n<div><code>blob-storage = ${buildout:directory}<\/code><code>\/var\/blobstorage<\/code><\/div>\n<div><code># You may also control the environment variables for the zeoserver.<\/code><\/div>\n<div><code>environment-vars = ${buildout:environment-vars}<\/code><\/div>\n<div><code>eggs = tempstorage<\/code><\/div>\n<div><\/div>\n<div><code>zeo-conf-additional =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;filestorage mp001bd=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>path ${buildout:directory}<\/code><code>\/var\/filestorage\/mp001BD<\/code><code>.fs<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>blob-<\/code><code>dir<\/code> <code>${buildout:directory}<\/code><code>\/var\/blobstorage\/mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/filestorage<\/code><code>&gt;<\/code><\/div>\n<div><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;filestorage mp002bd=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>path ${buildout:directory}<\/code><code>\/var\/filestorage\/mp002BD<\/code><code>.fs<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>blob-<\/code><code>dir<\/code> <code>${buildout:directory}<\/code><code>\/var\/blobstorage\/mp002bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/filestorage<\/code><code>&gt;<\/code><\/div>\n<div><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;filestorage mp003bd=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>path ${buildout:directory}<\/code><code>\/var\/filestorage\/mp003BD<\/code><code>.fs<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>blob-<\/code><code>dir<\/code> <code>${buildout:directory}<\/code><code>\/var\/blobstorage\/mp003bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/filestorage<\/code><code>&gt;<\/code><\/div>\n<div><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>%<\/code><code>import<\/code> <code>tempstorage<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;temporarystorage temp=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>name temporary storage <\/code><code>for<\/code> <code>sessioning<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/temporarystorage<\/code><code>&gt;<\/code><\/div>\n<div><\/div>\n<div><code>[<\/code><code>chown<\/code><code>-zeo]<\/code><\/div>\n<div><code># This recipe is used to set permissions for root mode installs<\/code><\/div>\n<div><code># For options see <a href=\"http:\/\/pypi.python.org\/pypi\/plone.recipe.command\">http:\/\/pypi.python.org\/pypi\/plone.recipe.command<\/a><\/code><\/div>\n<div><code>recipe = plone.recipe.<\/code><code>command<\/code><\/div>\n<div><code>command<\/code> <code>=<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>echo<\/code> <code>Dummy references to force this to execute after referenced parts<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>echo<\/code> <code>${backup:location} ${unifiedinstaller:<\/code><code>sudo<\/code><code>-<\/code><code>command<\/code><code>}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>chmod<\/code> <code>600 .installed.cfg<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>touch<\/code> <code>${buildout:directory}<\/code><code>\/var\/zeoserver\/zeoserver<\/code><code>.log<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>find<\/code> <code>${buildout:directory}<\/code><code>\/var<\/code> <code>-<\/code><code>type<\/code> <code>d -<\/code><code>exec<\/code> <code>chmod<\/code> <code>700 {} \\;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>chmod<\/code> <code>744 ${buildout:directory}<\/code><code>\/bin\/<\/code><code>*<\/code><\/div>\n<div><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>chmod<\/code> <code>755 ${buildout:directory}<\/code><code>\/bin\/python<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>mkdir<\/code> <code>-pm 755 ${buildout:directory}\/{products,src}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>mkdir<\/code> <code>-pm 755 ${buildout:directory}<\/code><code>\/var\/blobstorage\/mp00<\/code><code>{1,2,3}bd<\/code><code>\/tmp<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>chown<\/code> <code>-R ${buildout:effective-user} ${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><code>update-<\/code><code>command<\/code> <code>= ${<\/code><code>chown<\/code><code>-zeo:<\/code><code>command<\/code><code>}<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>[zopeskel]<\/code><\/div>\n<div><code># installs paster and Zopeskel<\/code><\/div>\n<div><code>recipe = zc.recipe.egg<\/code><\/div>\n<div><code>eggs =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>ZopeSkel<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>Paste<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>PasteDeploy<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>PasteScript<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><code>${buildout:eggs}<\/code><\/div>\n<div><\/div>\n<div><\/div>\n<div><code>[client1]<\/code><\/div>\n<div><code># Use this section to install and configure a Zope<\/code><\/div>\n<div><code># client instance.<\/code><\/div>\n<div><code># For options see <a href=\"http:\/\/pypi.python.org\/pypi\/plone.recipe.zope2instance\">http:\/\/pypi.python.org\/pypi\/plone.recipe.zope2instance<\/a><\/code><\/div>\n<div><code># Additional clients are a<\/code><\/div>\n<div><code>recipe = plone.recipe.zope2instance<\/code><\/div>\n<div><code>zeo-client = <\/code><code>true<\/code><\/div>\n<div><code>zeo-address = ${zeoserver:zeo-address}<\/code><\/div>\n<div><code># The line below sets only the initial password. It will not change an<\/code><\/div>\n<div><code># existing password.<\/code><\/div>\n<div><code>user = ${buildout:user}<\/code><\/div>\n<div><code># if we try to start as root, Zope will switch to the user below<\/code><\/div>\n<div><code>effective-user = ${buildout:effective-user}<\/code><\/div>\n<div><code>http-address = ${buildout:http-address}<\/code><\/div>\n<div><code>icp-address = ${buildout:http-address}<\/code><\/div>\n<div><code>blob-storage = ${zeoserver:blob-storage}<\/code><\/div>\n<div><code>shared-blob = on<\/code><\/div>\n<div><code># change debug-mode to \"on\" to run in development mode<\/code><\/div>\n<div><code>debug-mode = ${buildout:debug-mode}<\/code><\/div>\n<div><code># change verbose-security to \"on\" for detailed security<\/code><\/div>\n<div><code># errors while developing<\/code><\/div>\n<div><code>verbose-security = ${buildout:verbose-security}<\/code><\/div>\n<div><code>deprecation-warnings = ${buildout:deprecation-warnings}<\/code><\/div>\n<div><code># Put the log, pid, lock files in var\/client1<\/code><\/div>\n<div><code>event-log = ${buildout:directory}<\/code><code>\/var\/client1\/event<\/code><code>.log<\/code><\/div>\n<div><code>z2-log\u00a0\u00a0\u00a0\u00a0= ${buildout:directory}<\/code><code>\/var\/client1\/Z2<\/code><code>.log<\/code><\/div>\n<div><code>pid-<\/code><code>file<\/code>\u00a0\u00a0<code>= ${buildout:directory}<\/code><code>\/var\/client1\/client1<\/code><code>.pid<\/code><\/div>\n<div><code>lock-<\/code><code>file<\/code> <code>= ${buildout:directory}<\/code><code>\/var\/client1\/client1<\/code><code>.lock<\/code><\/div>\n<div><\/div>\n<div><code># If you want Zope to know about any additional eggs, list them here.<\/code><\/div>\n<div><code># e.g. eggs = ${buildout:eggs} my.package<\/code><\/div>\n<div><code>eggs = ${buildout:eggs}<\/code><\/div>\n<div><\/div>\n<div><code># If you want to register ZCML slugs for any packages, list them here.<\/code><\/div>\n<div><code># e.g. zcml = my.package my.other.package<\/code><\/div>\n<div><code>zcml = ${buildout:zcml}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div><code>products = ${buildout:directory}<\/code><code>\/products<\/code><\/div>\n<div><\/div>\n<div><code># You may also control the environment variables for the instance.<\/code><\/div>\n<div><code>environment-vars = ${buildout:environment-vars}<\/code><\/div>\n<div><\/div>\n<div><code>zope-conf-additional =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zodb_db mp001bd=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>mount<\/code><code>-point <\/code><code>\/mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>cache-size 5000<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zeoclient&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>blob-<\/code><code>dir<\/code> <code>${buildout:directory}<\/code><code>\/var\/blobstorage\/mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>shared-blob-<\/code><code>dir<\/code> <code>on<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>name mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>server ${buildout:zeo-address}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>storage mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>var ${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zeoclient<\/code><code>&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zodb_db<\/code><code>&gt;<\/code><\/div>\n<div><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zodb_db mp002bd=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>mount<\/code><code>-point <\/code><code>\/mp002bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>cache-size 5000<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zeoclient&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>blob-<\/code><code>dir<\/code> <code>${buildout:directory}<\/code><code>\/var\/blobstorage\/mp002bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>shared-blob-<\/code><code>dir<\/code> <code>on<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>name mp002bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>server ${buildout:zeo-address}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>storage mp001bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>var ${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zeoclient<\/code><code>&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zodb_db<\/code><code>&gt;<\/code><\/div>\n<div><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zodb_db mp003bd=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>mount<\/code><code>-point <\/code><code>\/mp003bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>cache-size 5000<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zeoclient&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>blob-<\/code><code>dir<\/code> <code>${buildout:directory}<\/code><code>\/var\/blobstorage\/mp003bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>shared-blob-<\/code><code>dir<\/code> <code>on<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>name mp003bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>server ${buildout:zeo-address}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>storage mp003bd<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>var ${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zeoclient<\/code><code>&gt;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zodb_db<\/code><code>&gt;<\/code><\/div>\n<div><\/div>\n<div><code>zodb-temporary-storage =<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zodb_db temporary=<\/code><code>\"\"<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;zeoclient&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>server ${buildout:zeo-address}<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>storage temp<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>name zeostorage<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>var ${buildout:directory}<\/code><code>\/var<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zeoclient<\/code><code>&gt;<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>mount<\/code><code>-point <\/code><code>\/temp_folder<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>container-class Products.TemporaryFolder.TemporaryContainer<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code>&lt;<\/code><code>\/zodb_db<\/code><code>&gt;<\/code><\/div>\n<div><\/div>\n<div><code>[client2]<\/code><\/div>\n<div><code># a copy of client1, except adjusted address and var location<\/code><\/div>\n<div><code>&lt;= client1<\/code><\/div>\n<div><code>http-address = ${buildout:client2-address}<\/code><\/div>\n<div><code>icp-address = ${buildout:client2-address}<\/code><\/div>\n<div><code>event-log = ${buildout:directory}<\/code><code>\/var\/client2\/event<\/code><code>.log<\/code><\/div>\n<div><code>z2-log\u00a0\u00a0\u00a0\u00a0= ${buildout:directory}<\/code><code>\/var\/client2\/Z2<\/code><code>.log<\/code><\/div>\n<div><code>pid-<\/code><code>file<\/code>\u00a0\u00a0<code>= ${buildout:directory}<\/code><code>\/var\/client2\/client2<\/code><code>.pid<\/code><\/div>\n<div><code>lock-<\/code><code>file<\/code> <code>= ${buildout:directory}<\/code><code>\/var\/client2\/client2<\/code><code>.lock<\/code><\/div>\n<div><\/div>\n<div><code>[client3]<\/code><\/div>\n<div><code># a copy of client1, except adjusted address and var location<\/code><\/div>\n<div><code>&lt;= client1<\/code><\/div>\n<div><code>http-address = ${buildout:client3-address}<\/code><\/div>\n<div><code>icp-address = ${buildout:client3-address}<\/code><\/div>\n<div><code>event-log = ${buildout:directory}<\/code><code>\/var\/client3\/event<\/code><code>.log<\/code><\/div>\n<div><code>z2-log\u00a0\u00a0\u00a0\u00a0= ${buildout:directory}<\/code><code>\/var\/client3\/Z2<\/code><code>.log<\/code><\/div>\n<div><code>pid-<\/code><code>file<\/code>\u00a0\u00a0<code>= ${buildout:directory}<\/code><code>\/var\/client3\/client3<\/code><code>.pid<\/code><\/div>\n<div><code>lock-<\/code><code>file<\/code> <code>= ${buildout:directory}<\/code><code>\/var\/client3\/client3<\/code><code>.lock<\/code><\/div>\n<div><\/div>\n<div><code>[client4]<\/code><\/div>\n<div><code># a copy of client1, except adjusted address and var location<\/code><\/div>\n<div><code>&lt;= client1<\/code><\/div>\n<div><code>http-address = ${buildout:client4-address}<\/code><\/div>\n<div><code>icp-address = ${buildout:client4-address}<\/code><\/div>\n<div><code>event-log = ${buildout:directory}<\/code><code>\/var\/client4\/event<\/code><code>.log<\/code><\/div>\n<div><code>z2-log\u00a0\u00a0\u00a0\u00a0= ${buildout:directory}<\/code><code>\/var\/client4\/Z2<\/code><code>.log<\/code><\/div>\n<div><code>pid-<\/code><code>file<\/code>\u00a0\u00a0<code>= ${buildout:directory}<\/code><code>\/var\/client4\/client4<\/code><code>.pid<\/code><\/div>\n<div><code>lock-<\/code><code>file<\/code> <code>= ${buildout:directory}<\/code><code>\/var\/client4\/client4<\/code><code>.lock<\/code><\/div>\n<div><\/div>\n<div><code>[unicode]<\/code><\/div>\n<div><code>recipe = plone.recipe.<\/code><code>command<\/code><\/div>\n<div><code>update-<\/code><code>command<\/code> <code>= ${unicode:<\/code><code>command<\/code><code>}<\/code><\/div>\n<div><code>command<\/code> <code>=<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0<\/code><code>cat<\/code> <code>&gt; ${buildout:directory}<\/code><code>\/lib\/python2<\/code><code>.6<\/code><code>\/site-packages\/sitecustomize<\/code><code>.py &lt;&lt; EOF<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0<\/code><code>import<\/code> <code>sys<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0<\/code><code>sys.setdefaultencoding(<\/code><code>'utf-8'<\/code><code>)<\/code><\/div>\n<div><code>\u00a0\u00a0\u00a0<\/code><code>EOF<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o &#8211; Escopo &#8211; Depend\u00eancias Segundo plone.org, o Plone 4 \u00e9 a vers\u00e3o mais r\u00e1pida, poderosa e bela. O state-of-the-art do CMS Plone. O Plone, tamb\u00e9m conhecido por PZP \u2013 Python\/Zope\/Plone &#8211; Assim chamado pela forma\u00e7\u00e3o do ambiente que envolve a linguagem de programa\u00e7\u00e3o interpretada Python, o framework para desenvolvimento Web Zope e o CMS [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1,51],"tags":[152,153],"class_list":["post-320","post","type-post","status-publish","format-standard","hentry","category-viazap","category-linux-linuxrs","tag-cms","tag-plone"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=320"}],"version-history":[{"count":2,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/320\/revisions"}],"predecessor-version":[{"id":322,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/320\/revisions\/322"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}