Movimientos de ficheros y auto-actualizacion de librería

En este punto, lo único que me falta para terminar de automatizar todo el sistema es que los ficheros descargados se sitúen donde yo quiero, que se borren los ficheros adicionales en caso de haberlos y que la librería se actualice.

Todo ello lo haremos mediante el fichero download_complete.sh que creamos y que le indicamos a transmission en el fichero de configuración que debía de ejecutar cada vez que terminara una descarga.

A continuación os dejo el código del fichero que yo utilizo para que podáis copiarlo y modificarlo a vuestro gusto.

#!/bin/bash
#sirve para indicarle a la shell el interprete que debe usar para este script

#Se envia un email de que ha finalizado la descarga, indicando información basica
USUARIO=“<vuestro usuario de gmail>
PASSWORD=“<vuestra contraseña de gmail>
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

Un par de puntualizaciones:

  • La primera es que (obviamente) tendréis que añadir vuestro usuario y contraseña de gmail en las dos variables que he marcado en rojo.
  • También, tal como indico en un comentario, para que el script sea capaz de borrar la carpeta creada durante la descarga así como los ficheros basura, el usuario debian-transmission debe de ser sudoer. Es decir, debemos indicarle al sistema que dicho usuario puede invocar sudo. Eso se hace editando el fichero /etc/sudoers y añadiendo la linea debian-transmission ALL=(ALL) NOPASSWD: ALL. Vereis que ya hay una linea (al menos) para el usuario root, así que podéis ponerla debajo.
  • Lo último es que para actualizar la librería hago una llamada mediante curl y en mi caso al menos este no estaba instalado. A estas alturas no deberíais tener problema en saber que para instalarlo se hace mediante el comando sudo apt-get install curl.

Pues creo que eso es todo. En la próxima entrada haré un rápido resumen de todos los pasos a seguir para coger una raspberry vacía y dejarla tal como la tengo yo ahora, totalmente automatizada.

Anuncios

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.

Recibir un email al finalizar una descarga

Sé que os había dicho que os hablaría de Samba, pero en esta entrada voy a explicaros de forma sencilla cómo hacer que transmission nos mande un email cuando finalice una descarga. Quizás para algunos no sea interesante, pero a mi me gusta despertarme por las mañanas y ver cuántas cosas se han descargado durante la noche.

Si recordáis la entrada anterior en la que modificamos la configuración de transmission después de su instalación (settings.json), una de las lineas nos permitía indicarle un fichero a ejecutar cada vez que finalice una descarga (script-torrent-done-filename). Pues eso es lo que vamos a usar.

Lo primero que hay que hacer (como siempre) es conectarnos a la Raspberry mediante ssh xbian@[dirección IP]

Captura de pantalla 2014-01-05 a la(s) 21.11.26

En la configuración de transmission yo ya había dejado indicado dónde se encontraba el fichero a ejecutar. Si no lo hicisteis, es buen momento para mirar la entrada anterior para ver cómo cambiarlo.

El envío de los emails lo vamos a hacer mediante el comando sendemail. En XBian no viene instalado por defecto, por lo que tenemos que hacerlo. Además, dicho comando utiliza ciertas librerías de Perl que tampoco están instaladas, así que podemos aprovechar a instalarlo todo junto mediante la ejecución de sudo apt-get install libio-socket-ssl-perl libnet-ssleay-perl perl sendemail No pasa nada si lo ejecutamos y resulta que ya estaban instalados.

Captura de pantalla 2014-01-05 a la(s) 21.15.38

Captura de pantalla 2014-01-05 a la(s) 21.15.53

Ahora debemos crear un fichero ejecutable donde indicaremos el comando para el envío del email. En mi caso me he creado una carpeta llamada scripts, y ahí voy a crear un fichero llamado download_complete.sh donde iré añadiendo cosas que quiero que se ejecuten al terminar una descarga. Para crear el fichero usamos el comando sudo nano download_complete.sh

Captura de pantalla 2014-01-05 a la(s) 21.24.23

Voy a indicaros la cadena que habrá que escribir dentro del fichero y a continuación os la explico paso a paso:

sendemail -f torrated@gmail.com -t torrated@gmail.com -u "[Transmission] Descarga finalizada" -m "Se ha completado la descarga del trabajo \n$TR_TORRENT_NAME\nHora: $TR_TIME_LOCALTIME\nFolder: $TR_TORRENT_DIR\nID: $TR_TORRENT_ID" -s smtp.gmail.com:587 -xu torrated -xp <CONTRASEÑA> -v -o username=torrated -o password=<CONTRASEÑA> -o tls=yes

Captura de pantalla 2014-01-05 a la(s) 21.25.14

  1. sendemail <-nombre del comando
  2. -f <remite>@gmail.com <-(From) direccion que envía
  3. -t <destino>@gmail.com <-(To) direccion de destino
  4. -u “[Tramission] Descarga finalizada” <-Asunto del email. Importante que esté entre comillas dobles.
  5. -m <-Lo que viene después es el texto del email, que también deberá estar entre comillas dobles.
  6. “Se ha completado la descarga del trabajo\n <-\n sirve para hacer salto de linea.
  7. $TR_TORRENT_NAME\n <-esta variable es el nombre del torrent descargado.
  8. Hora: $TR_TIME_LOCALMACHINE\n <-hora de finalización de descarga.
  9. Folder: $TR_TORRENT_DIR\n <-carpeta donde se ha descargado.
  10. ID: $TR_TORRENT_ID” <-número de ID de la descarga en la cola. Ojo, que aquí ya hay que cerrar las comillas.
  11. -s smtp.gmail.com:587 <-servidor de SMTP y puerto. Si no es gmail será diferente.
  12. -xu <usuario> <-usuario de gmail para enviar el email. Será igual a remite.
  13. -xp <contraseña> <-contraseña del usuario de gmail.
  14. -v <-(Verbose) para detallar más información en caso de fallo.
  15. -o username=<usuario> <-otra vez el usuario
  16. -o password=<password> <-otra vez la contraseña
  17. -o tls=yes <-para autenticación segura de gmail

Los campos que he marcado como <azul> son los que tendríais que modificar con vuestros propios datos. Básicamente son el usuario y contraseña. Yo en mi caso tengo puestos como dirección de origen y de destino la misma.

Una vez tenemos puesta la cadena de envío, salimos de nano utilizando CTRL+X , después le damos Y para confirmar que queremos guardar y finalmente ENTER para el nombre del fichero.

Ahora ya tenemos el fichero creado pero tenemos que hacerlo ejecutable ya que si no transmission no podría hacer nada con él. Podemos ver que por defecto los permisos que tiene un fichero creado con nano son de lectura y modificación para el propietario haciendo ls -l

Captura de pantalla 2014-01-05 a la(s) 23.28.02

Vemos que efectivamente los permisos son -rw-r–r–, que significa:

  1. <-es un archivo. Si fuera directorio sería una una d.
  2. rw- <-permisos de lectura y escritura para el propietario.
  3. r– <-permiso de solo lectura para el grupo.
  4. r– <-permiso de lectura para el resto (other).

Para que no haya líos a mi me gusta ponerle permisos de ejecución para todo el mundo, lo que se logra fácilmente con el comando sudo chmod +x download_complete.sh

Si hacemos de nuevo un listado mediante ls -l vemos que ahora aparece una x en todas las ternas, lo que significa ejecución.

Captura de pantalla 2014-01-05 a la(s) 23.29.43

Lo siguiente que podemos hacer es probar nuestro script, y para ello nada tan fácil como escribir sh seguido del nombre del fichero.

Captura de pantalla 2014-01-05 a la(s) 23.34.23

En este punto me he encontrado que a veces, igual que en este caso, puede darnos un error: invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 332

Creo que este error viene dado por un problema de incompatibilidad entre TTL y la versión de Perl instalada. La forma de solucionarlo es editar el fichero de sendemail mediante sudo nano /usr/bin/sendemail y luego modificar la linea donde dice SSLv3 TSLV1 para dejar solamente SSLv3. En mi caso la linea era la 1907, pero en vuestro caso puede variar. Para editar el fichero directamente en la linea que queremos podemos usar el comando sudo nano +1907 /usr/bin/sendemail

Captura de pantalla 2014-01-05 a la(s) 23.38.37

Captura de pantalla 2014-01-05 a la(s) 23.41.07

Ahora podemos volver a hacer la prueba de email lanzando de nuevo nuestro comando.

Captura de pantalla 2014-01-05 a la(s) 23.42.50

Aquí vemos que ahora el email ha salido, por lo que solamente nos faltaría irnos a nuestra bandeja de entrada y comprobar que efectivamente está ahí. Prometo que el próximo día os cuento cómo crear carpetas compartidas para que podamos acceder a ellas desde nuestra red local.