2011-10-02

Proyecto Weekend: Configurar el router con dd-wrt para descargas de torrents y servidor de ficheros

Objetivos del proyecto
  • disponer de un servidor de ficheros doméstico ultra-barato
  • utilizar el servidor para descargar automáticamente series utilizando bittorrent y rss
Esta guía está totalmente basada en esta:
http://www.luminaria.cc/en/dd-wrt-home-server-part-2-bittorrent-client-and-safe-unmount/ , un fenómeno el tío.

Instalación de dd-wrt

El mejor sustituto del firmware del router para estos propósitos es dd-wrt. Digo esto porque es la que más routers soporta y la más utilizada, pero hay otras variantes. Para comprobar la compatibilidad de dd-wrt con tu router:

http://www.dd-wrt.com/wiki/index.php/Supported_Devices

si tu router no está ahí, olvídate. Si sí está, entonces podrás encontrar explicaciones (con suerte) por el wiki o los foros. 

Preparación del disco USB
Necesitamos que al router se le pueda conectar un disco USB. Por varios motivos: primero porque si no la memoria del router será insuficiente para instalar software, y además porque lo utilizaremos como servidor doméstico y para las descargas .

Necesitaremos crear al menos una partición ext3 en el disco usb. Lo mejor será crear 3, y así una será para el software (/opt) otra para el swap y otra para los datos (/mnt). Teóricamente la de los datos puede ser ntfs, pero yo no he conseguido que funcione. En mi caso excepto la swap (que es linux-swap) las otras dos son ext3. 

Para crearlas lo mejor es usar un pc con linux y gparted (sirve un livecd). En esta guía se explican muchas de las cosas que cuento yo aquí, y en concreto la forma de preparar el disco está aquí: http://www.luminaria.cc/en/dd-wrt-home-server-part-2-bittorrent-client-and-safe-unmount/?page=2#Preparing_the_disk. Luego el tío se lía un poco demasiado con el tema de quitar y meter el disco, yo no me he liado tanto.

Conectar disco, y habilitar en Services >> USB >> Usb Support el "Usb Storage Support" (con automatic drive mount, parece funcionar) y Disk Mount Point "/opt". Él únicamente montará la primera partición. Para montar más (las particiones disponibles están en /dev/discs/disc0), por ejemplo, en mi caso:

          mount -t ext3 /dev/discs/disc0/part4 /mnt

(es buena idea poner este comando en Administration >> Commands >> Startup)

Habilitar Samba
Habilitando SAMBA ya tendremos nuestro servidor doméstico. Simplemente en Services >> NAS >> Filesharing habilitamos las opciones. Super sencillo, yo no me maté nada:
  •   Server String = nombreDelServidor
  •   Workgroup = WORKGROUP
  •   Path to files = /mnt
  •   Public Share = enable
Instalar Optware
Paquetes de software adicionales al dd-wrt que ya podemos instalar, porque tenemos espacio de sobra, y que nos permitirán la descarga de torrents. 

Nos conectamos por telnet al router

   telnet 192.168.1.1 (la ip del router)

Nos bajamos el script de instalación y lo ejecutamos:

    wget http://www.3iii.dk/linux/optware/optware-install-ddwrt.sh -O /tmp/optware-install.sh
   sh /tmp/optware-install.sh 
     
¿Cómo averiguar qué paquetes hay disponibles?
    
   /opt/bin/ipkg-opt list 



Instalamos Transmission:
   /opt/bin/ipkg-opt -verbose_wget install transmission
Para arrancarlo: (es buena idea poner esto en Administration - Commands -  Startup) 
   /opt/bin/transmission-daemon -g /opt/etc/transmission-daemon

Para pararlo:
   killall transmission-daemon
Para configurar Transmission: La primera vez que lo arrancamos, crea automáticamente el fichero de configuración en /opt/etc/transmission-daemon/settings.json. Algunas cosas interesantes de configurar:
 - download-dir (donde dejará las descargas)
 - incomplete-dir (donde almacenará temporalmente las descargas, mientas no acaben)
 - incomplete-dir-enabled (para habilitar el "incomplete-dir", si no utiliza download-dir)
 - rpc-enabled (para habilitar el acceso remoto)
 - rpc-whitelist y rpc-whitelist-enabled para limitar las ips que se pueden conectar)
 - speed-limit* para controlar los límites de velocidad de descarga y subida

Se puede utilizar el Transmission con http://192.168.1.1:9091 (ip-del-router:rpc-port) o con el comando "transmission-remote". Por ejemplo, para añadir un torrent:

  transmission-remote -a untorrent.torrent
 
 

Habilitar el swap
Como no estoy muy seguro de si me llegará siempre la memoria, habilité una partición de swap. Normalmente no hace falta, pero por si acaso:

Instalamos busybox (para poder disponer del comando "swapon")

  /opt/bin/ipkg-opt install busybox

Ejecutamos el comando swapon

  /opt/bin/busybox swapon /dev/discs/disc0/part3

  
Obviamente necesitamos tener una partición formateada como linux swap en el disco. Para saber cómo vamos de memoria: el comando "free" nos lo dice. 

Automatizar la descarga de torrents
Para descargar torrents (o podcasts o cosas así...) utilizaremos "castget"  

Lo primero, lo instalamos:
  /opt/bin/ipkg-opt install castget

Castget necesita que creemos un fichero "/tmp/root/.castgetrc" en el que configuraremos los feeds que nos interesan y, para cada feed, le indicaremos dónde guardar los ficheros. Es el típico fichero con secciones. Cada feed debe ir en su sección. Ejemplo:

  [seccion 1]
  url=http://showrss.karmorra.info/feeds/378.rss
  spool=/mnt/downloads/torrents-dropped

Como la carpeta /tmp/root se borra cada vez que se reinicia el router , es necesario poner en el script de arranque un comando que lo copie de alguna parte. Lo mismo pasa con la carpeta "/tmp/root/.castget" que usa el castget para recordar lo que ya se ha descargado previamente. Si no la guardamos en alguna parte, al reiniciar se perderá:



En el script de inicio del dd-wrt he metido algo así:
  cp /mnt/castget/castgetrc.txt '/tmp/root/.castgetrc'
  mkdir '/tmp/root/.castget'
  cp /mnt/castget/*.xml '/tmp/root/.castget/'

y luego tendremos que acordarnos de guardar el xml cada vez que lo actualicemos.


Sólo falta programar con "cron" la ejecución de "castget", el guardado del xml y la adición de los ficheros torrent a transmission. Eso yo lo hago con este script:


# ------------------
# Castget
# ------------------
# actualizar torrents desde el rss
/opt/bin/castget
# guardamos porque /tmp esta en memoria
cp /tmp/root/.castget/*.xml /mnt/castget

# ------------------
# Transmission
# ------------------
# torrents se añaden al transmission
for file in /mnt/downloads/torrents-dropped/* ; do
   /opt/bin/transmission-remote -a $file
done
# los borramos que hacen feo
rm /mnt/downloads/torrents-dropped/*

# finalmente, los que ya hayan acabado, los detenemos
/opt/bin/transmission-remote -l | /bin/grep Seeding | /opt/bin/cut -d " " -f 4 | /bin/grep [0-9] | while read line
do
  /opt/bin/transmission-remote -t $line -S
done

# finalmente, los que ya hayan acabado, los detenemos
/opt/bin/transmission-remote -l | /bin/grep Seeding | /opt/bin/cut -d " " -f 3 | /bin/grep [0-9] | while read line
do
  /opt/bin/transmission-remote -t $line -S
done


el script lo guardamos en algún sitio que no se borre en los reinicios (/mnt). Hay que hacerlo ejecutable con "chmod +x script.sh" y lo planificamos con cron en Administration -- Management -- Cron. En la cajita de texto ponemos algo como esto:

  0 * * * * root /mnt/script.sh &

De esta forma se ejecutará cada hora. Para más información sobre cron:
http://www.dd-wrt.com/wiki/index.php/CRON



Publicar un comentario