Configuração da seedbox com o Raspberry Pi
Objetivo: ter um cliente de torrent funcional, automático, com pouca necessidade de intervenção, partilha de rede/internet dos ficheiros completos e com baixo consumo energético. Isto requer que instalemos alguns pacotes no sistema:
- Transmission-daemon, a aplicação principal da seedbox, que permitirá transferir torrents
- Samba, para partilhar os ficheiros transferidos na rede local, com permissões de leitura e escrita
- Lighttpd, para partilhar os ficheiros na Internet, com permissões de leitura, e protegido com password
Opcionalmente, podem-se instalar estes pacotes adicionais para facilitar o trabalho de administração:
sudo apt-get install vim htop
Montagem da pendrive USB
Pretende-se utilizar uma pendrive/flashdrive USB de 1GB, com sistemas de ficheiros FAT, que irá estar sempre ligada ao Raspberry Pi. Criar a pasta, com permissões de root, onde a pendrive será montada:
cd /media
sudo mkdir pendrive
Assumindo que a drive está em /dev/sda1
, editar o ficheiro /etc/fstab
e incluir a seguinte
linha no final:
/dev/sda1 /media/pendrive vfat rw,auto,umask=0,uid=1000,gid=1000,iocharset=utf8,noexec,nosuid 0 0
Esta configuração irá montar a pendrive com sistema de ficheiros FAT no arranque, com permissões de
leitura e escrita para qualquer utilizador do sistema. As permissões são aplicadas as futuras
pastas criadas. As flags noexec
e nosuid
trazem alguma segurança adicional, pois desta
forma não é possível correr scripts a partir da pen (por exemplo, um script malicioso transferido a
partir de um torrent não poderá ser executado na pasta de download pois o volume não permite a
execução de scripts).
Configuração do Samba
O Samba irá permitir o acesso pela rede local aos ficheiros transferidos pela Seedbox. Instalar o Samba:
sudo apt-get install samba
Abrir o ficheiro /etc/samba/smb.conf
e adicionar o seguinte conteúdo:
[Downloads]
comment = Ficheiros transferidos via torrent
path = /media/pendrive/
guest ok = yes
writeable = yes
create mask = 0666
Esta configuração irá criar uma pasta partilhada chamada “Downloads” ligada à pasta onde iremos ter os ficheiros transferidos. Esta pasta irá ser acessível sem autenticação. Atualizar o Samba com as novas configurações:
sudo service samba reload
Se tudo correr bem, em sistemas Windows irá aparecer um computador chamado “RASPBERRYPI” com uma partilha “Downloads”, que se deve encontrar vazia neste momento.
Configuração do Transmission
O Transmission é a aplicação principal que irá dar vida à seedbox. Instalar o Transmission:
sudo apt-get install transmission-daemon
O Transmission deve começar de imediato. Como vão ser feitas novas configurações, o programa deve ser encerrado:
sudo killall transmission-daemon
No ficheiro de configuração do Transmission, em /etc/transmission-daemon/settings.json
, alterar
as seguintes opções:
cache-size-mb
pode ser trocado para outro valor, por exemplo, 16 ou 32 MB, consoante a velocidade de Internet. A ideia é minimizar o número de escritas na drive USB (maior valor de cache), mantendo um bom compromisso com o tempo até que a cache fica escrita em disco (valores menores são mais rápidos a escrever). No meu caso, tenho uma pen com velocidade de escrita em torno de 4 MB/s. A minha Internet atinge velocidades de pico de 1 MB/s. Esta configuração de 16 MB de cache permite uma escrita de 16 MB a cada 16 segundos (tempo para encher o buffer até ser forçada a escrita) (1 MB/s × 16), e essa escrita demora cerca de 4 segundos (16 MB ÷ 4 MB/s).download-dir
deve ser a pasta que foi criada para a pendrive, isto é,/media/pendrive
download-queue-size
redefinido para 1, para que apenas seja transferido um ficheiro de cada vez (reduz escrita simultâneas à pendrive)encryption
redefinido para 2, obriga a que as ligações de entrada sejam cifradas. Pode reduzir o número de peers.peer-limit-global
é a quantidade de peers que se ligam globalmente ao Raspberry Pi. Devido a problemas com muitas ligações, li que o valor recomendado deveria ser cerca de 100 a 200 para o antigo modelo B (optei por 150)peer-limit-per-torrent
reduzi para 40, de modo a diminuir o tráfegopeer-port-random-on-start
permite alterar o porto de entrada de ligações. Pessoalmente, prefiro em aleatório para que o porto seja diferente cada vez que o programa inicia ⇒ valor trueport-forwarding-enabled
colocado a true para permitir que o router abra o porto certo automaticamente. Se o router não suportar NAT ou UPnP, desligar esta opção e a anteriorratio-limit
eratio-limit-enabled
devem ser alterados conforme as capacidades da Internet/preferências do utilizador.rpc-password
deve ser mudada para uma password em claro entre aspas. No próximo arranque do programa, esta variável é substituída pela versão cifrada, logo não fica exposta no ficheiro de configuração.rpc-whitelist
deve ser mudado para127.0.0.1,192.168.1.*
, de modo a permitir a entrada de ligações ao painel Web vindas da rede local
Estas opções são as que considero essenciais. Existem outras configurações que podem ser mudadas consoante a situação atual. Gravar o ficheiro, e reiniciar o daemon:
sudo service transmission-daemon start
Sabendo o IP do Raspberry Pi (com o ifconfig
, por exemplo), é possível colocar num browser da
rede local o endereço que irá levar ao painel de downloads. Por exemplo, se o endereço for
192.168.1.4, o endereço do painel é:
http://192.168.1.4:9091
O username é transmission
e a password é a escolhida na configuração. Para os que tiverem
um dispositivo Android, podem ver na secção "Ferramentas Android" algumas apps para gerir a seedbox.
Configuração do Lighttpd
O Lighttpd permitirá o acesso exterior aos ficheiros acabados de transferir. O acesso é protegido por password e é apenas acessível para leitura. Instalar o lighttpd:
sudo apt-get install lighttpd
Abrir o ficheiro /etc/lighttpd/lighttpd.conf
e alterar a configuração:
# ativar apenas os módulos necessários
# - access para proibir o acesso a certos ficheiros (~, .inc)
# - auth para proteger o servidor com password de acesso exterior
# - acccesslog para registar os acessos ao servidor num ficheiro
server.modules = (
"mod_access",
"mod_auth",
"mod_accesslog",
# "mod_compress",
# "mod_alias",
# "mod_redirect",
# "mod_rewrite",
)
# configurar a raiz do servidor e os caminhos dos diversos logs
server.document-root = "/media/pendrive"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
server.tag = "lighttpd" # ocultar versão do lighttpd
index-file.names = ( "index.html", "index.html", "index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#compress.cache-dir = "/var/cache/lighttpd/compress/"
#compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
# ativar listagem de diretórios da pendrive para aparecer numa página web
dir-listing.activate = "enable"
dir-listing.set-footer = "lighttpd"
# ativar a autenticação
auth.debug = 2
auth.backend = "plain"
auth.backend.plain.userfile = "/etc/lighttpd/user_auth"
auth.require = ( "/" =>
(
"method" => "basic",
"realm" => "Private access area",
"require" => "valid-user"
)
)
accesslog.filename = "/var/log/lighttpd/access.log"
# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
Neste ficheiro, apenas estão incluídos os módulos essenciais para listar os ficheiros
transferidos e protegê-los com password. Os restantes módulos não são desativados por não serem
especialmente úteis para o caso. É necessário alterar a pasta raiz www para a raiz da pendrive
em /media/pendrive
. Também pode ser útil definir os caminhos dos logs para garantir que não há
acessos indevidos ao servidor. Deve-se ativar a listagem de ficheiros para que os ficheiros
transferidos possam aparecer numa listagem quando vistos através do browser. Por último, protegemos
os ficheiros com username/password. Os acesso incorretos são registados num ficheiro de texto. Os
nomes de utilizador e passwords permitidos são registados num ficheiro de texto
/etc/lighttpd/user_auth
na seguinte forma:
utilizador:password
utilizador2:outrapassword
Isto irá criar dois utilizadores, cada um com a sua respetiva password. Protejam o ficheiro de password para ser lido apenas pelo lighttpd, da seguinte forma:
sudo chown www-data:www-data /etc/lighttpd/user_auth
sudo chmod 640 /etc/lighttpd/user_auth
Isto irá alterar o proprietário do ficheiro para o lighttpd (www-data) e irá remover as permissões de leitura para outros utilizadores. Reiniciem o servidor com a nova configuração:
sudo service lighttpd restart
Acedam ao IP onde têm o Raspberry Pi e irá ser pedida a password. Insiram a password escolhida na configuração. Devem ver os ficheiros listados na interface web. Para o acesso exterior, pode ser preciso fazer um forward no router do porto 80 ou outro exterior, para o porto 80 do vosso Raspberry Pi.
Gestão de logs
Embora pareça uma tarefa chata, é útil manter logs para acompanhar os serviços que correm no Raspberry Pi. Através dos logs, é possível ver se as coisas estão a correr bem, ou perceber o que está a correr mal. Podem também servir para manter indicadores de desempenho ou simplesmente ver a utilização do servidor, por curiosidade.
Com o decorrer do tempo, é possível que os logs fiquem muito cheios, reduzindo a sua utilidade e
a performance dos serviços. Para fazer a gestão dos logs de forma automática, é possível usar o
logrotate
para os gerir automaticamente.
Logs do lighttpd (/etc/logrotate.d/lighttpd
)
/var/log/lighttpd/*.log {
weekly
missingok
rotate 6
notifempty
sharedscripts
postrotate
if [ -x /usr/sbin/invoke-rc.d ]; then \
invoke-rc.d lighttpd reopen-logs > /dev/null 2>&1; \
else \
/etc/init.d/lighttpd reopen-logs > /dev/null 2>&1; \
fi; \
endscript
}
Logs do transmission (/etc/logrotate.d/lighttpd/transmission)
/var/log/transmission/daemon.log {
weekly
missingok
rotate 6
notifempty
}
Estas configurações permitem manter um ficheiro separado por cada semana durante pouco mais de um mês (~6 semanas). Na sétima semana, o log mais antigo é apagado.
Ferramentas Android
Descobri recentemente duas ferramentas Android para ajudar a gerir o servidor:
- Remote Transmission permite gerir pelo Android o Transmission. Dá para ver os downloads atuais, pará-los, retomá-los ou definir um limite de velocidade.
- Juice SSH é um cliente de SSH suficiente para correr pequenos comandos e ver o estado do sistema.
Referências
Para criar uma seedbox com outros aspetos, como discos externos NTFS, recomendo a leitura destes artigos: