Articulo resumen y guía rápida

  1. Instalar Raspbmc en la tarjeta SD mediante el método que más nos guste. Enlace: http://www.raspbmc.com/download/
  2. Iniciar el sistema conectado con el cable de red y todos los discos enchufados, y esperar a que termine de configurarse.
  3. Conectar el dongle WiFi y reiniciar habiendo desconectado el cable de red.
  4. Configuración adicional de XBMC:
    1. Habilitar bob light support (para hacer un ambilight en el futuro).
    2. Cambiar región.
    3. Cambiar país.
    4. Deshabilitar Ignorar los artículos al ordenar (cuestión de gustos).
    5. Habilitar Permitir el renombrado y borrado de archivos (para poder borrar archivos después de verlos).
    6. Habilitar Actualizar la colección en el arranque (nunca viene mal).
    7. Seleccionar la acción por defecto: mostrar información (nuevamente, cuestión de gustos).
    8. Idioma de subtitulo preferido: english (cada cual que elija el idioma que quiera).
    9. Servicio de tv por defecto: conseguir más > opensubtitles.org > instalar (para poder bajar los subtítulos de las series).
    10. Seleccionar ubicación para el tiempo (me gusta poder ver la previsión).
    11. Instalar Add-on de Youtube (para poder ver los trailers).
    12. Habilitar AirPlay (aunque aun no he sido capaz de hacerlo funcionar).
  5. Reiniciar el sistema para aplicar los cambios.
  6. Añadir los vídeos a la biblioteca indicando si las carpetas son de series o de películas. Enlace: Añadir contenido a XBMC
  7. Revisar si hay series o películas que ha cogido mal o no ha reconocido y arreglarlo.
  8. Actualizar el sistema mediante el comando sudo apt-get update && sudo apt-get upgrade
  9. Instalar transmission mediante el comando sudo apt-get install transmission-daemon Enlace: Instalación de transmission
  10. Parar transmission-daemon mediante sudo /etc/init.d/transmission-daemon stop para configurar el fichero /var/lib/transmission-daemon/info/settings.json y luego re-arrancarlo con sudo /etc/init.d/transmission-daemon start
  11. Instalar sendemail mediante el comando sudo apt-get install libio-socket-ssl-perl libnet-ssleay-perl perl sendemail Enlace: Recibir un email al finalizar una descarga
  12. Arreglar sendemail con sudo nano +1907 /usr/bin/sendemail y modificar la linea donde dice SSLv3 TSLV1 para dejar solamente SSLv3
  13. Instalar flexget mediante sudo apt-get install python python-setuptools ; sudo easy_install flexget mechanize transmissionrpc
  14. Comprobar que flexget se ha instalado bien ejecutando flexget -V
  15. Crear un directorio de configuracion de flexget con mkdir /home/pi/.flexget y editar la configuracion con nano /home/pi/.flexget/config.yml
  16. Editar el fichero config.yml para que envíe un email al encontrar un fichero, la frecuencia del daemon y añadir todas las series a seguir. Enlace: Instalación de flexget y configuración (I): series.
  17. Comprobar la sintaxis de la configuracion mediante flexget check
  18. Hacer un test de descarga mediante flexget –test execute
  19. Indicar el punto donde tiene que empezar a descargar las series mediante flexget series begin “<SERIE>” S<temporada>E<capitulo>” Enlace: Cómo decirle a flexget que ya hemos visto un capítulo
  20. Iniciar el daemon mediante flexget daemon start -d Enlace: FlexGet en Daemon mode y Scheduling
  21. Instalar curl
  22. Configurar fichero de download_complete para mover los archivos .mkv, borrar carpeta bajada y actualizar la librería con curl. Enlace: Movimientos de ficheros y auto-actualizacion de librería
  23. Ejecutar ssh-keygen para generar las claves y añadir la clave pública de nuestro equipo al archivo /home/pi/.ssh/authorized_keys de la raspberry. Enlace: Utilización de claves pública y privada

 

Contenido fichero download_complete.sh

#!/bin/bash

#Se envia un email de que ha finalizado la descarga
USUARIO="<usuario>"
PASSWORD="<contraseña>"
DIRECCION="$USUARIO@gmail.com"
ASUNTO="[Transmission] Descarga finalizada"
MENSAJE="Se ha completado la descarga del trabajo \n$TR_TORRENT_NAME\nHora: $TR_TIME_LOCALTIME\nFolder: $TR_TORRENT_DIR\nID: $TR_TORRENT_ID"
SERVIDOR="smtp.gmail.com:587"
sendemail -f $DIRECCION -t $DIRECCION -u $ASUNTO -m $MENSAJE -s $SERVIDOR -xu $USUARIO -xp $PASSWORD -v -o username=$USUARIO -o password=$PASSWORD -o tls=yes

#mueve los ficheros mkv de la carpeta de descarga a su carpeta padre
find "$TR_TORRENT_DIR/$TR_TORRENT_NAME" -name "*.mkv" ! -name *sample* -exec mv {} "$TR_TORRENT_DIR" \; | logger

#borra los archivos y carpetas que no son mkv de la carpeta de descarga
find "$TR_TORRENT_DIR/$TR_TORRENT_NAME" ! -name "*.mkv" -exec sudo rm -r {} \; | logger #debian-transmission tiene que ser sudoer para borrar

#Actualizacion de la libreria de video
curl --data-binary '{ "jsonrpc": "2.0", "method": "VideoLibrary.Scan", "id": "mybash"}' -H 'content-type: application/json;' http://localhost/jsonrpc

 

Contenido fichero config.yml

schedules:
 - tasks: '*'
 interval:
 hours: 2

tasks:

  tv-shows:
    series_premiere: no

    email:
      from: <usuario>@gmail.com
      to: <usuario>@gmail.com
      smtp_host: smtp.gmail.com
      smtp_port: 587
      smtp_username: <usuario>
      smtp_password: <contrasena>
      smtp_tls: yes

    transmission:
      path: /media/e864a2d9-5479-41a6-852f-4dbd2166cd12/tvshows
      host: localhost
      port: 9091
      username: transmission
      password: <contraseña de transmssion>
      addpaused: no

    rss: http://rss.thepiratebay.se/208

    thetvdb_lookup: yes

    quality: 720p HDTV h264

    regexp:
      reject:
        - SUB
        - DUAL
        - WEB
        - CENSORED
        - SCREENER
        - LATINO
        - PSYPHER

    content_filter:
      reject:
        - '*.avi'
        - '*.mpg'
        - '*.mpeg'

    series:
      - 12 Monkeys:
        path: "/media/My\ Book/tvshows/12 Monkeys"
        set:
          tvdb_id: 272644
      - 2 Broke Girls:
        path: "/media/My\ Book/tvshows/2 Broke Girls"
        set:
          tvdb_id: 248741

FlexGet en Daemon mode y Scheduling

Tras la instalación de FlexGet en Raspbmc me he dado cuenta de que las ejecuciones que tengo planificadas en cron no funcionan. No sé si esto es porque esté de algún modo desactivado, pero voy a aprovechar y probar una de las últimas funcionalidades que le añadieron a FlexGet que es funcionar el modo daemon (o demonio). Esto viene siendo simplemente que funciona como un proceso de background.

Para ver si ya tenemos el demonio corriendo ejecutamos el comando flexget daemon status

flexget daemon statusMe dice que efectivamente lo tengo desactivado. Ahora voy a añadir unas planificaciones (schedules) a la tarea para decirle cuándo quiero que se ejecute, así que edito el fichero de configuración de flexget con nano /home/pi/.flexget/config.yml y añado lo siguiente:

SchedulesLo que he puesto básicamente es que ejecute todas (*) las tareas cada dos horas. Si por ejemplo yo quisiera que se ejecutara la tarea tv-shows todos los martes a la una de la tarde, lo que pondría sería:

Planificacion semanalFácil ¿no? Ahora guardo y salgo de nano y hago una comprobación con flexget check para ver que la sintaxis es correcta.

Warning inofensivoComo veis me ha dado un warning de que al parecer me falta un : en una linea, pero he visto en la página de FlexGet que esto es normal de momento, así que podemos ignorarlo.

Ahora voy a activar el demonio con el comando flexget daemon start -d (con el -d lo mandamos al background o segundo plano).

Iniciamos el demonioPerfecto, parece que el demonio está corriendo. Ahora por último voy a modificar el sistema para que inicie el demonio cada vez que haga un reinicio y así que no tengo que preocuparme. Eso se hace en el crontab, que abrimos con crontab -e

CrontabY ya está. Guardamos el crontab y listo. Ahora nuestro demonio estará buscando las actualizaciones de las fuentes RSS y las descargará automáticamente en caso de que deba hacerlo.

Recibir un email cuando se añada una descarga

Una cosa que me gusta hacer al despertarme por las mañanas es mirar el teléfono y ver cuántas series se han añadido automáticamente durante la noche. Según tenemos nuestro sistema montado ahora mismo recibimos un email de parte de transmission cuando una descarga cualquiera (añadida automáticamente o no) se ha completado, pero a mi me gusta ver las que se han añadido ellas solas mediante la tarea programada.

Así pues, lo que voy a mostraros hoy es como modificar la configuración de flexget para que nos envíe un email cuando añada una descarga.

Para ello, nos conectamos a la Raspberry mediante ssh y después editamos el fichero de configuración de flexget mediante el comando nano /home/xbian/.flexget/config.yml

Editando el fichero de configuración de flexget

Ahora, dentro de la tarea de tv-shows, añadimos un nuevo campo llamado email que nos permite especificar los settings del correo.

Settings del correo con Gmail

Y ya está. Salvamos del fichero mediante CTRL + X, YES, INTRO y ya estaría.  Ahora podemos comprobarlo como hicimos el otro día mediante el comando flexget check

Configuración comprobada con éxito

Cabe destacar que flexget nos mandará un email por ejecución, lo que quiere decir que si en una de dichas ejecuciones encuentra tres capítulos distintos, nos mandará un solo email con la información de los tres.

Tareas programadas mediante Cron

Si habéis ido siguiendo mis pasos en este blog, en este momento teneis una Raspberry con XBian como sistema operativo, transmission como gestor de descargas, y FlexGet como buscador de enlaces. El tema es que según lo dejamos, si queremos que FlexGet realice una búsqueda debemos de iniciarla manualmente, lo que choca un poco con mi propósito de automatización de tareas. Así pues, lo que voy a explicaros hoy brevemente es cómo hacer que una tarea/programa/script se ejecute cada cierto tiempo de forma recurrente.

Lo bueno de usar Linux (o un sistema operativo basado en él) es que, al igual que otros sistemas, ya cuenta con un administrador de procesos, en este caso CRON. La idea es que cada cierto tiempo Cron llame a FlexGet para que éste compruebe si hay alguna serie disponible para bajar. Empecemos.

Lo primero es conectarse mediante ssh a nuestra Raspberry y después ejecutar el comando crontab -e

Imagen de crontab listo para añadir tareas

Ello nos permite editar el fichero de planificaciones. Si, por ejemplo, queremos que FlexGet se ejecute cada 30 minutos tendríamos que escribir lo siguiente al final del fichero: */30 * * * * /usr/local/bin/flexget execute

esta tarea se ejecutaría cada 30 minutos

La sintaxis de Cron consiste en cinco campos seguidos del comando a ejecutar. Estos campos representan respectivamente los minutos (0-59), las horas (0-23), el dia del mes (1-31), el numero de mes (1-12) y el día de la semana (0-6 con 0=domingo). Se puede utilizar el asterisco (*) como comodin. Así pues, el comando descrito arriba:

  • */30 le decimos que se ejecute cada 30 minutos (las “y media” y las “en punto”).
  • * todas las horas
  • * todos los días del mes
  • * todos los meses
  • * todos los días de la semana
  • /usr/local/bin/flexget execute ejecutar FlexGet.

Siguiendo lo descrito arriba, si quisiéramos entonces que por ejemplo se ejecutara cada dos horas, la cadena sería 0 */2 * * * /usr/local/bin/flexget execute

Ya solo nos queda guardar nuestro fichero como cuando usamos nano: CTRL+X > Yes > ENTER, y esperar a que llegue la hora indicada.

Si queremos comprobar que las ejecuciones se están llevando a cabo, podemos ejecutar el comando grep CRON /var/log/syslog que buscará las ejecuciones de Cron en el log del sistema.

Bucando las últimas ejecuciones de CRON en el log del sistema

Como veis me ha dado un error de permisos, nada que no se solucione poniendo un SUDO delante (!! sirve para repetir el último comando).

Y esto es todo, sencillo ¿verdad? además ahora que conocemos como configurar Cron podemos usarlo para que realice otras tareas que sean susceptibles de ser automatizadas.

 

Cómo decirle a flexget que ya hemos visto un capítulo

En la última entrada vimos cómo decirle a flexget las series que seguimos para que las descargue automáticamente. El único problema (inicial) es que si lo ejecutamos tal y como está ahora, con la base de datos vacía, flexget se descargará el primer capítulo que encuentre de dichas series. Si llevamos la serie al día o si la tenemos a medias esto supone un problema porque bajará capítulos que ya hemos visto. Vamos a ver cómo solucionarlo diciéndole por qué capítulo vamos.

Lo primero (después de conectarnos a XBian) es ver el estado de la base de datos. Para ello ejecutamos el comando flexget series list:

estado de la base de datos de series

Podeis ver que la base de datos se encuentra totalmente vacía.

Vamos a decirle por ejemplo que de la serie Game of Thrones yo ya he visto hasta el séptimo capítulo de la cuarta temporada, lo que quiere decir que el próximo para ver sería el octavo. Para ello ejecuto flexget series begin “Game of Thrones” S04E08

Modificando la base de datos

Para verificar que está todo correcto podemos ejecutar el comando flexget series show “Game of Thrones” para que nos diga el estado de dicha serie:

Estado de la serie en cuestiónHay que tener en cuenta que para títulos de series con más de una palabra (contiene espacios en blanco) hay que entrecomillar como he hecho yo en este ejemplo ya que si no tomará la segunda palabra como argumento y fallaría.

Ah, y si nos equivocamos podemos eliminar un capítulo usando forget. En este caso de ejemplo sería flexget series forget “Game of Thrones” S04E08

Eliminando un capítulo

Como veis, la lista de capítulos para esta serie vuelve a estar en blanco.

Ahora al trabajo duro, que es actualizar la base de datos con todas las series 🙂

 

 

Instalación de FlexGet y configuración (I): series

En la entrada de hoy voy a tratar uno de los temas principales por los que adquirí mi Raspberry, que no es más que la búsqueda automática y descarga de series y películas. Esto lo consigo mediante el programa FlexGet (disponible para todas las plataformas). A lo largo de una serie de artículos iré tratando diversos temas de configuración para conseguir diferentes objetivos, viendo en este primero la instalación y configuración para descargar las series que sigo en versión original.

Instalación de FlexGet

La instalación de FlexGet en XBian no es diferente a la instalación de cualquier otro software en Linux que se encuentre en el repositorio. Para ello, después de conectarnos a nuestra Raspberry mediante ssh al igual que las demás ocasiones, ejecutamos la instrucción que instalará python en caso de no tenerlo: sudo apt-get install python python-setuptools

Instalacion de Python

Ahora instalamos FlexGet y unos componentes extras mediante easy_install: sudo easy_install flexget mechanize transmissionrpc

Instalación de flexget

Tardará un rato, pero con ello ya lo tenemos instalado y lo podemos comprobar ejecutando el comando flexget -V:

Comprobacion de la instalacion

Pero si no lo configuramos adecuadamente no haremos nada, y es en la configuración donde FlexGet se hace fuerte, ya que su configuración es muy amplia y nos permite hacer muchas cosas. El precio que tenemos que pagar es que llegar a entender esa configuración puede llegar a ser complicado.

Primero tenemos que crear el directorio donde irá la configuración y la base de datos mediante mkdir /home/xbian/.flexget y luego para entrar en la configuración de FlexGet lo hacemos mediante el comando nano /home/.flexget/config.yml

Creación del directorio
Configuración inicial de flexget

Como ya os he comentado FlexGet tiene muchas opciones. Yo lo que voy a hacer es dejaros a continuación lo que yo tengo en mi fichero de configuración y sobre él os comento:

tasks:

  tv-shows:
    series_premiere: yes

    transmission:
      path: /mnt/disco1gb/tvshows
      host: localhost
      port: 9091
      username: transmission
      password: ********
      addpaused: no

    rss: http://rss.thepiratebay.se/208

    thetvdb_lookup: yes

    quality: 720p HDTV h264

    regexp:
      reject:
        - SUB
        - DUAL
        - WEB
        - CENSORED
        - SCREENER
        - LATINO

    content_filter:
      reject:
        - '*.avi'
        - '*.mpg'
        - '*.mpeg'

    series:
      - 12 Monkeys:
        path: /mnt/disco1gb/tvshows/12_Monkeys
      - Game of Thrones:
        path: /mnt/disco1gb/tvshows/Game_of_Thrones
        set:
          tvdb_id: 121361
  • tasks aquí indicamos las tareas.
    • tvshows inicio de la configuración de la tarea de series
      • series_premiere poniendo este valor a YES le decimos a FlexGet que se descargue todos los capítulos de series no conocidas y cuyo nombre contenga S01E01. Esto sirve para descubrir nuevas series y programas. OJO, solamente bajará el capítulo 1, si al final la queremos seguir habrá que añadirla en la sección de más abajo.
      • transmission aquí le indicamos configuración de tranmission específica para esta tarea, en este caso de series.
        • path este será el directorio por defecto de todas las series. Sobreescribe el directorio indicado en presets / global
        • host por si conectamos a un transmission remoto. En mi caso es localhost porque están en la misma máquina.
        • port puerto de conexión. Por defecto es el 9091.
        • username usuario para conectarse. Si no lo cambiaste al instalarlo, por defecto es transmission.
        • password contraseña para conectarse. Por defecto sería también transmission.
        • addpaused poniendo esto a NO permite que las descargas se inicien automáticamente al ser añadidas. Si ponemos YES entonces se añaden pausadas y tenemos que arrancarlas manualmente.
      • rss este será el RSS donde FlexGet buscará los torrent. El que yo tengo indicado corresponde a la sección HD de series en TPB, pero podéis indicar cualquier otro.
      • thetvdb_lookup esto sirve para que FlexGet busque los ficheros en la web thetvdb.com para poder identificar mejor las series en caso de series con nombres parecidos.
      • quality indicamos la calidad mínima a la que queremos nuestros capítulos. Yo lo tengo a 720p, lo que quiere decir que si encuentra alguno a 1080p también lo bajará.
      • regexp para definir términos de aceptación y/o rechazo.
        • reject para rechazar torrents. En mi caso lo uso para no descargar capítulos ya subtitulados (SUB), con doble audio (DUAL), con calidad web que suele ser mala (WEB), etc etc.
      • content_filter sirve para filtrar por tipo de archivo.
        • reject para rechazar, igual que en el apartado anterior.
          • ‘*.avi’ rechaza todos los archivos .avi
    • – Nombre_de_la_serie bastante auto-explicativo.
      • path si tenemos definido un directorio específico para esa serie lo indicamos aquí.
      • set aquí podemos indicar configuración adicional solo para esa serie.
        • tvdb_id si la serie tiene entrada en la página de thetvdb aquí podemos indicar su ID para evitar problemas con series con nombre muy parecidos.

Es MUY importante respetar la indexación, esto es, el número de espacios que hay al comienzo de cada linea. Es así porque el fichero de configuración es un YML y FlexGet espera esa estructura. Si en lugar de por ejemplo 4 espacio ponemos 3 o 5, el fichero de configuración podría no funcionar o funcionar incorrectamente.

Ahora que ya lo tenemos todo salimos del editor con CTRL+X, confirmamos que queremos escribir con Y y presionamos ENTER para no cambiarle el nombre.

¿Cómo podemos saber que lo hemos hecho bien? lo primero sería comprobar que la estructura del fichero config.yml es correcta. Esto es un proceso más o menos rápido que se consigue con el comando flexget check

Check pasado satisfactoriamente

Como podéis ver en la imagen el resultado de la tarea es passed, lo que quiere decir que está bien. Si hubiéramos tenido algún error en el fichero nos habría dado error e indicado la sección donde se encuentra.

Ahora podemos hacer una segunda comprobación que consiste en que FlexGet se conecte al RSS que le hemos indicado en la configuración y “descargue” los capítulos correspondiente (en caso de que los haya). Lo entrecomillo porque realmente utiliza una base de datos temporal que es eliminada después de la ejecución, por lo que realmente no descarga nada. Esta comprobación la hacemos con el comando flexget ––test execute (dos guiones)

Check funcionando sin problema

Aquí ya la salida ofrecida es más larga, pero sería conveniente revisar las lineas para ver que está rechazando entradas correctamente según lo definido.

Y ya estaría listo, cada vez que ejecutemos el comando flexget lanzaríamos la comprobación para ver si hay capítulos nuevos a descargar y los incorporaría directamente a transmission. El próximo día os enseñaré cómo hacer para que se ejecute cada cierto tiempo para automatizarlo aún más.