raspberry pi + xbmc + transmission + no-ip + nas + owncloud

24 Outubro 2014 Por Adriano Afonso

Raspberry Pi Model B+

EDIT: Como o Raspberry Pi B+ é um pouco limitado, e como consegui comprar um B a um preço acessível, abandonei esta configuração. No entanto ainda é valida para algumas experiências que possam realizar. Aconselho a ver os meus posts mais recentes.

Comprei um Rasp Model B+ 512Mb ao Tiago Carrondo e desde aí tenho feito algumas incursões mais profundas no Debian através do meu “Raspi”.

A distribuição que escolhi, depois de ter experimentado o OpenELEC e não ter gostado muito por ser um pouco lento (sem mexer no overclock, como é óbvio) foi o RaspBMC, bem mais leve, fluido e com base de Debian que era aquilo que eu queria.

A instalação em Windows é relativamente fácil, é só sacar a aplicação que ela instala automaticamente para o uSD, permitindo configurar logo o IP fixo, caso seja necessário (como é o meu caso).

Depois de instalado, e de efectuar os devidos:

sudo apt-get update
sudo apt-get upgrade
sudo apt-ger dist-upgrade

 Transmission

Passei à instalação do Transmission. Cedo descobri que os add-ons são apenas plugins que permitem interagir com aplicações instaladas, e portanto o Transmission não é instalado com o add-on e terá de ser instalado à parte.

Segui este tutorial, mas tive de fazer algumas correcções para que tudo funcionasse. Acrescento que devem sempre já ter ligado o vosso disco rígido externo, com um nome plausível e fácil de escrever (sem coisas esquisitas como maiúsculas e acentos e cedilhas). Então, instalar o transmission-daemon:

sudo apt-get install transmission-daemon

De seguida parar o serviço para o podermos configurar:

sudo /etc/init.d/transmission-daemon stop

Abrir o ficheiro de configuração:

sudo nano /etc/transmission-daemon/settings.json

E alterar os seguintes parâmetros:

"download-dir": "/media/HDD/Download",
"incomplete-dir": "/media/HDD/Download/_incomplete",
"incomplete-dir-enabled": true, 
"rpc-password": "password", 
"rpc-username": "username",
"rpc-whitelist": "*.*.*.*",

download-dir é Directoria de descarregamentos, onde HDD é o nome do vosso disco. incomplete-dir é a directoria dos descarregamentos temporários, que pode ser activa ou inactiva pelo incomplete-dir-enabled, com true ou false. rpc-whitelist irá depois permitir o acesso a redes externas. rpc-password e rpc-username serão o user e pass respectivamente do acesso web ao Transmission (a pass será automaticamente encriptada). Reiniciar o serviço.

sudo /etc/init.d/transmission-daemon start

Depois terá de ser dado acesso de escrita ao transmission-daemon:

sudo chmod g+rw /media/HDD/Download
sudo chgrp -R debian-transmission /media/HDD/Download

No entanto isto para mim não funcionou. Tive de fazer um “hack” e dar permissões de root ao transmission-daemon (se alguém souber uma solução melhor, agradeço o ajuda nos comentários). Abrir então a configuração do transmission-daemon:

sudo nano /etc/init.d/transmission-daemon

E atribuir “root” ao user, em vez de USER=debian-transmission:

USER=root

Agora é só instalar o add-on do Transmission no XBMC e atribuir o user e a pass definida anteriormente. E está feito.


No-ip

Para instalar o no-ip usei este how-to, mas também não foi à primeira, e tive de fazer um mix entre este e o anterior.

Para compilar o no-ip provavelmente terão de instalar em primeiro lugar o:

sudo apt-get install build-essential

Depois descarregar o no-ip:

sudo wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz

Descompactar:

sudo tar vzxf noip-duc-linux.tar.gz

Listar para ver que pasta foi criada e entrar dentro desta:

ls
cd noip-2.*.*.*

Compilar e instalar:

sudo make
sudo make install

Durante a instalação deverão ser pedidas as configurações do vosso no-ip. Para o iniciar:

sudo /usr/local/bin/noip2

No entanto insto não faz com que ele inicie automaticamente. Para isso é preciso criar um script no init.d para que ele corra cada vez que se reinicie. De notar que dei o nome do script igual ao programa.

cd /etc/init.d/
nano noip2

Este foi o script que funcionou, depois de ter utilizado o BEGIN INIT INFO daqui e o resto daqui (mais umas tentativas e erro):

#! /bin/sh
# /etc/init.d/noip2

# Supplied by no-ip.com
# Modified for Debian GNU/Linux by Eivind L. Rygge <eivind@rygge.org>
# Updated by David Courtney to not use pidfile 130130 for Debian 6.
# Updated again by David Courtney to "LSBize" the script for Debian 7.

### BEGIN INIT INFO
# Provides:          noip2
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

# . /etc/rc.d/init.d/functions  # uncomment/modify for your killproc

DAEMON=/usr/local/bin/noip2
NAME=noip2

test -x $DAEMON || exit 0

case "$1" in
    start)
    echo -n "Starting dynamic address update: "
    start-stop-daemon --start --exec $DAEMON
    echo "noip2."
    ;;
    stop)
    echo -n "Shutting down dynamic address update:"
    start-stop-daemon --stop --oknodo --retry 30 --exec $DAEMON
    echo "noip2."
    ;;

    restart)
    echo -n "Restarting dynamic address update: "
    start-stop-daemon --stop --oknodo --retry 30 --exec $DAEMON
    start-stop-daemon --start --exec $DAEMON
    echo "noip2."
    ;;

    *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac
exit 0

A seguir o script deverá ser tornado um executável/ com permissões de execução e também de seguida efectuar o registo no startup:

chmod 755 /etc/init.d/noip2
chown pi /usr/local/etc/no-ip2.conf
update-rc.d noip2 defaults

Por fim testar com start e stop e verificar se corre como previsto e não retorna erros.

/etc/init.d/noip2 start
/etc/init.d/noip2 stop

Caso seja necessário reconfigurar o no-ip, basta correr o seguinte comando:

 

/usr/local/bin/noip2 -C

 

 


NAS

A partir do momento que é instalado o XBMC, já dentro do RaspBMC, o vosso rasp passa a ser um NAS. No entanto tive alguns problemas com a velocidade do disco em NTFS. Para terem a ideia, a seguir apresento o resultado do comando:

sudo hdparm -tT /dev/sda

/dev/sda1:
Timing cached reads:   120 MB in  2.02 seconds =  59.38 MB/sec
Timing buffered disk reads:  52 MB in  3.05 seconds =  17.06 MB/sec

59.38 MB/sec é um pouquinho lento. Depois de alguma pesquisa encontrei este tópico (que convém ler) e este, e, não tendo erros no dmesg acabei por fazer o que se segue. Primeiro, para saber o meu UUID do disco externo:

sudo blkid /dev/sda1

Adicionar esta linha, em último (substituir o <UUID> pelo vosso):

UUID=<UUID> /media/HDD ntfs-3g noatime 0 0

ao fstab em:

sudo nano /etc/fstab

E estes forma os resultados:

/dev/sda1:
Timing cached reads:   128 MB in  2.02 seconds =  63.41 MB/sec
Timing buffered disk reads:  54 MB in  3.04 seconds =  17.75 MB/sec

/dev/sda1:
Timing cached reads:   256 MB in  2.00 seconds = 127.95 MB/sec
Timing buffered disk reads:  68 MB in  3.02 seconds =  22.55 MB/sec

Consideravelmente melhor, especialmente nos blocos de 256Mb.

Obviamente, se alguém tiver melhores sugestões/fixes, deixem nos comentários por favor.


Reconfigurar mounts

Depois de alguns problemas com a “potencia” que o rasp precisa (afinal é bem esquisitinho) especialmente quando temos um disco externo ligado, deixou de me montar este.

Depois de alguns reboots, decidiu não me montar nem por nada e lá tive de o fazer sozinho. Segui este tutorial para o fazer. Primeiro há que ver se ele está ligado:

sudo blkid

Isto vai listar os discos estão ligados. Cuidado que se o rasp não tiver power suficiente o disco pode simplesmente não arrancar e obviamente não ser detectado.  O /dev/sda1 deverá ser o nosso disco. Depois confirmar se a pasta existe no /media/:

cd /media/
ls

Se não estiver lá, é porque provavelmente não está montado. Portanto há que criar a pasta:

sudo mkdir /media/<nome_do_disco>

E a seguir montar o disco:

sudo mount -t ntfs-3g -o uid=pi,gid=pi /dev/sda1 /media/<nome_do_disco>

E não esquecer de dar as permissões devidas ao mount:

sudo chmod 775 /media/<nome_do_disco>

Para garantir que o mount seja mantido depois de reiniciar, o melhor adicionar a seguinte linha ao fstab. Primeiro aceder ao fstab:

sudo nano /etc/fstab

Depois adicionar a seguinte linha:

UUID=<uuid_do_disco> /media/<nome_do_disco> ntfs-3g noatime 0 0

 


OwnCloud

Não instalem o OwnCloud através do apt-get no raspbian, a versão que está nos repositórios não é actualizada há um tempo (4.x) e para além disso mexe em muitas das configurações não abordadas aqui.

Para instalar a minha OwnCloud segui este tutorial, pois queria algo mais detalhado e que me permitisse também definir um disco externo como armazenamento.

Outra alteração que tive de fazer depois de ter posto tudo a funcionar, foi deixar de usar SQLi e mudar para MySQL. Pelo que percebi depois da análise de alguns fóruns deste erro que me deu:

Error PHP Session has been closed - no further changes to the session as allowed at /var/www/lib/private/session/memory.php#80 2014-11-13T12:42:21+00:00
Fatal remote An exception occurred while executing 'UPDATE "oc_filecache" SET "size"=? WHERE "fileid" = ?': SQLSTATE[HY000]: General error: 5 database is locked 2014-11-13T12:42:21+00:00

é que o SQLi é fraco quando toca a muitos ficheiros, e muitos deles grandes.

Também quando tentei instalar pela primeira vez o MySQL, tive alguns problemas na instalação, pois havia dependências quebradas. Segui a resolução daqui.  Continuem a ler pois já actualizei para as novas configurações com MySQL.

Outro problema é que o XBMC já corre na porta 80 , e isto impede que o apache corra. Portanto, mais uma vez, tive de andar a dar uma voltas para por tudo a funcionar. Descobri isto pela lógica, e porque instalei primeiro apenas o apache:

sudo apt-get install apache2

Primeiro, na instalação do apache, obtive este erro: Starting web server: apache2apache2: Could not reliably determine the server’s fully qualified domain name, using ::1 for ServerName
Aceder ao:

sudo nano /etc/apache2/apache2.conf

E adicionar a linha seguinte mesmo debaixo do #ServerRoot:

#ServerRoot "/etc/apache2"

# ServerName: the name of your server.
ServerName localhost

A seguir obtive este erro:  apache2(98)Address already in use: make_sock: could not bind to address [::]:80. Ora, isto porque obviamente a o nosso serviço xbmc.bin está a ocupar a porta do apache.

sudo netstat -ltnp | grep ':80'

Aqui há duas hipóteses, ou fecham o acesso web do XBMC (o que não é muito inteligente porque podem se esquecer e reactivar) ou mudar a porta do apache. Optei pela segunda:

sudo nano /etc/apache2/ports.conf
sudo nano /etc/apache2/sites-enabled/000-default

Agora sim, arrancar o apache:

sudo service apache2 start
sudo service apache2 status

Depois, em principio, é só instalar os seguintes pacotes (o smbclient já está no xbmc):

sudo apt-get install php5 php5-gd php-xml-parser php5-intl
sudo apt-get install php5-sqlite php5-mysql curl libcurl3 php5-curl
#sudo apt-get install smbclient
#os seguintes é para o owncloud correr em mysql
sudo apt-get install libmysqlclient-dev mysql-client
sudo apt-get install -f mysql-server

Agora é sacar o ultimo Owncloud (ver o link em http://owncloud.org/install/#, na opção Archive file>Unix):

sudo wget https://download.owncloud.org/community/owncloud-8.x.x.tar.bz2

Descomprimir:

tar -xjf owncloud-8.x.x.tar.bz2

Mover para a pasta /var/www:

sudo cp -r owncloud /var/www/

E dar as devidas permissões:

sudo chown -R www-data:www-data /var/www/

A seguir é preciso editar o seguinte ficheiro:

sudo nano /etc/apache2/sites-enabled/000-default

Para:

        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

Permitindo assim o ownCloud fazer override ao tamanho máximo dos uploads. A seguir há que verificar se a pasta do ownCloud já tem o ficheiro .htaccess (ls -al), senão, há que o criar:

cd /var/www/owncloud
ls -al
sudo touch .htaccess
sudo chown www-data:www-data .htaccess

Agora activar os dois seguintes módulos que irão ser necessários:

sudo a2enmod rewrite
sudo a2enmod headers
sudo service apache2 restart

Para melhorar a performance no rasp, pois ele coitado tem pouca memória, convém ajudar com o seguinte pacote:

sudo apt-get install php-apc

Pode-vos dar jeito olhar para a base de dados em MySQL, para isso instalem o phpMyAdmin.

sudo apt-get install phpmyadmin

Pelo meio dos vossos testes e configurações, não é má ideia de todo activar o log do PHP.

 sudo nano /etc/php5/apache2/php.ini

E alterar as seguintes opções:

display_errors = off
log_errors = on
error_log = /var/log/php-errors.log
E não esquecer de dar as devidas permissões:
sudo touch /var/log/php-errors.log
sudo chown www-data:www-data /var/log/php-errors.log

OwnCloud num disco externo (NTFS)

A seguir o objectivo é passar o ownCloud para o disco externo. Convém verificar se os mounts estão no sítio certo. Se o mount for automático, cuidado que o raspbmc pode mudar o os códigos (sda/sdb) dos discos ao reiniciar/ligar outro disco. Convem verificar sempre com o comando blkid. Primeiro que tudo há que parar o apache.

sudo service apache2 stop

Como no meu caso tenho uma pasta no apache e uma pasta também no disco externo para o owncloud, pretende-se mover a pasta para o local respectivo. Na primeira instalação, movi toda a pasta do owncloud como o tutorial recomendava, mas como o disco está em NTFS e posso precisar dele ainda neste formato, deu-me alguns problemas com as permissões e até que o servidor rebentou. No entanto inventei outra solução. Depois de instalar o owncloud e criar o meu utilizador, movi apenas a pasta do meu user. Desta maneira, corrigir para:

sudo mv /var/www/owncloud/data/<user> /media/<disco>/

A seguir, criar um symbolic link para a directoria do owncloud:

sudo ln -s /media/<nomedodisco>/<user>/ /var/www/owncloud/data

Depois há que atribuir as permissões correctas à pasta do owncloud:

sudo chown -R www-data:www-data /media/<nomedodisco>/<user>

Arrancar o apache, e está feito!

sudo service apache2 start

Testem de imediato, colocando uma pasta e vejam se sincroniza. O meu leva algum tempo, mas sincroniza lindamente. Agora preciso de uns tweeks para ver se ponho a interface web mais rápida.

Há outras opções que aconselho a ver, como estas: