MLDonkey chrooted en OpenBSD 4.0
Intro
Hay montones de clientes p2p para elegir pero he elegido MLDonkey porque soporta conexiones redes Bittorrent, Edonkey y Overnet. Además viene con un interfaz bonito e intuitivo, y como añadido extra puede ejecutarse sin depender de las X.Hay un port disponible para OpenBSD en /usr/ports/net/mldonkey, pero depende de X y no puede ejecutarse enjaulado, con lo que he decidido compilar mldonkey a mano y usar chrootuid para enjaularlo en su directorio propio (/mnt/misc/mldonkey en mi equipo).
Instalación
Para su instalación primero descargo las releases que he construido previamente (original, mirror):# su -
# pkg_add chrootuid-1.3.tgz
# tar xfvz mldonkey-2.8.1.static.i386-OpenBSD.tar.gz
# mkdir /mnt/misc/mldonkey
# mv mldonkey-distrib /mnt/misc/mldonkey/core
Creando el usuario
Después hay que crear el usuario y el grupo a los que corresponderá la tarea de ejecutar mldonkey:# groupadd _mldonkey
# useradd -g _mldonkey -d /mnt/misc/mldonkey/ -s /bin/sh _mldonkey
Cambios en login.conf
Debemos resolver el problema de siempre, en /etc/login.conf indicamos cuantos recursos del sistema puede usar un usuario, limitaciones para que el sistema no se vuelva inestable o alguien use sus cuotas de forma malintencionada.La clase por defecto es "daemon", demasiado conservadora por estas razones; pero MLDonkey necesita abrir multitud de archivos y sockets para funcionar eficientemente, con lo que creamos otra clase diferente para root dándole más chance (para más información consultar login.conf(5) y login(1):
# nano -w /etc/login.conf
---
root:\
:ignorenologin:\
:datasize=infinity:\
:maxproc=infinity:\
:openfiles-cur=2048:\
:stacksize-cur=8M:\
:localcipher=blowfish,8:\
:tc=default:
---
# vipw
---
root:$2a$08$9vuj6yEmq/2I...f3zO:0:0:root:0:0:Charlie &:/root:/usr/bin/ksh
^^^^
---
Dispositivos y configuraciones
Ahora crearemos los dispositivos (devices) y configuraciones adecuados. Necesitamos /dev/null y /dev/random dentro del chroot. También necesitamos un resolv.conf para resolver nombres de dominio:# mkdir /mnt/misc/mldonkey/dev
# mknod -m 666 /mnt/misc/mldonkey/dev/null c 2 2
# mknod -m 644 /mnt/misc/mldonkey/dev/urandom c 45 2
# mkdir /mnt/misc/mldonkey/etc
# cp /etc/resolv.conf /mnt/misc/mldonkey/etc
# chown -R _mldonkey:_mldonkey /mnt/misc/mldonkey
# chrootuid /mnt/misc/mldonkey _mldonkey core/mlnet -stdout
Ahora editaremos los archivos de configuración para listar las IP's a las que permitiremos conectar con el interfaz web, las máximas tasas de transferencia y nuestra dirección de correo para cualquier report:
# nano -w /mnt/misc/mldonkey/root/.mldonkey/downloads.ini
---
allowed_ips = [
"127.0.0.1";
"10.0.0.255";
"192.168.0.123";]
max_hard_upload_rate = 10
max_hard_download_rate = 70
mail = "my@email.com"
---
createKey: OS_Rng: open /dev/urandom operation failed with error 6
Ejecución y rc.local
A continuación ejecutaremos MLDonkey como servicio (daemon) dentro de su jaula y configuraremos password para el admin:# chrootuid /mnt/misc/mldonkey/ _mldonkey core/mlnet & > /dev/null
# telnet localhost 4000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Welcome to MLdonkey
Welcome on mldonkey command-line
Use ? for help
MLdonkey command-line:
> useradd admin mypass
> q
# nano -w /etc/rc.local
---
if [ -x /mnt/misc/mldonkey/core/mlnet ]; then
echo -n ' mldonkey'; /usr/local/sbin/chrootuid /mnt/misc/mldonkey/
_mldonkey core/mlnet & > /dev/null
fi
---