quinta-feira, 28 de junho de 2007

Segurança Patrimonial com o ZoneMinder

Introdução

Esse artigo vem a explicar a instalação e configuração do ZoneMinder, um sistema fantástico para monitoramento com câmeras de vigilância tanto locais (analógicas) quando pela rede (câmeras IP). O ZoneMinder da suporte até 32 câmeras analógicas, e tantas quantas seu hardware aguentar para câmeras IP.

Duas características muito interessante do ZoneMinder são os métodos de Monitoramento, como apenas monitorar, gravar, detectar movimentos, gravar ao detectar movimentos, etc e também o fato de gerar arquivos em diferente extensões (mpg, swf, avi, mov, etc) e armazena-los podendo utilizar qualquer programa para gravar-los em uma mídia e poder reproduzi-la posteriormente.

Usei como sistema base a distribuição Slackware 11 com o kernel 2.6.

Pré-requisitos

Instalar as seguintes CPANs:

  • Archive::Zip
  • Compress::Zlib
  • Date::Manip
  • DBD::mysql
  • DBI
  • IO::Stringy
  • MIME::Lite
  • MIME::Tools
  • MIME::Entity
  • LWP::UserAgent
  • PHP::Serialization
  • X10::ActiveHome
  • Module::Load

Baixe os seguintes pacotes do site http://www.linuxpackages.net

  • a52dec-0.7.4-i686-1jto.tgz
  • faad2-2.5p1-i486-1kjz.tgz
  • faac-1.25p1-i486-1kjz.tgz
  • lame-3.97-i686-1jto.tgz
  • xvidcore-1.1.2-i486-1kjz.tgz
  • x264-20070418-i486-1kjz.tgz
  • ffmpeg-20070419-i486-1kjz.tgz

Verifique se os seguintes pacotes estão instalados no Slackware, se não tiver isntale-os pelo slackpkg:

  • libogg
  • fontconfig
  • gnutls
  • xproto
  • renderproto
  • kbproto
  • libX11
  • libXau
  • libXdmcp
  • libXpm
  • libgcrypt
  • libgpg-error
  • libtheora
  • libvorbis
  • libxcb
  • libXrender
  • sdl

Estando tudo OK, instale usando o installpkg os tgzs que baixou anteriormente deixando o ffmpeg-20070419-i486-1kjz.tgz por último.

Tenha instalado e rodando o Apache, PHP e o MySQL.

Instalação

Baixe do site do http://www.zoneminder.com o tar.gz descompacte-o e entre na pasta src e edite o arquivo zm_mpeg.h e acrescente a seguinte linha #define INT64_C salve o arquivo. Depois edite o arquivo zm_mpeg.cpp na lina 281 e acrescente um & na frente de ofc deixando a linha desse jeito url_fclose(&ofc->pb); Volte para a pasta do ZoneMinder faça os paços a seguir:

# ./configure \
--prefix=/usr/local/zm \
--with-mysql=/usr/lib/mysql \
--with-webdir=/var/www/htdocs/zm \
--with-cgidir=/var/www/cgi-bin \
--with-ffmpeg=/usr \
--with-webuser=apache \
--with-webgroup=apache


Fiquem a vontade para alterar o configure.

# cd db
# mysql -u root -p


Logo abaixo cria-se o banco de dados e o usuário. deixei padrão, mas alterem pelo menos a senha!

mysql> \. zm_create.sql
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON zm.* to zmuser@localhost IDENTIFIED BY 'zmpass';
mysql> flush privileges;
mysql> exit;

# cd ..
# make
# make install


Precisamos instalar um pacote chamado Cambozola, que serve para um determinado tipo de streaming do ZoneMinder. Baixe o Cambozola do site http://www.charliemouse.com/code/cambozola/ e para instala-lo basta descompacta-lo e copiar o arquivo que está dentro da pasta dist chamado cambozola.jar para a raiz da pasta da web do ZoneMinder. Depois mude a permissão dele para 777 e o dono do arquivo e o grupo para nobody.

Se até aqui não houve nenhum erro, o ZoneMinder já está funcionando no seu http://localhost/zm

Configuração

Na primeira tela do ZoneMinder do lado superior direito, você pode alterar as opções do ZoneMinder. Abaixo segue as principais opções e seus valores.

Aba Path

ZM_PATH_ZMS = /cgi-bin/zms

Aba Web

ZM_WEB_RESIZE_CONSOLE = false

Aba Config

ZM_CAPTURES_PER_FRAME = 2 (Usando cameras analógicas, com placas com mais de um chip)

Aba Image

ZM_CAM_STREAM = auto
ZM_STREAM_METHOD = jpeg (Usando o Cambozola)
ou
ZM_STREAM_METHOD = mpeg (Usando o Flash)
ZM_MPEG_LIVE_FORMAT = asf (usando o Cambozola)
ZM_MPEG_REPLAY_FORMAT = asf (Usando o Cambozola)
ou
ZM_MPEG_LIVE_FORMAT = swf (Usando o Flash)
ZM_MPEG_REPLAY_FORMAT = swf (Usando o Flash)

ZM_OPT_CAMBOZOLA = true (Usando o Cambozola)
ZM_FFMPEG_FORMATS = Acrescentar o swf no final
ZM_OPT_MPEG = ffmpeg
ZM_PATH_FFMPEG = /usr/bin/ffmpeg

Aba Network

ZM_OPT_REMOTE_CAMERAS = true (Usando Cameras IP)
ZM_NETCAM_REGEXPS = false
ZM_HTTP_VERSION = 1.0

Existem outras opções, mas perceba que do lado de cada opção tem um (?) onde se tem a explicação de cada opção.

Placa de captura (Bt878)

Na minha experiência tenho 2 servidores rodando com o ZoneMinder configurado em um para câmeras IP e outra para câmeras analógicas. No primeiro servidor tenho 6 câmeras IP rodando e no segundo 22 câmeras locais rodando.

Utilizo no segundo servidor duas placas com chips Conexant baseados no Bt878 chamada Kodicom 4400R que da suporte cada uma a 16 câmeras e utiliza o drive bttv do kernel do Linux.

Placa Pico 2000 (4 câmeras)

Acrescentar a seguinte linha no modprobe.conf ou acrescente-a no arquivo /etc/modprobe.d/bttv:

options bttv gbuffers=16 card=77

Não esquecer de dar um ENTER no final da linha para dar uma quebra de linha

Placa Kodicom 4400R (16 Câmeras)

Para 1 placa, acrescentar a seguinte linha no modprobe.conf ou acrescente-a no arquivo /etc/modprobe.d/bttv:

options bttv gbuffers=16 card=133,132,133,133

Para 2 placas, acrescentar a seguinte linha no modprobe.conf ou acrescente-a no arquivo /etc/modprobe.d/bttv:

options bttv gbuffers=32 card=133,132,133,133,133,132,133,133

Não esquecer de dar um ENTER no final da linha para dar uma quebra de linha

Browser (Navegador)

Recomendo e muito a utilização do Mozilla Firefox. Porém "funciona" em qualquer navegador.

No caso do FireFox tem que modificar dois parâmetros para que funcione corretamente a exibição de todas as câmeras em uma janela só (conhecida como Montagem no ZoneMinder). Entre no about:config e edite os seguintes parâmetros:

network.http.max-connections-per-server de 8 para 32
network.http.max-persistent-connections-per-server de 2 para 32


Adicionando a câmera

Clique em Add New Monitor

Aba General

NAME = Nome para a câmera
SOURCE TYPE = Local (câmeras analógicas) ou Remote (câmeras IP)
FUNCTION = Monitor (exibe as imagens das câmeras), Modect (aciona o sensor de movimento e gera Alarmes), Record (grava o tempo todo a imagem das câmeras) e Modect (grava apenas quando acionado o sensor de movimento)

Aba Source

Se escolher LOCAL:
DEVICE PATH = /dev/video0 ou /dev/video1 ou /dev/video2 ou ...
DEVICE CHANNEL = Canal que vai variar de acordo com a quantidade de cameras
DEVICE FORMAT = PAL ou NTSC (geralmente NTSC)
CAPTURE WIDTH (pixels) = 320 (geralmente, depende da câmera)
CAPTURE HEIGHT (pixels) = 240 (geralmente, depende da câmera)

Se escolher REMOTE:
REMOTE HOST NAME = IP da camera IP
REMOTE HOST PORT = 80 (pode mudar de acordo com a câmera
REMOTE HOST PATH = video.cgi (no caso da minha câmera TrendNet)
REMOTE IMAGE COLORS = 24 bits
CAPTURE WIDTH (pixels) = 320 (geralmente, depende da câmera)
CAPTURE HEIGHT (pixels) = 240 (geralmente, depende da câmera)

Considerações Finais e Referências

O ZoneMinder é um sistema fantástico e serve para aplicações básicas (monitoramento residencial) ou até mesmo para aplicações empresárias (Bancos, Supermercados, etc).

No requisito hardware percebi que quanto maior é a quantidade câmeras maior a quantidade de memória (diretamente proporcional). No meu servidor com 22 câmeras só ficou legal com 2 GB de RAM.

Segue alguns sites que TÊM que ser visitado para implementar o ZoneMinder:

Documentação ZoneMinder:
http://www.zoneminder.com/fileadmin/downloads/README.html

Fórum ZoneMinder (IMPORTANTE):
http://www.zoneminder.com/forums/

Placas de Captura:
http://www.zoneminder.com/forums/viewtopic.php?t=8766&highlight=modprobe+conf+kodcon
http://www.linuxtv.org/v4lwiki/index.php/Kodicom_4400R
http://www.zoneminder.com/wiki/index.php/Kodicom_4400r

quarta-feira, 27 de junho de 2007

MSN Online (Windows Live Messenger)

Utilize o MSN (Windows Live Messenger) direto pelo seu navegador sem ter que instalar nada!!!! Segue a lista de sites que disponibilizam este serviço:

http://www.meebo.com.br/
http://webmessenger.msn.com/
http://www.ebuddy.com/
http://www.iloveim.com/
http://www.msn2go.com/
http://www7.messengerfx.com/

terça-feira, 26 de junho de 2007

Otimizando uso de memória RAM do Firefox

O Firefox é um excelente navegador porém consome muita memória.

Seguindo um passo a passo simples você conseguirá economizar bastante memória e não perderá muito desempenho.

Entre no Firefox e digite na barra de endereço about:config
Feito isso, clique com o botão direito do mouse na tela que abriu e depois vai em New -> Boolean
Irá abrir uma caixa para inserir o nome da propriedade, coloque config.trim_on_minimize, clique em OK e depois escolha True


Está feito. Feche e abra o Firefox novamente e faça os seus testes. No Linux utilize o comando top antes e depois da alteração e verá que a economia é de no mínimo 100 MB.