Archivo

Entradas Etiquetadas ‘MLDonkey’

Exception setuid y Buffer Overflow en Mldonkey

viernes, 20 de septiembre de 2019 2 comentarios

Mldonkey es un software con bastantes años a sus espaldas que permite compartir archivos entre múltiples tipos de redes: torrent, edonkey, kadmelia, DC++, etc. Una de sus principales virtudes es que, además de ser multiplataforma, se puede ejecutar sin interfaz gráfica, con lo que el consumo de recursos es bastante moderado.

Si en alguna ocasión decidimos mover su carpeta de instalación (que contiene toda la configuración de puertos, limitaciones de ancho de banda, etc.), es probable que nos encontremos con el siguiente error en su log («/var/log/mldonkey/mldonkey-server.log»):

2008/03/08 19:41:24 [dMain] mldonkey is now running as user mldonkey
2008/03/08 19:41:24 [dMain] Exception setuid failed: Operation not permitted trying to set user_uid [107]

Esto es debido a que el «id» del usuario que ejecuta ahora el servicio de mldonkey ha cambiado. Basta con averiguar el nuevo id de nuestro usuario «mldonkey» con el comando «id -u mldonkey» y actualizar el fichero «downloads.ini» (alojado en «/var/lib/mldonkey/») cambiando el atributo «run_as_userid» y «run_as_user» en caso de haber cambiado también de nombre de usuario.

Por otro lado, si tenemos una conexión a Internet de alta velocidad es probable que nos encontremos con el siguiente error en el log:

[TCP_BS]: BUFFER OVERFLOW 488680+16397> 500000 MESSAGE: [(0)(0)(64)(9)(7)(0)(0)(0)(64)(0)(36)(128)(0)(2)(186)(3)(230)(247)(95)(152)…]

Tendremos por tanto que ampliar la directiva «client_buffer_size» del fichero «download.ini» de 500000 a 5000000

Categories: GNU/Linux Tags:

NAS ZyXel 325-V2

lunes, 14 de diciembre de 2015 Sin comentarios

El NAS ZyXel 325-V2 se diferencia de la primera versión en un cambio estético de la carcasa de plástico y en una mejora del ventilador posterior que parece hacer menor ruido. A parte de eso dispondremos de un sistema de almacenamiento en red con dos bahías para discos duros SATA de 3’5″ y 2’5″ con soporte para RAID 0, 1 y JBOD, tarjeta de red Gigabit, dos USB 2.0 traseros y uno 3.0 frontal frontal con un consumo eléctrico que varía de entre 15W con dos discos duros en marcha a 7W cuando pasa a modo en reposo.

El panel de administración puede parece bastante simple y no tan completo como los NAS de Synologic, pero la diferencia de precio también es bastante notable. Gracias a la comunidad estas diferencias intentan cubrirses con paquetes de software de terceros.

Como vamos a hacer del NAS un servicio de red fijo, lo que nos va a interesar es darle una IP fija a través de la configuración del servidor de DNS. Para eso se necesita averiguar su dirección MAC de forma fácil con el siguiente comando (sabiendo previamente la IP que se le ha sido asignado previamente o el nombre del equipo):

ping 192.168.1.55 -c 1

arp -a

A través de Samba accederemos a «smb://IP-NAS/admin/zy-pkgs/» y crearemos un fichero «web_prefix» que contendrá la siguiente URL:

http://downloads.zyxel.nas-central.org/Users/Mijzelf/zypkg-repo/

Desde el panel web de administración del NAS iremos a la sección «Firmware/Packages» y, después de actualizar el Firmware si existe alguna versión posterior, le daremos al botón de «Acceder listado desde Internet». Aparecerá un único paquete llamado «MetaRepository» que tendremos que seleccionar e instalar. Tras esto ya podremos instalar FFP (desde el cual podremos instalar repositorios con uwsiteloader), RandomTools, NFS y pyLoad por ejemplo.

Para instalar nuestro software de descargas favorito (MlDonkey), entraremos por SSH al NAS y ejecutaremos lo siguiente:

su

uwsiteloader.sh (seguimos los pasos del asistente)

slacker -U

slacker -i mldonkey

exit

Debido a que queremos tener todo lo relacionado con MlDonkey guardado en disco duro por temas de espacio, lo que haremos es un enlace simbólico de la siguiente forma y lanzaremos el proceso para que genere la estructura de carpetas:

mkdir /mnt/HD_a2/mldonkey

cd /mnt/HD_a2

chmod -R 777 mldonkey/

ln -s /mnt/HD_a2/mldonkey/ .mldonkey

mlnet

Cerraremos el proceso anterior con un simple CTRL+C y empezaremos a configurarlo:

vim .mldonkey/downloads.ini (y editamos las ip’s permitidas añadiendo 192.168.1.0/24)

mkdir /mnt/HD_a2/mldonkey/logs

Generaremos un fichero de configuración en «/mnt/HD_a2/mldonkey/mldonkey-server» con el siguiente contenido:

MLDONKEY_DIR=/mnt/HD_a2/mldonkey
MLDONKEY_USER=admin
MLDONKEY_GROUP=everyone
MLDONKEY_UMASK=0022
LAUNCH_AT_STARTUP=true

Crearemos el script que se encargará de gestionar el servicio «/mnt/HD_a2/mldonkey/mldonkey.sh» con el siguiente contenido:

 

#!/ffp/bin/sh
#
# Original file :
# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
# Modified for Debian GNU/Linux
# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
# Version: @(#)skeleton 1.9.1 08-Apr-2002 miquels@cistron.nl
#
#
# This file has been rewritten by Sylvain Le Gall <gildor@debian.org>
# and Samuel Mimram <smimram@debian.org> for the mldonkey package.
#
### BEGIN INIT INFO
# Provides: mldonkey-server
# Required-Start: $network $remote_fs
# Required-Stop: $network $remote_fs
# Should-Start: $local_fs
# Should-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Server for the mldonkey peer-to-peer downloader.
# Description: Server for the mldonkey peer-to-peer downloader.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=mlnet
EXEC=/usr/local/zy-pkgs/ffproot/ffp/bin/$NAME
DESC=»MLDonkey»
CONFIG=/mnt/HD_a2/mldonkey/mldonkey-server
PIDDIR=/var/run/mldonkey
PIDFILE=$PIDDIR/$NAME.pid
LOGFILE=/mnt/HD_a2/mldonkey/logs/mldonkey-server.log
SERVERLOG=/mnt/HD_a2/mldonkey/logs/mlnet.log

test -e $CONFIG || exit 0

set -e

Warn ()

{
echo «$*» >&2
}

Error ()
{
code=$1
shift

echo «.»
Warn «$DESC: $NAME [ERROR] $@»
exit $code
}

StartErrorCheck ()
{
if [ -f «$SERVERLOG» ] && tail -n 2 «$SERVERLOG» | grep -qi ‘aborting’ ; then
Warn «$DESC: $NAME [ERROR] server start error»
tail –verbose $SERVERLOG
exit 1
fi
}

. $CONFIG

# Look for the default locale
if [ -f «/etc/default/locale» ]; then
. /etc/default/locale
export LANG
fi

if [ -n «$MLDONKEY_UMASK» ]; then
umask $MLDONKEY_UMASK
fi
# /var/run might be on tempfs, see #354701.
if [ ! -d /var/run/mldonkey ]; then
mkdir -m 755 /var/run/mldonkey
fi
if [ ! -d /var/log/mldonkey ]; then
mkdir -m 755 /var/log/mldonkey
fi
if [ -n «$MLDONKEY_USER» ] && [ -n «$MLDONKEY_GROUP» ]; then
chown -R $MLDONKEY_USER:$MLDONKEY_GROUP /var/run/mldonkey
chown -R $MLDONKEY_USER:$MLDONKEY_GROUP /mnt/HD_a2/mldonkey/logs
fi

WRAPPER_OPTIONS=»–iosched idle»

# Set configuration value, from CONFIG
if [ -n «$MLDONKEY_USER» ] && [ -n «$MLDONKEY_GROUP» ]; then
WRAPPER_OPTIONS=»$WRAPPER_OPTIONS –chuid $MLDONKEY_USER:$MLDONKEY_GROUP»
fi

if [ -n «$MLDONKEY_DIR» ]; then
WRAPPER_OPTIONS=»$WRAPPER_OPTIONS –chdir $MLDONKEY_DIR»
fi

if [ -n «$MLDONKEY_GROUP» ]; then
WRAPPER_OPTIONS=»$WRAPPER_OPTIONS –group $MLDONKEY_GROUP»
fi

if [ -n «$MLDONKEY_UMASK» ]; then
WRAPPER_OPTIONS=»$WRAPPER_OPTIONS –umask $MLDONKEY_UMASK»
fi

if [ -n «$MLDONKEY_NICENESS» ]; then
WRAPPER_OPTIONS=»$WRAPPER_OPTIONS –nicelevel $MLDONKEY_NICENESS»
fi

case «$1» in
start|force-start)
echo -n «Starting $DESC: $NAME»

if [ «x$LAUNCH_AT_STARTUP» != «xtrue» ] && [ «x$1» = «xstart» ]; then
Error 0 «configuration file prevent $NAME to be started (use force-start).»
fi

if [ -z «$MLDONKEY_DIR» ] || [ ! -d «$MLDONKEY_DIR» ]; then
if [ -z «$MLDONKEY_DIR» ]; then
MLDONKEY_DIR=»(unset)»
fi
Error 1 «$MLDONKEY_DIR is not a valid directory.»
fi

if [ ! -f «$MLDONKEY_DIR/downloads.ini» ]; then
Error 1 «$MLDONKEY_DIR/downloads.ini is not a valid file.»
fi

#USER=`/usr/bin/stat –format=»%U» «$MLDONKEY_DIR/downloads.ini»`

USER=»admin»

WRAPPER_OPTIONS=»$WRAPPER_OPTIONS –user $USER»

start-stop-daemon –start $WRAPPER_OPTIONS \
–pidfile $PIDFILE –background –exec $EXEC \
— -log_file $SERVERLOG -pid $PIDDIR 2>&1

StartErrorCheck

echo «.»
;;

stop)
echo -n «Stopping $DESC: $NAME»
start-stop-daemon –stop –oknodo –pidfile $PIDFILE –retry 30
echo «.»
;;

force-reload|restart)
$0 stop
$0 start
;;

*)
Error 1 «Usage: $0 {start|stop|restart|force-reload|force-start}»
;;
esac

exit 0

Le daremos permiso de ejecución:

chmod u+x /mnt/HD_a2/mldonkey/mldonkey.sh

Y finalmente crearemos el script que se encargará de levantar el servicio al inicio en «/ffp/start/mldonkey-start.sh» con el siguiente contenido:

#!/ffp/bin/sh
# PROVIDE: mldonkey
# REQUIRE: LOGIN
/mnt/HD_a2/mldonkey/mldonkey.sh start

Le daremos permiso de ejecución:

chmod u+x /ffp/start/mldonkey-start.sh

Si deseamos que el NAS esté accesible por NFS, el camino rápido sería obtenido el identificador del usuario y del grupo correspondiente:

id -u admin

id -g admin

Editaremos el fichero «/etc/exports» con una línea similar a esta siendo 192.168.1.11 la IP que montará la unidad NFS  501 el id de usuario y grupo:

/mnt/HD_a2 192.168.1.11(rw,all_squash,anonuid=501,anongid=500)

Si intentamos colocar algo así como «192.168.1.0/24» no funcionará.

Reiniciaremos el servicio de NFS con el siguiente comando y ya lo tendremos listo en la red:

/usr/local/zy-pkgs/etc/init.d/NFS restart

En el equipo que queramos hacer uso de la unidad NFS (una Raspberry) tendremos que editar el fichero «/etc/fstab» añadiendo la siguiente línea:

192.168.1.10:/mnt/HD_a2    /mnt/nas nfs nouser,atime,auto,rw,dev,exec,suid 0   0

Prepararemos la carpeta donde estará del siguiente modo:

mkdir /mnt/nas

chown pi:users -R /mnt/nas

chmod 777 -R /mnt/nas

mount -a

 

 

 

 

Enlaces de interés:
http://forum.nas-central.org/viewtopic.php?f=249&t=15731&sid=b252ddb5624aca7cd22055ca774de8f7
http://zyxel.nas-central.org/wiki/3rd_party_zypkgs#MetaRepository
http://zyxel.nas-central.org/wiki/FFP_as_zypkg

MLDonkey 3.1.3 en Raspbmc

domingo, 15 de diciembre de 2013 5 comentarios

Si somos poseedores de una Raspberry Pi con Raspbmc de S.O., posiblemente echemos de menos poder utilizar la última versión de MLDonkey que provee de soporte para enlaces magnet.

Para ello será tan fácil como descargar el código fuente de MLDonkey y compilarlo con mucha paciencia en nuestra Raspberry.

Primero actualizaremos todos los paquetes de nuestro sistema e instalaremos la versión de MLDonkey que hay en los repositorios con los siguientes comando:

# sudo apt-get update

# sudo apt-get upgrade

# sudo apt-get install mldonkey

Luego descargaremos las utilidades necesarias para la compilación:

# sudo apt-get -y install gcc make bc

Descargaremos el código fuente de MLDonkey (hay que buscar en las descargas el enlace al «Source»), los descomprimiremos e iniciaremos la compilación:

# wget http://downloads.sourceforge.net/project/mldonkey/mldonkey/3.1.3/mldonkey-3.1.3.tar.bz2

# tar xvjf mldonkey-3.1.3.tar.bz2

# ./configure –enable-batch

# make mlnet.static

La compilación puede haber tardado unas horas, pero al final tendremos un fichero llamado «mlnet.static» que deberemos copiar con el siguiente comando, pero no sin antes hacer una copia de seguridad de la versión anterior por precaución:

# sudo mv /usr/bin/mlnet /usr/bin/mlnet.backup

# sudo cp mlnet.static /usr/bin/mlnet

Para vuestra comodidad os dejo el tarball que contiene el ejecutable ya compilado para ARM:

mldonkey-3.1.3.static.arm-Linux_glibc-2.13.tar