Configurar Transmission para que envíe un mensaje por Telegram cada vez que descargue un Torrent

Introducción

Transmission_logoUn paso mas en la automatización de las tareas consiste en configurar medios para que el usuario sea notificado del estado de las mismas.  Para experimentar con los avances obtenidos anteriomente con el servicio de Telegram, a continuación se describirá el procedimiento necesario par configurar a Transmission (cliente de torrent) para que notifique al usuario a través de un mensaje cada vez que un torrent sea descargado completamente.

telegram_message_for_torrent

Precondición

  1. Transmission correctamente instalado.
  2. Cliente CLI de Telegram instaldo.
  3. Script (telegram_sendmsg.sh) instalado.

Configuración inicial del sistema operativo

Por defecto la cuenta del sistema operativo que corresponde con el usuario de Transmission viene por seguridad con el shell desactivado y sin directorio home.  Para integra el envío de mensajes con Telegram es necesario modificar esto.

Ajuste los siguientes pasos de acuerdo con la información específica de su sistema operativo.  Los pasos descritos han sido implementados bajo Debian/Raspbian, algunos nombres pueden variar de acuerdo con la distribución de Linux que utilice.

$ sudo usermod --shell /bin/bash debian-transmission

$ sudo usermod --home /home/debian-transmission debian-transmission

Si la ruta del directorio home no existe es necesario crearla.

$ sudo mkdir /home/debian-transmission

$ sudo chown -R debian-transmission:debian-transmission /home/debian-transmission

Configuración inicial de Telegram

Para utilizar Telegram con Transmission es necesario configurar el primero bajo la cuenta del usuario del segundo de la siguiente manera.

Convertirse en el usuario de Transmission.

$ sudo bash

$ su - debian-transmission

Ejecutar Telegram por primera vez, la aplicación le solicitará el número telefónico de la cuenta (que ya debe estar activa) que se utilizará para enviar los mensajes.

Especifique este número de la forma +CÓDIGO_PAÍS TELÉFONO.  Posteriormente especifique el código de confirmación enviado a través de Telegram.

$ telegram -k /etc/telegram/server.pub

Telegram-client version 0.01-beta, Copyright (C) 2013 Vitaly Valtman
Telegram-client comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.

Telephone number (with '+' sign): +573001234567

 *** phone registered
 *** sending code
 *** send_code: dc_num = 1

Code from sms (if you did not receive an SMS and want to be called, type "call"): 12345

User Telegram: 0 unread

> quit

Convertirse de regreso en el usuario sin privilegios habitual.

$ exit

$ exit

Crear el script para Transmission

Crear el script que realizará las tareas que deberán suceder una vez Transmission recibe un torrent completo, en este caso enviará un mensaje a través de Telegram utilizando el script de apoyo (telegram_sendmsg.sh).

Este script puede hacer uso de las siguientes variables de ambiente proporcionadas por Transmission.

TR_APP_VERSION Versión de Transmission.
TR_TIME_LOCALTIME Fecha y hora de recibo del torrent.
TR_TORRENT_DIR Directorio donde se almacenó el torrent.
TR_TORRENT_HASH Hash del torrent una vez recibido.
TR_TORRENT_ID Identificador del torrent.
TR_TORRENT_NAME Nombre del torrent recibido.

Copie el script torrent_done.sh en una ubicación conocida como /etc/transmission-daemon.

$ sudo chmod +x /etc/transmission-daemon/torrent_done.sh

Personalice las siguientes variables definidas en el script.

PROGRAM Ubicación del script telegram_sendmsg.sh.  Si este se encuentra ubicado en el PATH no debería necesitar ningún cambio en este variable.
RECIPIENT Nombre del contacto (peer) que recibirá los mensajes de Telegram.
MESSAGE Mensaje que será enviado cada vez que llegué un torrent completo.

Pruebas del envío de mensajes

Verificar que el envío de mensajes es exitoso con las tres aplicaciones o scripts implementados.  Ajuste el receptor de los mensajes de prueba según su caso.

Primero, verificar que Telegram CLI envía correctamente los mensajes.

$ telegram -k /etc/telegram/server.pub

> msg Pepito_Pimenton test1
> quit

Segundo, verificar el funcionamiento del script telegram_sendmsg.sh.

$ telegram_sendmsg.sh Pepito_Pimenton test2

Tercero, verificar el funcionamiento del script torrent_done.sh.

$ /etc/transmission-daemon/torrent_done.sh

Configurar Transmission

Configurar Transmission para que ejecute el script torrent_done.sh tan pronto como reciba un torrent completo.

Detener el servicio de Transmission.  Si esto no se realiza los siguientes cambios en la configuración no serán tenidos en cuenta.

$ sudo service transmission-daemon stop

Ajustar las siguientes opciones de configuración.

$ sudo vi /etc/transmission-daemon/settings.json

    "script-torrent-done-enabled": true,
    "script-torrent-done-filename": "/etc/transmission-daemon/torrent_done.sh",

Iniciar nuevamente el servicio de Transmission.

$ sudo service transmission-daemon start

Configuración final del sistema operativo

Por seguridad es conveniente remover el acceso al shell por parte del usuario de Transmission.

$ sudo usermod --shell /bin/false debian-transmission

Siendo un tanto paranóicos también puede ser conveniente bloquear la cuenta para impedir su acceso directo.

$ sudo passwd -l debian-transmission

Tenga en cuenta que se realizaron estos pasos para cuando necesite acceder como este usuario.

Recursos

Instalar un cliente de torrent en la Raspberry Pi con Transmission en Raspbian

Introducción

Transmission_logoLa idea general consiste en implementar un cliente de Torrent que se ejecute continuamente en una Raspberry Pi y sea administrable a través de una interfaz web.

Como cliente torrent se eligió Transmission ya que se ha tenido una buena experiencia con Deluge pero desafortunadamente su cliente web actualmente no es compatible con los navegadores móviles.  La interfaz web de Transmission es mucho mas simple.

Establecer el punto de montaje del almacenamiento

El almacenamiento de los archivos (descargados y en proceso de descarga) se realizará en una unidad USB que deberá ser montada automáticamente bajo /media/storage1.

Identificar cual es el dispositivo que referencia la unidad USB que se utilizará como almacenamiento.  En este caso será /dev/sda1.

$ sudo fdisk -l

Disk /dev/mmcblk0: 3904 MB, 3904897024 bytes
4 heads, 16 sectors/track, 119168 cylinders, total 7626752 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000981cb

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880     7626751     3751936   83  Linux

Disk /dev/sda: 32.5 GB, 32463912960 bytes
255 heads, 63 sectors/track, 3946 cylinders, total 63406080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005d951

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    63406079    31702016   83  Linux

Obtener el UUID de la partición a montarse automáticamente.

$ sudo blkid /dev/sda1

/dev/sda1: LABEL="storage1" UUID="12c4ff69-21a4-5c24-b126-98982b207782" TYPE="ext4

Actualizar el archivo de montaje automático de particiones (fstab) con la información de la partición contenida en la unidad USB de almacenamiento (ver último registro agregado).

$ sudo vi /etc/fstab

proc            /proc           proc    defaults          0       0 /dev/mmcblk0p1  /boot           vfat    defaults          0       2 /dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

## Storage1
UUID=12c4ff69-21a4-5c24-b126-98982b207782    /media/storage1        ext4    rw,user,errors=remount-ro    0    0

Crear el punto de montaje donde se seguirá montando la unidad USB.

$ sudo mkdir /media/storage1

$ sudo chown pi:plugdev /media/storage1

$ sudo chmod 755 /media/storage1

Remontar todas las particiones para que se incluya la recién creada para storage1.

$ sudo mount -a

Instalación de Transmission

$ sudo aptitude install transmission-daemon

Configuración incial

Detener el servicio.  Se debe tener en cuenta que si no se realiza esto, los cambios que se realicen en la configuración serán desechados durante la siguiente ejecución del servicio.

$  sudo service transmission-daemon stop

Editar el archivo de configuración de Transmission.

$  sudo vi /etc/transmission-daemon/settings.json

Ajustar los siguientes valores según las necesidades del contexto.

 "download-dir": "/media/storage1/downloaded",
 "incomplete-dir": "/media/storage1/downloading",
 "incomplete-dir-enabled": true,
 "rpc-password": "MiClaveSecreta",
 "rpc-port": 4040,
 "rpc-url": "/transmission/",
 "rpc-username": "torrents",
 "rpc-whitelist": "127.0.0.1,192.168.1.*",
 "rpc-whitelist-enabled": true,

En este caso se está estableciendo la siguiente configuración.

  • Los archivos ya descargados se almacenarán en downloaded mientras que los ya descargados se almacenarán en downloading.
  • El acceso web se realizará a través del puerto 4040 de la ubicación de la tarjeta Raspberry Pi.
  • Para acceder a la interfaz web se deberá utilizar el usuario torrents y la contraseña MiClaveSecreta.  Este acceso sólo será válido desde localhost o desde cualquier equipo de la red 192.168.1.x.
  • La contraseña (especificada en el campo rpc-password de manera plana) será reemplazada por su hash tan pronto como se reinicie el servicio.

Crear los directorios para las descargas en proceso y las finalizadas según se determinaron en la configuración.

$ sudo mkdir /media/storage1/downloaded

$ sudo mkdir /media/storage1/downloading

$ sudo chown debian-transmission:debian-transmission /media/storage1/downloaded

$ sudo chown debian-transmission:debian-transmission /media/storage1/downloading

$ sudo chmod 755  /media/storage1/downloaded

$ sudo chmod 755  /media/storage1/downloading

Reiniciar el servicio para que los cambios de la configuración recién hechos sean tenidos en cuenta.

$  sudo service transmission-daemon start