Solución errores Transmission en DNS-320L

Si habéis seguido el post donde se indicaba cómo sustituir el cliente torrent por Transmission, bastante más versátil y actual que el que el NAS lleva instalado.

Tras poner el daemon en funcionamiento es casi seguro que éste no irá todo lo fino que debería. Esto es debido a unos bugs que lleva el firmware de este modelo en concreto. Sin dar muchas vueltas a por qué no funciona bien paso a describir una solución que me funcionó a la perfección. La fuente de los pasos que se describen vienen de este foro.

Si accedemos al archivo /mnt/HD/HD_a2/.transmission/transimission-daemon.log y vemos cientos de errores del estilo de:

[00:07:47.201] UDP Please add the line "net.core.rmem_max = 4194304" to /etc/sysctl.conf (tr-udp.c:83)
[00:07:47.201] UDP Failed to set send buffer: requested 1048576, got 225280 (tr-udp.c:89)
[00:07:47.202] UDP Please add the line "net.core.wmem_max = 1048576" to /etc/sysctl.conf (tr-udp.c:94)
[00:08:25.579] tr_crypto error:24064064:lib(36):func(100):reason(100) (crypto.c:115)
[00:08:25.580] tr_crypto error:24064064:lib(36):func(100):reason(100) (crypto.c:115)
[00:08:25.580] tr_crypto error:24064064:lib(36):func(100):reason(100) (crypto.c:115)
[00:08:25.580] tr_crypto error:24064064:lib(36):func(100):reason(100) (crypto.c:115)
[00:08:25.580] tr_crypto error:24064064:lib(36):func(100):reason(100) (crypto.c:115)
[00:08:25.580] tr_crypto error:24064064:lib(36):func(100):reason(100) (crypto.c:115)

Es posible que el arhcivo en cuestión llegue a ocupar cientos de megas, por lo que es casi seguro que tengamos estos errores. Para los errores de las 3 primeras línes escribimos desde telnet en nuestro NAS:

echo 4194304 >/proc/sys/net/core/rmem_max
echo 1048576 >/proc/sys/net/core/wmem_max

Para los errores restantes hemos de escribir en la misma ventana de telnet:

chmod 664 /dev/random
chmod 775 /dev/urandom

Estos cambios se pierden al reiniciar el NAS, por lo que sería conveniente añadirlo al archivo /ffp/start/transmission.sh
Mi archivo bash quedaría tal que así:

</pre>
#!/ffp/bin/sh

# PROVIDE: Transmission

. /ffp/etc/ffp.subr

if [ -d /mnt/HD/HD_a2 ]; then
 TRANSMISSION_HOME=/mnt/HD/HD_a2/.transmission-daemon
else
 TRANSMISSION_HOME=/mnt/HD_a2/.transmission-daemon
fi

name="transmission-daemon"
command="/ffp/bin/$name"
start_cmd="transmission_start"
stop_cmd="transmission_stop"
status_cmd="transmission_status"
user=nobody
su_cmd="/ffp/bin/su"

transmission_start()
{
 if [ ! -d ${TRANSMISSION_HOME} ]; then
 $su_cmd $user -c "mkdir ${TRANSMISSION_HOME}"
 fi
 echo "Starting $name"
 chmod 664 /dev/random
 chmod 775 /dev/urandom
 echo 4194304 >/proc/sys/net/core/rmem_max
 echo 1048576 >/proc/sys/net/core/wmem_max
 $su_cmd $user -c "$command -g ${TRANSMISSION_HOME} -e ${TRANSMISSION_HOME}/$name.log"
}

transmission_stop()
{
 echo "Stopping $name"
 /ffp/bin/killall -SIGINT $name
}

transmission_status()
{
 _pids=$(pidof $name)
 if test -n "$_pids"; then
 echo "$name is running"
 else
 echo "$name not running"
 fi
}

run_rc_command "$1"
<pre>

Con esto debería de funcionar correctamente siempre y cuando tengamos las opciones correctamente configuradas.