Cyrus IMAP 2.5.0: Um horizonte promissor para o projeto !

Olá ! É com muito prazer que escrevo sobre a restruturação do projeto Cyrus IMAP. O Cyrus é um dos servidores POP/IMAP livres mais bem conceituados e seu ambiente Aggregator, que permite a distribuição de caixas em múltiplos servidores, é um dos grandes diferenciais desta solução.

Mas de fato o projeto encontrava-se parado, a última versão (2.4.17) havia sido lançada em Dezembro de 2012 e desde então apenas versões beta da integração do Caldav com esta versão foram lançadas.

Porém, no dia 19 de Fevereiro, Bron Gondwana (um dos principais desenvolvedores do projeto) anunciou a reformulação do projeto, com a formação da Cyrus Foundation, que captou recursos (financeiros e desenvolvedores) para levar o projeto a uma nova era ! As metas principais são: lançar o Cyrus 2.5.0 em Março de 2015 e a versão 3.0 em Julho do mesmo ano. Foi notória a empolgação da comunidade com este anuncio.

E cumprindo o cronograma, Jeroen van Meeuwen anunciou a liberação da versão 2.5 no dia 03 de Março :

https://docs.cyrus.foundation/imap/release-notes/2.5-current.html

Escreverei muito sobre o Cyrus este ano ! Por enquanto, seguem algumas das melhorias da versão 2.5.0:

  • AUTOCREATE
  • Suporte Caldav e Carddav
  • Suporte estendido de quotas: Número de pastas, mensagens e annotations
  • RFC 5464: METADADOS IMAP
  • Notificações de eventos
  • Melhorias da distribuição de partições: Mais opções para distribuição entre Backends e partições
  • Novo formato para o arquivo mailboxes.db
  • Suporte a bases twoskip: Mais segura, rápida do que o formato skiplist
  • Conta “Catchall” para o protocolo LMTP

Cyrus Aggegator: IMAP com escalabilidade

Em um artigo anterior, eu apresentei o Cyrus Imap e suas principais funcionalidades:

https://respirandolinux.wordpress.com/2013/03/20/sobre-o-cyrus-imap/

Agora apresento o Cyrus Aggregator, recurso nativo para escalabilidade do Cyrus. O ambiente Aggregator (muito vezes chamado também de Murder, devido a um artigo que foi publico com o título “Cyrus Aggregator: The Imap Murder”), permitir distribuir as caixas postais IMAP e POP entre diversos servidores de forma transparente aos usuários, isto é, sendo apresentado como único ambiente.

 A solução possui três classes de servidores: Frontend, Backend e Mupdate. Os clientes IMAP/POP se conectam aos servidores Fontends que por sua vez realizam a consulta no servidor Mupdate obtendo a localização da caixa postal do cliente conectado e o servidor Mupdate informa aos Fontends que estabelecem a comunicação com o Backend trazendo a caixa postal do usuário. Os servidores Backend armazenam as caixas postais e informam ao servidor Mupdate a sua localização, permissões e mudanças, o Mupdate sincroniza com os Frontends a posição das caixa postais e controla para que não haja conflitos.

Nesta arquitetura, os servidores Frontend recebem a relação de caixas postais do ambiente do servidor Mupdate, esta classe de servidor não possui dados, portanto é redundante em todos os aspectos. Se a relação de caixas postais corromper em algum servidor Frontend, basta remover essa base e sincronizar com o Mupdate novamente. É possível adicionar novos servidores Frontend e Backend a qualquer momento, sem impacto no ambiente.

 

 

Expresso 2.5: Instalando no Debian 7

Expresso 2.5: Instalando no Debian 7

Colaboração de Elias Silva (elias.eps@dpf.gov.br)

A versão 2.5.1 do Expresso não é compatível com a versão do PHP dos repositórios do Debian 7 (Wheezy), por utilizar a versão 5.4 e até o momento o Expresso estar compatível somente com a versão 5.3

Porém, é possível efetuar a instalação através do downgrade da versão do PHP para a 5.3, utilizando os pacotes do Debian 6 (Squeeze), para isto, execute os seguintes passos:

1 – Adicione os repositórios do Debian Squeeze no /etc/apt/sources.list (sem remover as referências para os pacotes da versão 7:

# debian squeeze

deb http://ftp.debian.org/debian/ squeeze main contrib non-free

deb http://security.debian.org/ squeeze/updates main contrib non-free

Exemplo com os repositórios completos:

# debian wheezy

deb http://ftp.br.debian.org/debian/ wheezy main non-free contrib

deb http://ftp.br.debian.org/debian/ wheezy-updates main non-free contrib

deb http://security.debian.org/ wheezy/updates main non-free contrib

2 – Crie as configurações para o APT utilizar os pacotes do PHP 5.3 dos repositórios do Squeeze no arquivo /etc/apt/preferences.d/php53:

Package: libphp5*

Pin: release a=oldstable

Pin-Priority: 700

Package: phpapi*

Pin: release a=oldstable

Pin-Priority: 700

Package: libapache2-mod-php5*

Pin: release a=oldstable

Pin-Priority: 700

Package: php5*

Pin: release a=oldstable

Pin-Priority: 700

Package: libapache2-mod-php5

Pin: release a=oldstable

Pin-Priority: 700

Package: php-pear

Pin: release a=oldstable

Pin-Priority: 700

Package: php-apc

Pin: release a=oldstable

Pin-Priority: 700

Package: libgv-php5

Pin: release a=oldstable

Pin-Priority: 700

Package: *

Pin: release a=stable

Pin-Priority: 600

3 – Atualize a base e instale os pacotes abaixo:

apt-get update

apt-get install -y apache2-mpm-prefork libapache2-mod-php5 apache2-utils \

 php5 php5-common php5-dev php5-gd php5-imap php5-ldap php5-pgsql php5-cgi php5-mcrypt \

 php5-cli php5-curl php5-xmlrpc php5-memcache php5-pspell libgv-php5 zip unzip memcached

apt-get install -y tzdata-java/wheezy

apt-get install -y openjdk-6-jre-headless

apt-get install -y libmemcached5

apt-get install aspell aspell-en aspell-pt-br

4 – Efetuada a instalação do Apache e PHP 5.3, efetue o Download do instalador do Expresso e dentro do diretório INSTALL execute os comandos abaixo:

sed -e ‘s|validaSO “Debian” “6.0”|validaSO “Debian” “7.1”|g’ expressoInstall.sh > expressoInstall.sh.new

cp -r expressoInstall.sh.new expressoInstall.sh

./expressoInstall.sh

5 – Entre no diretório INSTALL debian/squeeze/etc/apache2/ e execute os comandos abaixo:

sed -e “s|Include /etc/apache2/httpd.conf|#Include /etc/apache2/httpd.conf|g” apache2.conf > /etc/apache2/apache2.conf

sed -e ‘s|LoadModule ssl_module|#LoadModule ssl_module|g’ sites-available/expresso > /etc/apache2/sites-available/expresso

Feito isso, basta reiniciar o serviço do Apache e utilizar o expresso normalmente.

Resolvendo inconsistências entre servidores Backend e Mupdate Master (Murder)

É possível que a relação de caixas postais do servidor Mupdate (Murder) perca a consistência com os servidores Backend do ambiente, como por exemplo uma caixa postal não estar mais listada no Backend e o Mupdate ainda a mantenha em sua lista. Isso pode ocorrer por falhas de comunicação (rede) entre os servidores ou erros de I/O no Mupdate. Como o servidor Mupdate é autoritativo no ambiente do Cyrus Aggregator, isto é, sua relação é considerada mandatória, não é possivel forçar novamente a criação de uma caixa no Backend que erroneamente esteja sendo listada no Mupdate.

No caso de ocorrer muitas inconsistências, o procedimento recomendado é:

  1. Parar o serviço do Cyrus no servidor Mupdate
  2. Parar o serviço do Cyrus no Backend
  3. Remover a relação de caixas posais (mailboxes.db) no servidor Mupdate
  4. Executar o comando ctl_mboxlist -m -a -w no servidor Backend como usuário Cyrus e com o serviço parado, o -w irá simular a operação, caso esteja de acordo, basta executar novamente sem esta opção.

Porém, não é viável parar o serviço caso ocorram pequenas inconsistências, para isso o utilitário cyr_dbtool do Cyrus, pode ser utilizado, ele consegue manipular o arquivo mailboxes.db, que geralmente fica no formato skiplist, sem a necessidade parar o serviço. Vejamos sua utilização:

/usr/lib/cyrus/bin/cyr_dbtool /caminho/mailboxes.db skiplist show

Informamos o caminho do arquivo (não é permitido utilizar caminhos relativos), seu formato, e por último, a operação a ser executada. Neste caso irá listar todos os registros presentes no arquivo.

Exemplo com o resultado do comando executado em um servidor Mupdate:

user.fabio            1 nome_do_backend!default fabio    lrswipkxtecda
user.fabio.Drafts    1 nome_do_backend!default fabio    lrswipkxtecda    
user.fabio.Sent     1 nome_do_backend!default fabio    lrswipkxtecda        
user.fabio.Trash    1 nome_do_backend!default fabio    lrswipkxtecda

Para remover um registro, utilizamos a operação delete:

/usr/lib/cyrus/bin/cyr_dbtool /caminho/mailboxes.db skiplist delete user.fabio
/usr/lib/cyrus/bin/cyr_dbtool /caminho/mailboxes.db skiplist delete user.fabio.Drafts
/usr/lib/cyrus/bin/cyr_dbtool /caminho/mailboxes.db skiplist delete user.fabio.Sent
/usr/lib/cyrus/bin/cyr_dbtool /caminho/mailboxes.db skiplist delete user.fabio.Trash

Desta forma, os registros serão removidos imediatamente da base, sendo possível criar as caixas novamente no servidor Backend. O comando não permite o uso de caracteres coringas.

Cyrus Imap: Eliminar mensagens “fetching user deny” no código

Olá ! Anteriormente, eu havia publicado uma dica para remover as mensagens “fetching user_deny” geradas pelo cyrus dos logs criando um filtro no Rsyslog (https://respirandolinux.wordpress.com/2013/01/16/cyrus-imap-muitas-mensagens-fetching-user_deny-no-log/), caso esteja compilando o Cyrus, segue o link com o patch para eliminar essas mensagens direto no código:

github.com/fsschmidt/cyrusimap/blob/master/Patches/user_deny_silence.patch

Obs.: Testado com a última versão até o momento, 2.4.17.

Scripts para o Cyrus Imap: Criar caixas postais e definir quota

Em um post anterior, compartilhei dois scripts, para definir permissão para o usuário admin e remover caixas postais no Cyrus Imap, agora compartilho com vocês os scripts para criar caixas postais e definir quota, também criei um script maior que além de criar a caixa postal já define a permissão e aplica a quota.

Os scripts estão disponibilizados em https://github.com/fsschmidt/cyrusimap conforme abaixo:

Criar caixa postal:

https://github.com/fsschmidt/cyrusimap/blob/master/Scripts/criar_caixas.pl

Definir quota:

https://github.com/fsschmidt/cyrusimap/blob/master/Scripts/setarquota.pl

Criar a caixa postal definindo permissão e quota:

https://github.com/fsschmidt/cyrusimap/blob/master/Scripts/criar_caixas_completo.pl

Conceitos de groupware

Olá , apresento aqui alguns conceitos sobre Groupware, termo cada vez mais empregado por soluções que antes tinham somente o correio eletrônico como foco.

Software colaborativo, ou groupware, pode ser definido como um conjunto de aplicações, síncronas e assíncronas, isto é , que ocorrem ao mesmo tempo e em tempos diferentes, respectivamente, integradas em um ambiente para promover o trabalho cooperativo de um grupo de pessoas envolvida em tarefas ou objetivos comuns. Serviços de correio eletrônico, agenda compartilhada, mensagens instantâneas, são exemplos de softwares que compõem um groupware.

Qual o próposito das soluções de groupware?

A adoção de um software colaborativo visa melhorar o fluxo de informações, com o aumento da rapidez e precisão que essas informações fluem pelo ambiente, criando interatividade entre os usuários da organização (que podem estar em pontos geográficos distintos) e permitindo que estes possam cooperar entre si.

Como obter sucesso na implantação de um groupware?

Para sucesso na implantação de uma solução de groupware é necessário que a utilização seja fácil e os recursos e informações estejam claramente acessíveis, uma vez que para o usuário a interface é o sistema. Obviamente não se pode preterir uma boa infraestrutura para implantação da solução de groupware, sendo que a aplicação e todos os seus componentes devem sempre estar disponíveis aos usuários.