Home Cliente Torrent en Raspberry Pi conectado a la red mediante SAMBA (y a Home Assistant)
Post
Cancel

Cliente Torrent en Raspberry Pi conectado a la red mediante SAMBA (y a Home Assistant)

Vamos a montar un cliente Torrent sobre una Raspberry Pi, para aprovechar su bajo consumo, y luego accederemos a ella desde Windows gracias a un cliente SAMBA. Por si fuera poco, también vamos a conectarlo todo a Home Assistant.

¿Para qué?

La idea es delegar la tarea de cliente torrent a otro dispositivo que pueda estar encendido todos los días sin repercutir en el consumo eléctrico de forma notable (como si lo haría un ordenador de sobremesa) pero pudiendo luego acceder al contenido compartido desde el ordenador en sí. La idea de conectarlo a Home Assistant es solo un pequeño detalle.

Lista de componentes

  • Raspberry Pi (en mi caso una Raspberry Pi 3B)
  • Cableado (ethernet), caja, adaptadores y demás parafernalia para la Raspberry.
  • Nos interesa una tarjeta microSD de gran capacidad (depende cuanto vayamos a compartir).
  • Es posible emplear no una tarjeta microSD sino un disco externo conectado vía USB.
  • Un ordenador con conexión a internet.
  • Si queremos, conectaremos este sistema final a Home Assistant (aunque no es el fin de este tutorial, pero es casi inmediato).
  • Unos ~40 minutos de tiempo libre.

Software

  • Transmission (que es software libre, gratis y más simple que un botijo).
  • SAMBA (para conectarnos a la raspberry como una unidad de red).

Con nuestra Raspberry ya puesta en marcha, teniendo en cuenta que hemos flasheado Raspberry OS en la tarjeta (cómo aparece detallado aquí), vamos a configurar lo necesario. En mi caso accedo al dispositivo por SSH para no necesitar de pantalla, cosa que también explicamos en este post y que viene en la web oficial.

Una vez estemos ya en la consola (ya nos conectemos por SSH o directamente mediante teclado/ratón/monitor) vamos a actualizarla. Importante: estamos usando el usuario por defecto (pi) en esta entrada pero en cualquier caso, ¡HAY QUE CAMBIAR LA CONTRASEÑA POR DEFECTO!

1
2
3
sudo apt-get update && apt-get upgrade -y

passwd

Configuración de SAMBA

SAMBA es una implementación del protocolo CIFS para compartir archivos entre sistemas basados en UNIX y sistemas de Microsoft Windows. Instalamos el paquete necesario desde consola:

1
sudo apt-get install samba samba-common-bin

Tras unos segundos la instalación acaba y, suponiendo que no nos hemos movido del directorio por defecto, estaremos en /home. Vamos a crear aquí una carpeta que será nuestro directorio compartido. Si estamos usando un disco duro externo en lugar de la tarjeta microSD crearemos la carpeta dentro de la ruta del disco pero para este ejemplo hacemos:

1
mkdir /home/pi/compartido

Podemos llamar a la carpeta como queramos, pero TENEMOS que recordar ese nombre.

Ahora vamos a configurar SAMBA (esto es mas puñetero) para usar ese directorio como ruta compartida; para ello editamos un fichero llamado smb.conf que recoge la configuración de SAMBA. Usamos nano (un editor integrado en Linux) para editar directamente el fichero:

1
sudo nano /etc/samba/smb.conf

Se abrirá el fichero que podremos editar:

1
2
3
4
5
6
7
# Al final del fichero añadimos:
[compartido]
path = /home/pi/compartido
writeable=Yes
create mask=0777
directory mask=0777
public=no

El nombre entre [ ] sirve como indicador (podemos usar otro nombre), luego especificamos la ruta del directorio compartido y seteamos public como false de forma que requiera autenticación. La ruta de red en la que quedaría nuestro dispositivo será en este caso: //raspberrypi/compartido

PD: para cerrar un fichero que estamos editando en nano, pulsamos Ctrl + X y marcamos (escribimos) un «yes» o «y» y pulsamos Enter para confirmar el cambio.

Ahora vamos a crear un usuario para SAMBA. Por defecto voy a crear un usuario similar al del sistema y luego reiniciamos el servicio:

1
sudo smbpasswd -a pi

Esto creará un usuario llamado pi al que le asignaré una contraseña; podemos usar la misma que usamos para el usuario del sistema si no queremos recordar más. Este usuario podríamos llamarlo de otra manera pero por no complicar la cosa lo llamaré pi.

Reiniciamos el servicio SAMBA cómo:

1
sudo systemctl restart smbd

El dispositivo ya está listo para ser conectada, necesitamos únicamente su IP que podemos obtener mediante hostname -I aunque si ya estamos conectados vía SSH deberíamos saberla ya.

Conexión a Windows mediante SAMBA

Nos vamos al panel de «Este equipo» de Windows y buscamos «Conectar a unidades de red».

Panel de Equipo en Windows 10 Conectar a unidad de red en Windows 10

Seleccionamos una letra de unidad y a continuación introducimos nuestras credenciales que definimos previamente (pi/contraseña). Nuestra unidad de red debería aparecer ahora debajo de los discos locales.

Si lo hemos hecho todo bien, tendremos a nuestra disposición una carpeta en red; todo lo que esté ahí dentro realmente estará dentro de la Raspberry Pi. Ahora configuraremos Transmission para que descargue todo en ESE disco. De esta forma nuestro cliente Torrent podrá estar descargando incluso cuando nuestro ordenador está apagado, pero podremos seguir abriendo/cortando/copiando/borrando los archivos descargados desde nuestro ordenador.

Instalación y configuración de Transmission

1
sudo apt-get install transmission-daemon

En unos segundos/minutos Transmission estará instalado y ahora debemos detener el servicio (que arranca tras la instalación por defecto) para configurarlo:

1
sudo systemctl stop transmission-daemon

Vamos a desplazarnos ahora hasta el directorio que usamos antes en la configuración de SAMBA. Este en mi caso era: /home/pi/compartido (nos movemos con cd /home/pi/compartido) y una vez dentro vamos a crear dos directorios; uno para las descargas completadas y otro para las descargas en progreso. Una vez creadas, tenemos que darle permisos al usuario (en mi caso pi) sobre dichas carpetas:

1
2
3
4
sudo mkdir -p descargando
sudo mkdir -p completado
sudo chown -R pi:pi descargando
sudo chown -R pi:pi completado

mkdir CREA los directorios y chown les ASIGNA los permisos.

Ahora si, vamos a configurar Transmission; su fichero .json se encuentra en:

1
sudo nano /etc/transmission-daemon/settings.json

Con el fichero de configuración de Transmission abierto vamos a editar los siguientes campos con paciencia:

1
2
3
4
5
6
"incomplete-dir-enabled": true,
"rpc-whitelist": "192.168.*.*",
"rpc-password": "Your_Password",
"rpc-username": "Your_Username",
"download-dir": "/home/pi/compartido/completado",
"incomplete-dir": "/home/pi/compartido/descargando",

PD: en el caso de la contraseña (que voy a usar la misma que definí antes), cuando guardemos el fichero se cifrará y aparecerá en formato alfanumérico (no nos extrañemos por eso). En el caso del usuario uso pi nuevamente y en rpc-whitelist especificamos que acepte conexiones de cualquier usario de red local (192.168.x.x). ¡Los nombres de las carpetas deben ser los mismos que creamos antes!

Guardamos con Ctrl + X escribiendo ‘y’ (de yes) y pulsando Enter. Tenemos aún que modificar dos ficheros de configuración más; es una tarea delicada, pero paciencia.

Cambiamos el usuario a pi (que es el que estamos usando) en estos dos ficheros y guardamos igual que hemos hecho antes. ¡No tocamos nada más que eso!

1
sudo nano /etc/init.d/transmission-daemon
1
USER=pi
1
sudo nano /etc/systemd/system/multi-user.target.wants/transmission-daemon.service
1
user=pi

Ya solo nos queda reiniciar todos los servicios, otorgar permisos al usuario (pi) sobre la ruta /transmission-daemon que cuyo usuario por defecto hemos modificado y por último vamos a crear un directorio donde Transmission accederá a su .json de configuración nuevo y un enlace simbólico del antiguo directorio al nuevo (otorgándole permisos también):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Reiniciar los servicios:
sudo systemctl daemon-reload

# Otorgar permisos 
sudo chown -R pi:pi /etc/transmission-daemon

# Nuevo directorio:
sudo mkdir -p /home/pi/.config/transmission-daemon/

# Enlace simbólico:
sudo ln -s /etc/transmission-daemon/settings.json /home/pi/.config/transmission-daemon/

# Otorgar permisos:
sudo chown -R pi:pi /home/pi/.config/transmission-daemon/

Si no modificamos el usuario, será cosa de copiar y pegar con el usuario pi.

Iniciamos el servicio de Transmission que detuvimos al comienzo:

1
sudo systemctl start transmission-daemon

Accediendo a la interfaz de Transmission

En unos segundos la interfaz de Transmission estará lista y, si no lo hemos cambiado en el .json de configuración, el puerto por defecto es el :9091, con lo que accedemos a la interfaz desde nuestro navegador desde: 192.168.1.200:9091 donde se nos pedirá el usuario/contraseña que definimos antes (pi/contraseña).

Interfaz de Transmission descargando

La interfaz es sorprendentemente simple, un botón para cargar archivos .torrent a la izquierda del todo, para eliminar torrents una vez completos, reanudar y pausar. Cuando añadamos nuestro primer .torrent veremos que se nos presenta una ventana de diálogo dónde se muestra el espacio restante y la ruta por defecto /home/pi/compartido/descargando.

Si no lo hemos hecho ya, podemos consultar el contenido desde «Este equipo» y veremos que dentro de la carpeta «compartido» ya aparecen las dos carpetas «descargando» y «completado». En el momento que añadamos un .torrent a la cola aparecerá aquí.

Por último, en la parte inferior de la interfaz tenemos opciones adicionales como límites de velocidad, límites de velocidad automáticos que podemos activar en base a horas (por ejemplo podemos limitar la velocidad durante el día y que descargue / suba a toda velocidad durante la noche), puerto por defecto, etc. Conviene darle un vistazo.

¿Error de escritura? ¡Repasa el tutorial porque es posible que no hayas asignado los permisos adecuados al usuario!

Configuración de Transmission

Bajo la pestaña Peers conviene añadir alguna blocklist para evitar conexiones indeseadas. La mejor que he podido encontrar que se actualiza con bastante frecuencia está en Github y podéis encontrarla aquí; se añade a la blocklist escribiendo: https://github.com/Naunter/BT_BlockLists/raw/master/bt_blocklists.gz

Home Assistant

Si bien ya hemos acabado, Home Assistant tiene una integración por defecto para añadir Transmission a HASS y poder controla la velocidad, nº de torrents activos, inactivos, completos, etc. Para añadirlo no tenemos siquiera que escribir código .yaml ya, solo vamos a Configuración > Integraciones > + Añadir Integración > Transmission y rellenamos la IP del dispositivo, el puerto (por defecto 9091), usuario y contraseña (pi/contraseña).

Integración de Transmission

Estoy usando algunas tarjetas personalizadas para mostrar los detalles en Lovelace, de la forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
type: 'custom:stack-in-card'
title: Transmission
mode: vertical
cards:
  - type: horizontal-stack
    cards:
      - type: 'custom:mini-graph-card'
        entities:
          - sensor.transmission_down_speed
        line_color: red
        line_width: 8
        font_size: 75
        name: Bajada
      - type: 'custom:mini-graph-card'
        entities:
          - sensor.transmission_up_speed
        line_color: blue
        line_width: 8
        font_size: 75
        name: Subida
  - type: entities
    entities:
      - entity: switch.transmission_switch
        icon: 'mdi:switch'
      - entity: switch.transmission_turtle_mode
        icon: 'mdi:turtle'
      - entity: sensor.transmission_status
        icon: 'mdi:eye'
      - entity: sensor.transmission_total_torrents
        icon: 'mdi:eye'
      - entity: sensor.transmission_active_torrents
        icon: 'mdi:play'
      - entity: sensor.transmission_paused_torrents
        icon: 'mdi:pause'
      - entity: sensor.transmission_completed_torrents
        icon: 'mdi:check'
    theme: Google Dark Theme
    state_color: true

Podéis encontrar la tarjeta mini-graph-card aquí, la tarjeta para combinar varias tarjetas en una stack-in-card aquí y el tema Google Dark Theme aquí. De esta forma, en la interfaz Lovelace queda todo así:

Tarjeta Interfaz Lovelace

Esto es todo; Home Assistant soporta también integraciones para otros clientes torrent pero Transmission es la más liviana de todas y teniendo en cuenta que se ejecuta en una Raspberry Pi que ya soporta otros programas en paralelo, me parece la mejor alternativa.

This post is licensed under CC BY 4.0 by the author.

Instalación de Home Assistant en un equipo Intel NUC (avanzado)

Acceso remoto a Home Assistant con DuckDNS y certificado SSL emitido por Let’s Encrypt