jueves, 21 de agosto de 2014

torrent autodownload box: Como configurar tu raspberry para descargar automaticamente tus torrents

Buenas, en esta entrada de blog voy a explicar como hacer que tu raspberry se descargue tus series favoritas por ti sin que te tengas que ocupar de nada.

Esta entrada puede ser bastante extensa y la voy a dividir en partes, vamos a tocar configuraciones, scripts bash, brico con rele para encender un disco externo,  programación en python de GpIO, programación PHP para nuestra interfaz de gestión remota, etc.

Si os gustan los post, por favor, hacer clic en alguno de los anuncios de google de esta forma me estais ayudando a seguir con el blog.

PARTE 1:
- Instalación y configuración de transmission.
- Configuración del disco externo para que siempre se monte en el mismo directorio.

Instalación de transmision:
Para instalar transmision ejectura los siguientes comandos:

sudo apt-get update
sudo apt-get install transmission-daemon
sudo apt-get install transmission-common
sudo apt-get install transmission-cli

Con esto ya tenemos en nuestro sistema el programa que se va a descargar los torrents ahora vamos a configurarlo.

Configuración de transmission-daemon:
Lo primer que debemos hacer es parar el servicio.
sudo service transmission-daemon stop

Ahora localizadmos el fichero de configuración de transmission este se llama settings.json y se encuentra en /etc/transmission-daemon, para editarlo necesitamos permisos de root asique antes de usar nuestro editor favorito ejecutar sudo.

Hay que localizar las siguientes opciones de configuración y dejarlas como se muestra a continuación, si alguna opción no la encontramos la creamos nueva, antes de continuar debemos saber cual va a ser nuestro directorio de descargas en mi caso es
/media/HDex/torrents/finalizados que es del disco externo que depues haremos que se monte siempre en /media/HDex

Configura transmission para escuchar en todas las ips disponibles
"bind-address-ipv4": "0.0.0.0",

directorios de descarga
"download-dir": "/media/HDex/torrents/finalizados",
"incomplete-dir": "/media/HDex/torrents/tmp",
"incomplete-dir-enabled": true,

fuerza a subministrar autenticación
"rpc-authentication-required": true,

el servicio rpc escucha en todas las ips
"rpc-bind-address": "0.0.0.0",

habilita el servicio rpc
"rpc-enabled": true,

password encriptado, esta en formato ssha1, para generar nuestro password encriptado y que no aparezca en plano, ejecutar el siguiente comando:
echo -n password | sha1sum a la cadena que resulte se le añade "{" al inicio.
"rpc-password": "{95a1ef622856a065396de62b3d1170ffe82586fb",

puerto del servicio rpc
"rpc-port": 9091,

ruta web para acceder al servicio
"rpc-url": "/transmission/",

usuario
"rpc-username": "pi",
"rpc-whitelist-enabled": false,

script a ejecutar cuando se acabe de descargar cada torrent, yo tengo el mio que publicare mas adelante.
"script-torrent-done-enabled": true,
"script-torrent-done-filename": "/home/pi/bin/torrentnotify",

Una vez las configuración estan hechas iniciar de nuevo el servicio    
sudo service transmission-daemon stop

si por alguna circustancia ves que tu configuración se ha sobrescrito de nuevo a la anterior es porque no se paro el servicio al princicio, edita de nuevo el fichero de configuración y ejecuta
sudo invoke-rc.d transmission-daemon reload ó
sudo invoke-rc.d transmission-daemon start ó
sudo invoke-rc.d transmission-daemon restart
dependiendo de cada caso.
 
Ahora se puede acceder desde cualquier navegador de internet a la interfaz web de transimission en la siguiente url:
http://<ip de la raspberry>:9091/transmission
nos pide el usuario y contraseña que pusimos en el fichero settings.json


Configración del disco externo:

Antes de empezar tengo que comentar que en mi caso el formato del disco lo tengo en NTFS para poder usarlo con el resto de los ordenadores de la casa, esto supone una bajada de rendimiento para la raspberry, si se quiere se puede formatear en ext4 que es menos pesado para la raspberry, no es objeto de este post formatear el disco, si lo necesitas pregunta a google.

Establecer punto de montaje fijo para el disco externo:
Lo primero es crear el directorio donde se va a montar en mi caso elegí /media/HDex
mkdir /media/HDex

Ahora vamos a usar la reglas de udev para hacer que siempre se monte en este directorio.
Lo primero debemos buscar algún atributo del disco que sea unico para que el sistema lo identifique, tenemos que saber que "device" le asigna el sistema para poder preguntar esto se puede mirar en /var/log/kern.log despues de enchufar el disco externo, le asigará algo como sda o sdb

ahora ejecutar
udevadm info -q all --name=/dev/sdb y mostrará algo parecido a esto:
P: /devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4:1.0/host1/target1:0:0/1:0:0:0/block/sdb
N: sdb
S: disk/by-id/usb-General_USB_Flash_Disk_3709090000072843-0:0
S: disk/by-path/platform-bcm2708_usb-usb-0:1.2.4:1.0-scsi-0:0:0:0
S: ownusb
E: DEVLINKS=/dev/disk/by-id/usb-General_USB_Flash_Disk_3709090000072843-0:0 /dev/disk/by-path/platform-bcm2708_usb-usb-0:1.2.4:1.0-scsi-0:0:0:0 /dev/ownusb
E: DEVNAME=/dev/sdb
E: DEVPATH=/devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4:1.0/host1/target1:0:0/1:0:0:0/block/sdb
E: DEVTYPE=disk
E: ID_BUS=usb
E: ID_INSTANCE=0:0
E: ID_MODEL=USB_Flash_Disk
E: ID_MODEL_ENC=USB\x20Flash\x20Disk\x20\x20
E: ID_MODEL_ID=1000
E: ID_PART_TABLE_TYPE=dos
E: ID_PATH=platform-bcm2708_usb-usb-0:1.2.4:1.0-scsi-0:0:0:0
E: ID_PATH_TAG=platform-bcm2708_usb-usb-0_1_2_4_1_0-scsi-0_0_0_0
E: ID_REVISION=1100
E: ID_SERIAL=General_USB_Flash_Disk_3709090000072843-0:0
E: ID_SERIAL_SHORT=3709090000072843
E: ID_TYPE=disk
E: ID_USB_DRIVER=usb-storage
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=General
E: ID_VENDOR_ENC=General\x20
E: ID_VENDOR_ID=090c
E: MAJOR=8
E: MINOR=16
E: SUBSYSTEM=block
E: UDEV_LOG=3
E: UDISKS_PARTITION_TABLE=1
E: UDISKS_PARTITION_TABLE_COUNT=1
E: UDISKS_PARTITION_TABLE_SCHEME=mbr
E: UDISKS_PRESENTATION_NOPOLICY=0
E: USEC_INITIALIZED=10079308


de todo lo que sale nos quedamos con ID_SERIAL_SHORT=3709090000072843, con esto podemos identificar nuestro dispositivo, mi caso esta información no viene usé una convicación para identificarle.

Creamos un fichero en /etc/udev/rules.d/ en mi caso lo he llamado 90-HDext.rules y el contenido es este:
ACTION=="add" SUBSYSTEMS=="scsi", ATTRS{model}=="HD103SI", ATTRS{vendor}=="SAMSUNG ",SYMLINK+="hdex", RUN+="/bin/mount /dev/hdex /media/HDex"
ACTION=="remove", ENV{ID_FS_UUID}=="FA808BA9808B6AC9", RUN+="/bin/umount /media/HDex" 


mis atributos de udevadm son model y vendor, sustituir los ATTR por los vuestros.

También tengo en el fichero de sistema que se usa para montar los discos (/etc/fstab) la siguiente entrada:
/dev/hdex       /media/HDex     ntfs-3g rw,user,exec,umask=000  0       0

no se si es necesaria, pero lo único que pasa es que si al arrancar no encuentra el disco da una advertencia.


Con el disco montado tenemos crear los directorios de descarga de transmission en mi caso son:
/media/HDex/torrents/finalizados
/media/HDex/torrents/tmp

mkdir -p /media/HDex/torrents/finalizados
mkdir /media/HDex/torrents/tmp

Con esto tenemos el entorno preparado para poder usar transmission y que guarde las descargas en un disco externo que no tiene porque estar siempre encendido, porque cada vez que se enchufe este se montará siempre en el mismo sitio. En los siguientes post vamos a configurar el sistema para que el disco se encienda solo cuando la raspberry encuentre un torrent y se apague cuando lo termine de descargar.