torrents.home: un servicio de descargas

Construído con una Raspberry Pi Modelo B y un disco externo SATA-USB de 2Tb que me he «encontrado» por aquí.

Resumen

Por si alguien no quiere seguir leyendo todo el artículo, que me ha salido un poco denso, estas son mis conclusiones.

Este montaje funciona. No es óptimo porque la Raspberry es muy modesta y algunos de los programas instalados muy pesados para ella, pero hace su trabajo. Y lo hace bien. El montaje físico, por otra parte, es feo, pero no tengo recursos ahora para cajas ni otros adornos.

Montaje provisional mientras escucho los ruidos que produce el disco y decido qué hacer.

Ha sido más sencillo de lo que pensaba. No está totalmente integrado con la red pero es completamente funcional. El montaje físico, ese sí, da un poco de grima. La culpa es de los cables, que por más que he intentando emplear los más cortos terminan siendo mayores en volumen que la propia CPU. El disco, por su parte, requerirá algunos retoques más porque ahora mismo la vibración produce mucho más ruido del que debiera. He encontrado unas patas de goma pero aún no tengo claro cómo situarlas para que absorban vibraciones.

Pero vamos a la parte de software, ¿ qué pretendo con el montaje ? Dotar a la red casera de un servicio de descargas y compartición de archivos que se presente al resto de los equipos con el menor impacto posible. Tanto para enviarle descargas como para acceder a los resultados.

Así que comienzo a instalar todo el software del gráfico de arriba sin tener casi dificultades. Hay un par de principios a tener en cuenta en todo esto. Uno es que en esta máquina aún no están los usuarios de red implicados -es posible que no lo lleguen a estar nunca para no complicar el modelo- por lo que se jugará mucho con que la protección perimetral de la red.

Otro es que el uso debe ser sencillo: varias formas de enviar descargas y varias de recibir los resultados. No todas estarán implementadas ahora, por supuesto, bien porque dependen de otros servicios (como el correo interno para la red @home), bien porque quiero disfrutar creándolos y estoy un poco desbordado por ideas pendientes.

¿Qué ocurre cuando un archivo se ha descargado? Para empezar está disponible en el directorio correspondiente, exportado a la red por varias vías (NFS, SMB y HTTP), pero lo idóneo es que informe a alguien de que el archivo se ha conseguido y, en casos más concretos como los libros (books.home) o los vídeos (media.home), pase una copia a dichos servicios.

Notificar por correo ya estaría bien como primer paso; lo otro lo veremos en cuanto me aclare sobre cómo montarlo. Ah, por cierto, si hablo de enviar copias es porque pretendo compartir tanto como conseguir así que salvo que tenga problemas de disco espero ser de utilidad a alguien.

Ahora el montaje de programas y los comentarios sobre cada uno. Primero un esquema gráfico y luego simples anotaciones; los detalles más técnicos se pueden encontrar en la red y en las referencias de la sección final.

Transmission

Instalarlo y ponerlo en marcha ha sido trivial, aunque he encontrado algunas cosas raras en el programa. Su configuración, por ejemplo, que resulta que emplea un archivo que sobrescribe si está en marcha, por lo que hay que parar el servicio, hacer los cambios y encenderlo o enviarle una señal (SIGHUP) para que los releea.

Algunos ajustes importantes son:

  • rpc-authentication-required: true,
  • rpc-bind-address: «127.0.0.1»,
  • rpc-enabled: true,
  • rpc-port: 9091,
  • rpc-url: «/transmission/»,
  • rpc-username: «torrents»,
  • rpc-password: contraseña de torrents,
  • rpc-whitelist: «127.0.0.1,192.168.100.*»,
  • rpc-whitelist-enabled: true,

Pero también resulta que hay ajustes que no aparecen en el archivo predeterminado y he tenido que buscar bastante para encontrar una lista de ellos (la dirección está en las referencias). Las que dejo aquí reflejadas son las que hacen referencia a los directorios y archivos, que son las que me interesan inicialmente. Cuando entienda mejor cómo funciona BitTorrent emplearé otros ajustes.

  • download-dir: Directorio donde guardar descargas completas.
  • incomplete-dir: Donde guardar las descargas en curso para no confundir con se visita el anterior.
  • incomplete-dir-enabled: Activar directorio de descargas en curso
  • rename-partial-files: Si está activo se añade .part a las descargas en curso.
  • start-added-torrents: Comenzar las descargas según se añaden a la cola.
  • trash-original-torrent-files: Borrar archivos torrent cuando se leen del directorio de entrantes.
  • umask: Máscara de creación de archivos en decimal ya que JSON, el formato empleado en la configuración, no admite notación en octal (mira tú por dónde eso no lo sabía).
  • watch-dir: Directorio de descargas entrantes. Se copian allí y entran en la cola y se activan.
  • watch-dir-enabled: Activar el anterior.

nginx

Hace mucho que no empleo este programa en mis sistemas. La culpa la tuvieron varias aplicaciones PHP que encajaban entre mal y muy mal con él, casi hasta el punto de parecer magia el que uno de ellos consiguiese funcionar, por lo que cansado lo descarté por lo que más fácil me lo ponía: apache.

Si ahora opto por nginx es porque es ligero y porque pretendo que sea sobre todo un frontal a aplicaciones internas. Consigo con ésto dos cosas:

  • Que los URL de la red sean lo más limpios posible
  • Tener la opción de añadir una capa de seguridad si me es necesario

Dado que sólo hay un servidor virtual la configuración se reduce a lo siguiente:

# Configuración de servidor torrents.home
#
server {
       listen 80 default_server;
       listen [::]:80 default_server;

       root /var/www/html;

       index index.html;
       server_name torrents.home;

       location /monitorix {
                proxy_pass http://localhost:8080;
       }
       location /downloads {
                fancyindex on;
                fancyindex_exact_size off;
                fancyindex_localtime on;
                fancyindex_hide_symlinks on;
                root    /var/lib/transmission-daemon/;
       }
       location / {
           proxy_pass http://localhost:9091;
       }
}

Y sí, empleando el módulo fancyindex he creado un desvío (http://torrents.home/downloads) para que sea posible acceder con un navegador web a los archivos descargados. Otra opción más en éste, mi montaje.

monitorix

Tanto en el gráfico como en la configuración de nginx se advierte la presencia del programa monitorix, una aplicación que construye gráficas de varios aspectos del sistema y que he puesto también en este servidor porque quería probar la interacción entre ambos programas y, además, echarle un vistazo a este monitor de sistemas.

Un poco exagerado para una Raspberry tan modesta como la que estoy empleando pero ha sido muy instructivo.

En la configuración del programa (/etc/monitorix/monitorix.conf) hay que incluir lo siguiente para que funcione correctamente:

hostname = torrents.home
url_prefix_proxy = http://torrents.home

Acceso vía recurso Samba

Pues como el/los protocolos SMB/CIFS son una locura ya desde el principio debido a que tienen su origen en Microsoft y su extraño peregrinar en el tiempo y en el espacio estoy intentando que esta parte sea la más sencilla posible.

Un servidor independiente con dos recursos compartidos (sin impresoras ni directorios de usuario ni perfiles ni leches): uno para acceder a los archivos descargados de sólo lectura y otro para lo contrario, para añadir nuevos archivos torrent para descargar.

La configuración queda así:

[descargas]
        comment = Archivos descargados
        guest ok = Yes
        guest only = Yes
        path = /var/lib/transmission-daemon/downloads
[entrantes]
        comment = Archivos torrent para descargar
        force user = torrents
        guest ok = Yes
        guest only = Yes
        path = /var/lib/transmission-daemon/incoming
        read only = No

La única precaución es asegurarse de que el directorio de entrantes permite escribir en él a todo el mundo; y el resto funciona de fábula.

Acceso vía NFS

Y sí, el viejo y fiable NFS que voy a activar aquí por si necesito tener un acceso más desde las máquinas escritorio.

Lo primero que hago es crear montajes bind para los directorios que necesito exportar; primero a mano y luego inscritos en la tabla /etc/fstab. No es necesario para las versiones NFS inferiores a la cuatro pero queda más limpio de cualquier manera.

$ sudo mkdir -p /exports/downloads /exports/incoming
$ sudo mount -o bind /var/lib/transmission-daemon/downloads /exports/downloads
$ sudo mount -o bind /var/lib/transmission-daemon/incoming /exports/incoming

Después creo la exportación de dichos montajes en el archivo /etc/exports de la siguiente forma:

/exports/downloads *(ro,all_squash,insecure,async,no_subtree_check,anonuid=1001,anongid=1001)
/exports/incoming *(rw,all_squash,insecure,async,no_subtree_check,anonuid=1001,anongid=1001)

El UID y el GID indicados corresponden al usuario torrents que es la cuenta que empleo para acceso a los archivos. Está añadido al grupo debian-transmission para que interactúe con el programa sin trabas.

Referencias

1 thoughts on “<span>torrents.home: un servicio de descargas</span>”

Comments are closed.