Arquivo

Archive for maio \21\America/Belem 2014

Atualizar o Openfire automaticamente.

21 de maio de 2014 15 comentários
Openfire

COMO ATUALIZAR O OPENFIRE

 

O Openfire é um servidor de mensagens instatâneas que permite que clientes de um mesmo domínio troquem mensagens entre si de forma organizada e com regras de acesso. O mesmo pode ser integrado com Active Directory e utilizar um banco de dados externo (Oracle, Sql, Mysql) ou mesmo um bancozinho interno embutido chamado HSQLDB (Não recomendo esse banco, melhor usar um banco com mais opções como Oracle, M$ Sql ou Mysql.)

Há alguns dias saiu uma nova atualização para o Openfire, a 3.9.3.

Esta nova versão possui uma série de melhorias, elas podem ser consultadas aqui no changelog.

Vamos lá, primeiro vou descrever meu cenário:

Sistema Operacional: Debian 7.1 64 Bits
Banco de Dados: SQL Server (Windows 2008 R2 Enterprise)
Autenticação: LDAP do Active Directory
Versão do Openfire: 3.9.1
Diretório de Instalação: /opt/openfire

Bom, agora vamos atualizar.

Vale ressalvar que eu estou atualizando do meu jeito pois não vi nada oficial no site do desenvolvedor. Acredito que este tipo de atualização é válida para qualquer tipo de banco de dados e autenticação que você utilize.

Todos os comandos aqui representados são executados como root #!

Vejo que muita gente tem complicação na hora de atualizar o Openfire. Pensando nisso e visando otimizar minhas tarefas aqui na empresa, resolvi automatizar a atualização do openfire. Para isto eu criei um script em bash com os seguintes passos:

1 – Checa as versões do spark local e da versão disponível no site do desenvolvedor.
2 – Compara as versões
3 – Caso as versões sejam diferentes e a versão local do openfire seja menor, o script irá fazer backup do seu openfire e em seguida atualizar o mesmo.

 

Para baixar o script clique aqui. Apenas dê permissão de execução para ele:

chmod +x atualiza_openfire.sh

O script não sai direito aqui no blog não sei qual o motivo, mas você pode visualizar o script na integra aqui neste link:

Lembrando que o script quando acionado gera dois backups um compactado e outro, um diretório com o formato openfire_$versao_$data. Caso queira desfazer a atualização, basta você proceder da seguinte forma:

Mover o diretório que foi atualizado

mv /opt/openfire /opt/openfire_bug_atualizacao

Em seguida, voltar seu openfire comoe stava antes, igualzinho

cp -ar /opt/openfire_$versao_data /opt/openfire

Pronto, agora só reinicialize seu serviço:

/opt/openfire/bin/openfire stop
/opt/openfire/bin/openfire start

 

Segue parte do trecho do script

 

#!/bin/bash
#Obtem Versao do Openfire
#2014
#Autor: Jacques de Beijer - beijer00@gmail.com
#Livre divulgacao, mantenham os creditos


DATA=`/bin/date +%d%m%Y`

#Checa versao local do Openfire
versao=`cat /opt/openfire/bin/openfire | grep '"version ' | awk -F'"version ' '{ print $2 }' | awk -F'"' '{ print $1 }' | sort -u`

#Checa Versao do Openfire no site da Ignite Realtime
wget -q -O /tmp/openfire_checa_versao_novo.txt --no-check-certificate https://igniterealtime.org/projects/openfire/index.jsp
versao_nova=`cat /tmp/openfire_checa_versao_novo.txt | grep '<strong>Openfire' | cut -d'<' -f2 | cut -d' ' -f2` # | sed -e 's/\.//g'`

if [ `echo $versao | sed -e 's/\.//g'` -lt `echo $versao_nova | sed -e 's/\.//g'` ] ; then
echo "Necessario atualizar"
if [ ! -d "/opt/openfire" ]; then
echo "Diretorio do Openfire deafult não existe, impossivel continuar. Verifique seus diretorios!!!"
echo "Encerrando atualização!"
else
echo "Diretorio do Openfire OK! - Continuando instalacao"
echo "Obtendo nova versao do Openfire..."
wget -c --progress=dot -O /tmp/openfire_"`echo $versao_nova | sed -e 's/\./_/g'`".tar.gz http://download.igniterealtime.org/openfire/openfire_`echo $versao_nova | sed -e 's/\./_/g'`.tar.gz
echo "Compactando Diretorio atual - Backup escrito em: /opt/openfire_"$versao"_"$DATA".tar.gz"
tar cfz /opt/openfire_"$versao"_"$DATA".tar.gz /opt/openfire/
echo "Encerrando servico Openfire..."
killall -9 openfire
killall -9 java
echo "Movendo diretorio atual..."
mv /opt/openfire/ /opt/openfire_"$versao"_"$DATA"
echo "Descompactando nova versao e atualizando seu Openfire"
tar zxf /tmp/openfire_`echo $versao_nova | sed -e 's/\./_/g'`.tar.gz -C /opt/
echo "Habilitando suas configuracoes definidas"
cp -arp /opt/openfire_"$versao"_"$DATA"/enterprise /opt/openfire/
cp -arp /opt/openfire_"$versao"_"$DATA"/conf /opt/openfire/
cp -arp /opt/openfire_"$versao"_"$DATA"/plugins /opt/openfire/
cp -arp /opt/openfire_"$versao"_"$DATA"/resources /opt/openfire/
echo "Inicializando seu Openfire..."
/opt/openfire/bin/openfire start
echo "OPENFIRE ATUALIZADO - Aguarde 3 minutos para fazer login em seu cliente Jabber"
fi
else
if [ `echo $versao | sed -e 's/\.//g'` -eq `echo $versao_nova | sed -e 's/\.//g'` ] ; then
echo "Na eh necessario atualizar seu Openfire, ele ja esta na versao mais nova!!!"
else
if [ `echo $versao | sed -e 's/\.//g'` -gt `echo $versao_nova | sed -e 's/\.//g'` ] ; then
echo "A versao do seu Openfire detectada esta acima da versao mais recente disponibilizada pela Ignite Realtime. Verifique seu Sistema!!!"
fi
fi
fi

 

Bom, basicamente desta forma eu consigo manter meu openfire atualizado o tempo todo via crontab, não me preocupo mais com a atualização do mesmo.

 

Qualquer dúvida, entrem em contato.

 

Abraços