segunda-feira, 11 de maio de 2015

Media Center e DVR numa única Raspberry Pi usando Kodi e Zoneminder - Passo a passo

"Fácil como cair e quebrar um braço" 


Este texto mostra como montar um sistema de monitoramento de câmeras e um Media Center por menos de R$300.00


A nova versão da Raspberry Pi é uma máquina muito interessante:

  • CPU: 900MHz quad-core ARM Cortex-A7
  • RAM: 1GB 

E, como o modelo 1 B+, também tem:

  • 4 portas USB
  • 40 pinos de GPIO
  • Porta Full HDMI
  • Ethernet
  • Saída combinada de video composto e audio stereo
  • Interface para câmera  (CSI)
  • Interface de display  (DSI)
  • Entrada de cartão Micro SD
  • Núcleo de video gráfico VideoCore IV 3D


Por ter um processador ARM7, pode rodar qualquer distribuição linux ARM GNU. Reza a lenda que a Microsoft irá portar o Windows 10 para ela. Esperemos, pois.

Existe muita gente usando as Raspberries como Media Center, usando principalmente a distribuição OpenElec + Kodi. Mais detalhes em www.openelec.tv
Também existe muita gente usando Raspberries como sistemas de segurança de baixo custo usando o zoneminder. Mais detalhes em www.zoneminder.com.

Eu queria os dois ao mesmo tempo, numa mesma raspberry. Já usando o kodi numa Raspberry 1 há mais de um ano em casa, tratei logo de pegar outra e experimentar o zoneminder.
Para tristeza, a Rasp 1 mal dava conta de monitorar uma câmera - eu precisava de duas.
Assim, quando lançaram a Rasp 2, quatro vezes mais rápida, fiz a conta simples e concluí que daria conta de duas câmeras mais o Kodi e ainda sobraria um pouquinho.

Só que o OpenElec carece de um monte de coisa necessária para instalar o zoneminder. Ele tem o mínimo necessário para rodar o Kodi e só. Afinal, foi otimizado para Media Centers e seria injusto reclamar disso. Pelo contrário, é um trabalho excelente. Mas não atende ao propósito e meu conhecimento de linux me fez crer que daria um trabalhão enorme colocar de volta tudo o que arrancaram dele. 

Decidi então partir para uma distro mais completa e consegui o que queria usando o Debian para a Rasp 2, o raspbian.
Gravei-o num SD de 4Gb e no final de tudo ele estava com 3.7Gb ocupados. No meu caso, eu preferi mover os dados do Kodi, do zoneminder e do MySql para um pendrive, mas nada impede de se usar um cartão maior.
Quem preferir essa alternativa, basta ignorar os passos onde eu movo as coisas para o pendrive.

Para iniciar, precisaremos de:

  • Uma placa Raspberry Pi 2 Model B V1.1 (acredite, precisa da placa mesmo);
  • Um cartão micro SD de 4Gb ou maior;
  • Um teclado USB;
  • Um monitor ou TV com entrada HDMI;
  • Um pendrive de 4Gb ou superior (opcional, leia o texto);
  • Uma fonte de 5V - pode ser o carregador do celular com tomada micro USB;
  • Um ponto de rede ethernet;
  • Cabos para interligar tudo; 

Estando tudo à mão e conectado, vamos lá:

I - Instalando o raspbian

1.1. Baixe o arquivo atual, procurando em https://www.raspberrypi.org/downloads/
1.2. Extraia o zip e grave a imagem no cartão. Ao inserir o cartão, dê um dmesg no terminal para ver em que /dev ele está. No meu, ficou em /dev/sdb. Portanto, o comando para gravar o cartão é:
sudo dd if=nome-da-imagem.img of=/dev/sdb bs=4096

1.3. Dê um boot na Raspberry com o cartão. O debian deve iniciar normalmente. Após o primeiro boot, irá aparecer a configuração da raspberry. Selecione a opção que reajusta o tamanho das partições e reinicie o sistema.

A partir daqui, é tudo feito direto no terminal da raspberry. Se preferir, acesse-a via ssh a partir do seu computador. Os dados de login são:
username: pi
password: raspberry


II - Instalando o pendrive (opcional)

Rodando dmesg, o pendrive apareceu como /dev/sda. Veja como fica no seu caso e use o caminho nos comandos abaixo.
2.1 - Formate o pendrive como ext4:
sudo mkfs.ext4 /dev/sda1

2.2 - Edite o arquivo fstab para monta-lo no boot e crie o caminho para ele:
sudo mkdir /mnt/pendrive
sudo nano /etc/fstab

No final do arquivo, acrescente a linha:
/dev/sda1       /mnt/pendrive   ext4    defaults         0      1

Salve com CTRL-X e confirmando com Y.

2.3 - Monte o pendrive usando o comando
sudo mount -a

E confirme se está ok.



III - Instalando e configurando o Zoneminder


3.1 - No terminal, instale o zoneminder:
sudo apt-get update
sudo apt-get install zoneminder
Siga as instruções.


IV - Movendo os dados do MySql para o pendrive (opcional)

Siga os passos abaixo:
sudo /etc/init.d/mysql stop 
sudo cd /var/lib/mysql
ls -l  (para ver quais bases de dados existem)
sudo mkdir /mnt/pendrive/mysqldata
sudo chown -R mysql:mysql /mnt/pendrive/mysqldata
Importante: Somente as bases de dados precisam ser copiadas para o novo local. Assim, temos o mysql e performance_schema. (Não tenho certeza se é necessário mover esse segundo, mas movi e está tudo OK...).
sudo cp -r mysql /mnt/pendrive/mysqldata 
sudo cp -r performance_schema /mnt/pendrive/mysqldata
sudo chown -R mysql:mysql /mnt/pendrive/mysqldata/*
Em /etc/mysql/my.cnf, apenas a linha 'datadir' precisa ser alterada: 
sudo nano /etc/mysql/my.cnf
altere a linha:
datadir = /mnt/pendrive/mysqldata
Salve e feche (Ctrl+X e Y).
sudo /etc/init.d/mysql start



V - Colocando o site do zoneminder no apache:

sudo ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf
sudo apache2ctl restart


VI - Movendo os caminhos de imagens e eventos do Zoneminder para o pendrive (opcional)

sudo mkdir /mnt/pendrive/zmdata
sudo mkdir /mnt/pendrive/zmdata/images
sudo mkdir /mnt/pendrive/zmdata/events
sudo cp -av /var/cache/zoneminder/images /mnt/pendrive/zmdata/images
sudo cp -av /var/cache/zoneminder/events /mnt/pendrive/zmdata/events
sudo chown www-data:www-data /mnt/pendrive/zmdata/*

editar fstab
sudo nano /etc/fstab
E inserir no final:
/mnt/pendrive/zmdata/images /var/cache/zoneminder/images none defaults,bind 0 2
/mnt/pendrive/zmdata/events /var/cache/zoneminder/events none defaults,bind 0 2


VII - Instalando o Cambozola

O Zoneminder precisa desse plugin jvaa para mostrar os feeds das câmeras. Quando baixei, a versão era 0.936. Se for outra, não esqueça de alterar a última linha.
sudo sucd /usr/srcwget http://www.charliemouse.com:8080/code/cambozola/cambozola-latest.tar.gz
tar -xzf cambozola-latest.tar.gzcp cambozola-0.936/dist/cambozola.jar /usr/share/zoneminder/
exit

VIII - Renicie o sistema

sudo reboot

Neste ponto, o zoneminder deve iniciar automaticamente. Pode-se abrir a janela dele pelo navegador no endereço IP-da-raspberry/zm

A configuração do zoneminder, como adicionar câmeras e configura-las está fora do escopo deste post. Leia o manual do zoneminder!!!!! Em casa, duas câmeras IP com frame rate de 12 fps ocupa menos de 60% da CPU da Rasp.




IX - Instalando o Kodi



9.1 - No terminal, baixe e instale o Kodi:
sudo apt-get install kodi

9.2 - Para iniciar o kodi automaticamente, troque todo o conteúdo do arquivo de inicialização do kodi:
sudo nano /etc/init.d/kodi

apague todas as linhas e cole o texto abaixo:
#! /bin/sh
### BEGIN INIT INFO
# Provides:          kodi
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts instance of Kodi
# Description:       starts instance of Kodi using start-stop-daemon and xinit
### END INIT INFO
############### EDIT ME ##################
# path to xinit exec
DAEMON=/usr/bin/xinit
# startup args
DAEMON_OPTS=" /usr/bin/kodi-standalone -- :0"
# script name
NAME=kodi
# app name
DESC=Kodi
# user
RUN_AS=pi
# Path of the PID file
PID_FILE=/var/run/kodi.pid
############### END EDIT ME ##################
test -x $DAEMON || exit 0
set -e
case "$1" in
  start)
        echo "Starting $DESC"
        start-stop-daemon --start -c $RUN_AS --background --pidfile $PID_FILE  --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
        ;;
  stop)
        echo "Stopping $DESC"
        start-stop-daemon --stop --pidfile $PID_FILE
        ;;
  restart|force-reload)
        echo "Restarting $DESC"
        start-stop-daemon --stop --pidfile $PID_FILE
        sleep 5
        start-stop-daemon --start -c $RUN_AS --background --pidfile $PID_FILE  --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
;;
esac
exit 0

9.3 - Teste se está Ok chamando:
sudo /etc/init.d/kodi start

Se falhar, pode ser que precise habilitar o X para todos, chame:
sudo dpkg-reconfigure x11-common

e escolha "anybody".

estando ok, feche o Kodi e salve a inicialização:
sudo /etc/init.d/kodi stop
update-rc.d kodi defaults

X - movendo dados do kodi para o pendrive (opcional)

Crie uma pasta no pendrive para o kodi e mova tudo o que está nela:
sudo mkdir /mnt/pendrive/kodidata
sudo cp -av /home/kodi/.kodi/userdata /mnt/pendrive/kodidata

Depois, edite o fstab para montar o caminho na inicialização:
sudo nano /etc/fstab
Inclua no final:
/mnt/pendrive/kodidata /home/kodi/.kodi/userdata none defaults,bind 0 2

XI - habilitando o servidor web do Kodi.


Se você quiser controlar o Kodi via http (usando o browser ou os aplicativos para smartphones, é preciso habilitar o acesso ao Kodi via web.
No Kodi, vá em Settings → Services → Webserver → Allow control of Kodi via HTTP. Altere a porta para 8080, pois a porta 80 está em uso pelo Apache onde está rodando o zoneminder).


Aqui também, a configuração do Kodi está fora do escopo deste post. Leia o manual!!!!!



Pronto!!!
Agora, basta reiniciar tudo e ver se está OK.