O
Python,
Zope e
Plone formam uma equipe maravilhosa na construção de pequenos, médios e grandes portais e para o gerenciamento de conteúdo, mas e quando as coisas começam a ficar lentas?
É sempre interessante ver as pessoas reclamando que recebem mensagens de "Zope MemoryError" em seu sistema FreeBSD, seja x86 ou 64bits, e isso pode ser uma experiência muito frustante e desagradável.
Como administrador não basta apenas culpar a aplicação ou esperar neste caso que a aplicação te informe com detalhes que você precisa deixar seu sistema preparado para recebê-la.
Sou usuário e fã de
Slackware por sua simplicidade e ao mesmo tempo temperamental forma de administração, dessa mesma forma tive a oportunidade de conhecer um membro da família, já que também é um sistema gerenciado por scripts, AMO MUITO TUDO ISSO!
Porém como nem tudo são flores, me deparei com um problema inesperado as vésperas de colocar um grande portal no ar, pois é, falhei nos testes, pois eu deveria ter visto o problema antes mesmo dele se mostrar. O que ocorre é que o Zope não é lá muito amigo do FreeBSD, pelo menos nessa parte ou vice e versa. O que significa que não basta apenas instalar o Zope no BSD esperando que vá funcionar as mil maravilhas, sem antes dar um trato no memino.
Uma das pegadinhas é quando não fixamos o HUGE_STACK_SIZE para o Python usar o Zope, ou mesmo quando é fixado com uma medida menor de memória, também coisas como desativar o IPv6 no kernel são detalhes que normalmente vão dar problemas.
Temos também o tão famoso Zope MemoryError, isso normalmente ocorre quando um ou mais processos do Zope são executados com falta de memória, isso porque no BSD o padrão de memória máximo por processos é muito pequeno, exigindo que sejam feitas algumas definições no loader.conf ou KERNCONF, como talvez 1GB, mas NÃO algo perto de memória física para não ter maiores problemas.
kern.maxdsiz = "1610612736"
kern.dfldsiz = "1610612736"
kern.maxssiz = "1610612736"
Temos ainda um outro probleminha, isso com relação ao Python, que normalmente fica processando /var/tmp e /tmp e isso faz com que ele se complique para descobrir porque a colocação está maior do que o espaço disponível em arquivos. Isso significa que o ZODB falharia ao ver uma abundância de espaço em /tmp. A solução é colocar a variável TMPDIR no zopectl para que o Python entenda que este é o padrão para ele.
Como visto, são passos rápidos, pequenos detalhes que nos passam desapercebidos e que no futuro podem ser um grande problema. E claro, depois de termos feito as modificações acima, temos que também fazer as alterações abaixo.
Ativar o redirecionamento IP no Kernel
# sysctl net.inet.ip.forwarding=1
# sysctl net.inet.ip.fastforwarding=1
# sysctl net.inet6.ip6.forwarding=1
Certifique-se de que existem as linhas em
/etc/sysctl.conf, dessa forma a próxima vez você reiniciar o computador o redirecionamento IP estará ativado por padrão:
# vi /etc/sysctl.conf
net.inet.ip.forwarding=1
net.inet.ip.fastforwarding=1
net.inet6.ip6.forwarding=1
Aceitar filtro
Em seguida certifique-se de que o aceite de filtro HTTP esteja carregado no kernel, pode-se verificar isso executando o comando:
# Kldstat
Edite o
/boot/loader.conf e adicione a seguinte linha de modo que quando reiniciar o computador o módulo será carregado no kernel.
# vi /boot/loader.conf
accf_http_load="YES"
Também podemos carregar o módulo imediatamente, basta executar o comando:
# kldload accf_http
Modificar o sistema de memória compartilhada e setar alguns parâmetros
# sysctl kern.ipc.shmall=32768
# sysctl kern.ipc.shmmax=134217728
# sysctl kern.ipc.semmap=256
Novamente vamos editar o arquivo
/etc/sysctl.conf para tornar estas alterações permanentes:
# vi /etc/sysctl.conf
kern.ipc.shmall=32768
kern.ipc.shmmax=134217728
kern.ipc.semmap=256
net.inet.ip.forwarding=1
net.inet.ip.fastforwarding=1
net.inet6.ip6.forwarding=1
Modificar o sistema de apenas leitura e alguns parâmetros
Editando o arquivo
/boot/loader.conf.
NOTA: Aqui teremos que dar um restart para que os novos valores sejam setados nos parâmetros.
# vi /boot/loader.conf
kern.ipc.semmni=256
kern.ipc.semmns=512
kern.ipc.semmnu=256
accf_http_load="YES"
Depois disso tudo basta certificar-se de que o Python esteja instalado no sistema, assim como algumas bibliotecas necessárias para a instalação do Zope.
# python2.4
Caso tenha a mensagem *python2.4 command not found*, então faça:
# which python2.4
# ls /usr/local/bin/python2.4
Se ainda assim tiver a mensagem: *ls: /usr/local/bin/python2.4: No such file or directory*, então:
# cd /usr/ports/lang/python24
# make install clean
# export PATH=$PATH:/usr/local/bin
# echo "export PATH=\$PATH:/usr/local/bin" >> /root/.bash_profile
Libs para o Python
- Python Imaging Library
- LibXSLT
- LibXML2
# cd /usr/ports/graphics/py-imaging
# make install clean
# cd /usr/ports/textproc/libxslt
# make install clean
# cd /usr/ports/textproc/libxml2
# make install clean
# cd ../py-libxml2
# make install clean
# cd ../py-xml
# make install clean
Agora sim, seu Zope já pode ser instalado sem problemas de quedas por falta de memória, é claro que ainda assim podemos receber a mensagem de erro, mas tenha certeza, não será mais por que seu BSD precisa de configurações. :D
Até a próxima.
Publicado originalmente por Cleber J Santos em:
FreeBSD + Zope/Plone, uma idéia frustrante? - cleberjsantos.com.br