FreeBSD + Zope/Plone, uma idéia frustrante?
O Python, Zope e Plone formam uma equipe maravilhosa nas construção de pequenos, médios e grandes portais e para o gerenciamento de conteúdo, mas e quando as coisas começam a dar erro de memória?
É sempre interessante ver as pessoas reclamando que recebe 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 infrome 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 vise 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 tão famoso Zope MemoryError, isso normalmente ocorre quando um ou mais processos do Zope é executado com falta de memória, isso porque no BSD o padrão de memória máximo por processos é muito pequeno, exigindo que seja 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.
Temos ainda um outro probleminha, isso com relação ao Python, que normalmente fica processando /var/tmp e /tmp e isso fez com que ele se complique para descobrir por que 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 passa desabercebidos, e que no futuro pode ser um grande problema. E claro depois de ter-mos feito as modificações acima, temos que também fazer as alterações abaixo.
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:
# /etc/sysctl.conf
net.inet.ip.forwarding=1
net.inet.ip.fastforwarding=1
net.inet6.ip6.forwarding=1
Em seguida, certifique-se de que o aceite de filtro HTTP está carregado no kernel, pode-se verificar isso, executando o comando:
Edite /boot/loader.conf e adicione a seguinte linha de modo que quando reiniciar o computador, o módulo será carregado no kernel.
# /boot/loader.conf
accf_http_load="YES"
Também podemos carregar o módulo imediatamente, basta executar o comando:
Novamente vamos editar o arquivo /etc/sysctl.conf para tornar estas alterações permanentes:
# /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
Editando o arquivo /boot/loader.conf
NOTA: Aqui teremos que dar um restart para os novos valores sejam setados nos parâmetros.
# /boot/loader.conf
kern.ipc.semmni=256
kern.ipc.semmns=512
kern.ipc.semmnu=256
accf_http_load="YES"
Depois disso tudo, basta que você certificar-se de que o Python esteja instalado no sistema, assim como algumas bibliotécas 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
# 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 confgurações :D
Até a próxima.
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 vise 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 tão famoso Zope MemoryError, isso normalmente ocorre quando um ou mais processos do Zope é executado com falta de memória, isso porque no BSD o padrão de memória máximo por processos é muito pequeno, exigindo que seja 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 fez com que ele se complique para descobrir por que 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 passa desabercebidos, e que no futuro pode ser um grande problema. E claro depois de ter-mos 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:
# /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 está carregado no kernel, pode-se verificar isso, executando o comando:
# Kldstat
Edite /boot/loader.conf e adicione a seguinte linha de modo que quando reiniciar o computador, o módulo será carregado no kernel.
# /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:
# /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 os novos valores sejam setados nos parâmetros.
# /boot/loader.conf
kern.ipc.semmni=256
kern.ipc.semmns=512
kern.ipc.semmnu=256
accf_http_load="YES"
Depois disso tudo, basta que você certificar-se de que o Python esteja instalado no sistema, assim como algumas bibliotécas 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 confgurações :D
Até a próxima.