¡Bienvenidos una vez más, amantes del P2P! Después de una espera que se nos ha hecho eterna, por fin podemos celebrar una noticia que muchos creíamos que nunca llegaría. La versión 3.0.0 de aMule ya está aquí y, creedme, merecía la espera. Para todos los que seguimos confiando en las redes eD2k y Kademlia, esto es como volver a ver a un amigo después de muchos años.
El proyecto, que llevaba más de cinco años sin un lanzamiento importante desde la versión 2.3.3 de 2021, ha vuelto a la carga con una versión que han bautizado acertadamente como «The ‘alive again’ version» (la versión «viva de nuevo»). Y no es para menos.
¿Qué trae de nuevo aMule 3.0.0?
El cambio más impactante, sin duda, está en el rendimiento. Los desarrolladores han realizado una profunda reescritura del sistema de E/S de disco y de la capa de red. El resultado son unas cifras que quitan el hipo: mejoras de velocidad de entre 100 y 380 veces más rápidas en descargas entre pares en comparación con la versión anterior, sin necesidad de cambiar de hardware. Las pruebas sobre el terreno hablan por sí solas: en un Mac Studio con chip Apple Silicon se ha pasado de 0,35 MB/s a 135 MB/s. ¡Una auténtica bestia!
Pero no todo es velocidad. aMule 3.0.0 también ha modernizado por completo sus entrañas:
- Sistema de compilación moderno: Se ha eliminado el anticuado Autotools y se ha unificado todo con CMake, lo que facilita enormemente la compilación en los sistemas actuales.
- Paquetes nativos para todos: Por fin tenemos binarios nativos y actualizados para las principales plataformas. Instalador y versión portable para Windows (x64 y ARM64), .dmg universal para macOS (Apple Silicon e Intel) y AppImage o Flatpak para Linux (x64 y ARM64). Ya no hay excusas para no tenerlo todo a punto.
- Límites de ancho de banda corregidos: Los limitadores de subida y bajada se han reescrito por completo para que funcionen como es debido, con un sistema de «token bucket» real que promete una gestión del tráfico mucho más precisa.
- HTTPS y más: La descarga de listas de servidores y otras funciones vía HTTPS vuelven a funcionar correctamente, y el cliente de geolocalización se ha actualizado a MaxMindDB.
La espera ha sido larga, pero la comunidad alrededor de aMule puede respirar tranquila. El proyecto no solo está vivo, sino que ha vuelto con una fuerza inusitada, modernizándose por completo sin perder esa esencia que nos hizo enamorarnos del P2P.
Este tutorial se compone de los siguientes pasos.
- A. Preparación.
- B. Compilación e instalación
- C. Creación de un Usuario Dedicado
- D. Automatización avanzada del servicio con Systemd
- E. Configuración de aMule
A. Preparación.
Para compilar la versión 3.0 estable de aMule tal como indica la documentación oficial, usaremos CMake. La ventaja de hacerlo en Debian 13 (Trixie) es que todos los paquetes y dependencias requeridos, incluyendo wxWidgets 3.2, están disponibles de forma nativa en los repositorios oficiales sin tener que buscar versiones alternativas.
Instalar las dependencias
El documento de instalación de GitHub menciona las dependencias obligatorias (como Crypto++, zlib y Boost) y las opcionales para la interfaz, los iconos en la bandeja del sistema y las estadísticas.
Actualizamos la lista de paquetes.
sudo apt update
Ejecuta este comando en tu terminal para instalar todas las librerías de desarrollo necesarias:
sudo apt install build-essential cmake git gettext libwxgtk3.2-dev \
libcrypto++-dev libboost-dev libboost-system-dev zlib1g-dev libupnp-dev \
libgd-dev libmaxminddb-dev libayatana-appindicator3-dev libglib2.0-dev
B. Compilación e instalación.
Descarga el código fuente
Sitúate en tu directorio de usuario para descargar el ćodigo fuente con este comando:
cd ~
Un vez ahí, descargamos el código fuente de aMule 3.0
wget https://github.com/amule-org/amule/archive/refs/tags/3.0.0.tar.gz
Como resultado obtendremos un archivo comprimido en Gzip
3.0.0.tar.gz
Descomprime el archivo así.
tar -xzf 3.0.0.tar.gz
Al descomprimirse creará un directorio con los archivos necesarios para la compilación.
Entramos al nuevo directorio con:
cd amule-3.0.0
Configuración avanzada con CMake (Exprimiendo la Pi 5)
En lugar de hacer una compilación genérica, vamos a pasarle a CMake una serie de directivas de optimización brutales para exprimir la arquitectura de los núcleos Cortex-A76 de la Raspberry Pi 5 y mejorar el rendimiento del almacenamiento.
Creamos un directorio limpio para la compilación y configuramos el entorno:
mkdir build && cd build
Ahora, lanza el comando de configuración con las banderas optimizadas:
cmake .. \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_C_FLAGS="-O3 -march=armv8.2-a+crypto -mtune=cortex-a76 -pipe" \
-DCMAKE_CXX_FLAGS="-O3 -march=armv8.2-a+crypto -mtune=cortex-a76 -pipe" \
-DBUILD_DAEMON=ON \
-DBUILD_REMOTEGUI=ON \
-DBUILD_AMULECMD=ON \
-DBUILD_WEBSERVER=ON \
-DBUILD_MONOLITHIC=OFF \
-DENABLE_MMAP=OFF \
-DENABLE_UPNP=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local
¿Por qué esta configuración?
-DCMAKE_BUILD_TYPE=RelWithDebInfo: Aplica las optimizaciones de velocidad de una versión Release, pero conserva los símbolos de depuración. Si la rama master sufriera un cierre inesperado, el core dump nos dirá la línea exacta del fallo sin ralentizar el demonio en el día a día.-DBUILD_MONOLITHIC=OFF: Desactivamos la interfaz gráfica «todo en uno». Al compilar sólo el demonio y las herramientas remotas, el binario es muchísimo más ligero.+cryptoycortex-a76: Obliga a GCC a generar instrucciones específicas para el procesador de la Pi 5, aprovechando su aceleración criptográfica por hardware para el cálculo de hashes P2P.-DENABLE_MMAP=OFF: Desactiva el mapeo de memoria. Usa E/S tradicional (más compatible con kernels de 16KB y sistemas remotos, evita corrupción). En lugar de proyectar los archivos directamente en la memoria virtual, el demonio usará las operaciones clásicas de lectura/escritura (read/write).
Importante sobre
DENABLE_MMAP=OFFen Debian 13
Desactiva el mapeo de memoria nativo de Linux.Efectos principales:
- ✅ Mayor compatibilidad: Evita problemas de corrupción en kernels con tamaños de página no estándar (como las páginas de 16 KB en Raspberry Pi 5 con Debian 13), en sistemas de archivos remotos (NFS, SMB) o con implementaciones problemáticas de
mmap.- ✅ Soluciona bucles de rehasheo en aMule, ya que elimina el desalineamiento de páginas que ocurría al superar ciertos tamaños de archivo.
- ❌ Rendimiento algo menor: Incrementa ligeramente el uso de CPU y reduce la velocidad de transferencia en almacenamiento rápido (NVMe, SSD), porque se copian datos entre usuario y kernel en cada operación.
Cuándo usarlo:
Solo si experimentas fallos con la opción activada (archivos corruptos, rehasheos infinitos, descargas que nunca completan). En caso contrario, mantenerONofrece mejor rendimiento.
4. Compilación.
Para no perder tiempo, le indicamos al sistema que compile aprovechando todos los núcleos del procesador en paralelo. Gracias al flag -pipe, el proceso se hará intercambiando datos en la RAM en lugar de escribir temporales intermedios en el disco:
cmake --build . -j"$(nproc)"
5. Instalación.
Una vez que el proceso finalice con éxito, instalamos los binarios optimizados en el sistema:
sudo cmake --install .
Refresca la caché de enlaces dinámicos del sistema
El comando ldconfig lo que hace es asegurar y actualizar la caché de las librerías compartidas (los archivos .so) en los directorios del sistema (como /usr/local/lib).
sudo ldconfig
Aunque en este caso, los ejecutables que se generan no instalan librerías compartidas del sistema y no sería necesario ejecutarlo , pero siempre es un buen hábito su ejecución.
Actualizar la caché de iconos
gtk-update-icon-cache -f -t /usr/local/share/icons/hicolor/
Si usas la Raspberry Pi con su entorno de escritorio: Al activar -DBUILD_REMOTEGUI=ON, has compilado amulegui. Si pretendes abrir esa interfaz gráfica directamente dentro del escritorio de tu Raspberry Pi, ejecutar este comando forzará al sistema a enterarse de que hay un nuevo icono disponible, haciendo que aparezca inmediatamente en el menú de aplicaciones sin necesidad de cerrar sesión o reiniciar.
B. Creación de un Usuario Dedicado
Por seguridad (aplicando el Principio de Menor Privilegio), nunca debemos ejecutar un demonio expuesto a la red con el usuario root o con nuestra cuenta personal. Al aislar aMule en su propio usuario de sistema, si el proceso se ve comprometido por algún exploit de red, el atacante se quedará atrapado en una «jaula» sin acceso al resto del sistema ni a tus datos personales.
b.1. Crear el usuario de sistema amule
Ejecutamos el siguiente comando para generar el entorno aislado:
sudo useradd -r -m -s /usr/sbin/nologin amule
-r: Define que es un usuario de sistema (no caduca).-m: Crea automáticamente su directorio de trabajo en/home/amulepara alojar sus configuraciones.-s /usr/sbin/nologin: Bloquea por completo cualquier intento de inicio de sesión (local o por SSH) con esta cuenta.
b.2. Preparar la carpeta en el almacenamiento.
Las carpetas de almacenamiento las puedes dejar tal vienen por defecto y tan solo deberás darles permisos como haremos mas adelate.
Como dispongo de un viejo disco mecánico conectado via usb a mi raspberry y para no desgastar el disco SSD/NVMe con la escritura intensiva del P2P, voy a crear una carpeta dedicada en mi disco de almacenamiento montado en /media
sudo mkdir -p /media/Disco_1TB/aMule/Incoming /media/Disco_1TB/aMule/Temp
Nota al lector: para montar un disco en Debian, sigue los pasos de Guía completa: Montar particiones al inicio en Debian
b.3. El truco maestro de los permisos (SGID)
Si le damos la propiedad de la carpeta exclusivamente al usuario amule, mi usuario habitual (raspberry) podrá leer las descargas pero no podrá borrarlas, renombrarlas ni moverlas a otra parte de la red sin usar sudo.
Para solucionar esto de forma elegante como un administrador profesional, aplicamos la siguiente configuración de permisos compartidos:
# 1. Metemos a tu usuario habitual en el grupo de amule
sudo usermod -aG amule raspberry
# 2. Hacemos que 'amule' sea el dueño y el grupo 'amule' sea el propietario de todo de forma recursiva
sudo chown -R amule:amule /media/Disco_1TB/amule_downloads
# 3. Damos permisos 775 (lectura, escritura y ejecución) recursivamente a todo lo actual
sudo chmod -R 775 /media/Disco_1TB/amule_downloads
# 4. Activamos el bit SGID en la carpeta raíz y en las subcarpetas de descarga
sudo chmod g+s /media/Disco_1TB/aMule
sudo chmod g+s /media/Disco_1TB/aMule/Incoming
sudo chmod g+s /media/Disco_1TB/aMule/Temp
💡 ¿Qué hace el bit SGID (
chmod g+s)? Es la clave de todo. Al activarlo en la carpeta madre, cualquier archivo o subcarpeta que aMule descargue e inserte ahí dentro heredará automáticamente el grupoamulecon permisos de escritura. Gracias a esto, tu usuarioraspberrysiempre tendrá el control total para gestionar las descargas completadas. (Nota: Recuerda reiniciar sesión con tu usuario o ejecutarnewgrp amulepara que el sistema reconozca tu nuevo grupo).
C. Automatización avanzada del servicio con Systemd
Para garantizar que el demonio arranque de forma impecable en cada inicio del sistema, creamos un archivo de servicio altamente optimizado para entornos de red:
sudo nano /etc/systemd/system/amuled.service
Pega el siguiente contenido:
[Unit]
Description=aMule Master Daemon
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=simple
User=amule
Group=amule
Environment="HOME=/home/amule"
ExecStart=/usr/local/bin/amuled
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
# Para detener el demonio y sus subprocesos (amuleweb) limpiamente
KillMode=control-group
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target
¿Por qué este servicio?
network-online.target: Espera a que la Raspberry Pi tenga una IP real asignada por la red antes de intentar lanzar el demonio, evitando fallos de conexión en el arranque.LimitNOFILE=65536: Eleva el límite de conexiones y archivos abiertos simultáneamente por Linux, algo vital para mantener la estabilidad cuando el P2P gestiona cientos de fuentes a la vez.KillMode=control-group: Garantiza que cuando el servicio se detenga, systemd mate a todos los procesos dentro de ese grupo, incluidoamuleweb.
Habilitamos el servicio para que sea automático y lo arrancamos:
Comenzamos con un daemon-reload: Le dice a Systemd que vuelva a escanear los directorios de configuración de los servicios. Como acabamos de crear el archivo amuled.service desde cero, el sistema operativo necesita este «refresco» para enterarse de que hay un nuevo servicio disponible y poder gestionarlo.
sudo systemctl daemon-reload
Después seguimos con un enable amuled.service: Configura el demonio para que se active automáticamente cada vez que arranques la Raspberry Pi. Lo que hace internamente es crear un enlace simbólico (symlink) en los directorios de inicio del sistema operativo (bajo el objetivo multi-user.target).
sudo systemctl enable amuled.service
Una vez activo haz un start amuled.service: Enciende y pone a funcionar el proceso de amuled inmediatamente en este preciso momento. No necesitas reiniciar la máquina para que el programa empiece a correr en segundo plano.
sudo systemctl start amuled.service
A modo de información status amuled.service: Muestra el estado actual del servicio en tiempo real. Te permite comprobar de un vistazo si el demonio está corriendo correctamente (active (running)), si está detenido o si ha fallado por algún error (failed). Además, tiene la enorme ventaja de mostrarte las últimas líneas del registro de log, lo que resulta vital para diagnosticar qué ha pasado si algo no va bien.
sudo systemctl status amuled.service
Casi con total seguridad, la primera vez que hagas esto, te lo encontraras inactivo, no te preocupes, es normal, la primera vez que amule arranca lo hace para crear sus directorios así como sus archivo de configuración.
raspberry@terrapi:~ $ sudo systemctl status amuled.service
● amuled.service - aMule Master Daemon
Loaded: loaded (/etc/systemd/system/amuled.service; enabled; preset: enabled)
Active: inactive (running) since Sun 2026-06-14 10:10:12 CEST; 2 days ago
Invocation: 029397ab533f4ea591acdaaec815610f
Main PID: 23651 (amuled)
Tasks: 15 (limit: 9492)
CPU: 1h 14min 333ms
CGroup: /system.slice/amuled.service
├─23651 /usr/local/bin/amuled
└─23680 amuleweb --amule-config-file=/home/amule/.aMule/amule.conf
jun 14 10:10:12 terrapi systemd[1]: amuled.service: Scheduled restart job, restart counter is at 1.
jun 14 10:10:12 terrapi systemd[1]: Started amuled.service - aMule Master Daemon.
D. Configuración de aMule
Ahora que ya arrancaste aMule por primera con la orden start.amuled.service y status.amuled.service no arrojó ningún error, es hora de comenzar
d.1. Generar contraseña encriptada (hash MD5)
echo -n "TuContraseñaSegura" | md5sum
Crea un par de contraseñas, una para aMuleGUI y la otra para aMuleweb.
Nota, cuando crees tu contraseña, desprecia el guión final (no lo uses)
usuario@pi5:~ $ echo -n "TuContraseñaSegura" | md5sum 1c1b95a7f1aa172dd1cddafd371d4d12 - usuario@pi5:~ $
d.2. Configuración final de las rutas
Al arrancar por primera vez, recuerda que lo hicimos con sudo systemctl start amuled.service se habrá generado el archivo de configuración base. Es aquí donde utilizaremos las dos contraseñas creadas, mas la activación de las conexiones externas.
Como el archivo de configuración no puede ser escrito mientras aMule se ejecuta debes pararlo ejecutando
sudo systemctl stop amuled.service
Ábrelo para modificar su contenido con:
sudo nano /home/amule/.aMule/amule.conf
+ Conexiones externas.
Modifica estas líneas:
AcceptExternalConnections=1
ECPassword=pega_uno_de los_hash_que_copiaste
En la sección [WebServer]:
[WebServer]
Enabled=1
Password=pega_el_otro_hash_que_creaste
Port=4711
+ Puertos
Los puertos predeterminados y NO recomendados de usar son TCP 4662 y UDP 4672. El programa genera un tercer puerto oculto llamado TCP + 3 (por defecto 4665). Para obtener ID Alta, debes abrir los tres en tu router.
Port=34662
UDPPort=34672
UDPEnable=1
Nota: Cambia los puertos, por ejemplo TCP 34662 y UDP 34672 que generan el puerto UDP 34665, lo cuales deberás abrir en tu router.
+ Directorios
Para aplicar la redirección hacia tu disco rápido de almacenamiento, busca y modifica las siguientes líneas apuntando a la estructura que creamos:
TempDir=/media/Disco_1TB/aMule/Temp
IncomingDir=/media/Disco_1TB/aMule/Incoming
Guarda con Ctrl+O, Enter, y sal con Ctrl+X.
+ Seguridad
El archivo IPFilterURL en aMule es una lista negra que bloquea direcciones IP maliciosas, fakes y rastreadores de Internet, mejorando tu seguridad y privacidad al descargar. Buscala y déjala como la siguiente.
IPFilterURL=http://upd.emule-security.org/ipfilter.zip
Una vez guardados los cambios reinicia el servicio para que empiece a descargar con total seguridad y el máximo rendimiento de hardware:
sudo systemctl restart amuled.service
¿Qué te parece esta versión? ¿Ya la has probado? ¡Te leo en los comentarios!
Soluciones a errores y trucos.
En esta sección expongo algunos errores y trucos que me han ayudado con aMule
* Desinstalación de aMule
Si no te convence como va tu aMule compilado, siempre lo podrás eliminar de la forma siguiente:
Dirigente a la carpeta «builld»
cd ~/amule/build
Una vez dentro, haz comprueba que existe un archivo llamado install_manifest.txt
ls -l ./install_manifest.txt && cat install_manifest.txt
Si ese archivo existe, puedes usarlo para desinstalar automáticamente:
sudo xargs rm -f < install_manifest.txt
Un vez ejecutado el comando anterior, la desinstalación será instantánea, así que para comprobar que todo a salido bien, busca posibles restos con:
find /usr/local -name "*amule*" -type f 2>/dev/null
Sabrás que aMule se eliminó correctamente ya que no deberá de salir nada a la orden del comando anterior.
* Forzar la ejecución manual en la terminal como usuario amule
Si por cualquier motivo quieres ver el output (la salida de texto) que escupe aMule en la terminal en su primer arranque para comprobar que no falta ninguna librería, no puedes usar el usuario raspberry.
Como el usuario amule tiene el login bloqueado (nologin), debes usar sudo con el flag -u (user) para suplantarlo solo durante la ejecución de ese comando:
sudo -u amule /usr/local/bin/amuled
Al hacerlo así, el sistema operativo ejecutará el programa en nombre de amule, creará los archivos en /home/amule/.aMule/ con los permisos correctos de propietario y verás los mensajes en tu pantalla. Una vez que veas que ha arrancado bien, lo cierras con Ctrl + C y procedes a editar el archivo.
* aMuleweb. Sin acceso desde el navegador.
Es posible que no necesites hacer esto, ya que en versiones anteriores a la 3.0, como en aMuleWeb 2.3.3 se cerraba en frecuentemente.
Dado que amuleweb en ocasiones, puede comportarse de forma inestable llegando a cerrarse, la solución más robusta para un sistema 24/7 es, un script «vigilante» (watchdog) que lo reactive automáticamente cuando muera.
Aquí tienes la forma más sencilla de hacerlo.
Paso 1: Crear el script vigilante
Ve a tu terminal, si estas en el equipo, si no, conéctate por SSH y crea el script:
sudo nano /usr/local/bin/amuleweb-watchdog.sh
Paso 2: Copiar el contenido (más simple y efectivo)
Este script es más simple: solo comprueba si el proceso amuleweb existe y, si no, lo arranca.
#!/bin/bash
# Script para vigilar y reiniciar amuleweb si se cierra
if pgrep -x "amuleweb" > /dev/null
then
:
else
logger "amuleweb-watchdog: amuleweb no encontrado, reiniciando..."
# Se ejecuta como el usuario dedicado 'amule' apuntando a su home real
sudo -u amule /usr/local/bin/amuleweb --amule-config-file=/home/amule/.aMule/amule.conf &
fi
Paso 3: Dar permisos y probar
sudo chmod +x /usr/local/bin/amuleweb-watchdog.sh
Paso 4: Programarlo cada minuto
Edita el crontab del usuario root para que vigile todo el tiempo:
sudo crontab -e
Añade esta línea al final del archivo:
* * * * * /usr/local/bin/amuleweb-watchdog.sh
Con esto, el sistema comprobará cada minuto si amuleweb está vivo y lo levantará automáticamente si se ha cerrado.
* Instala la rama master
Si quieres tener los últimos cambios y novedades, ve a por la rama Master y compila desde ahí.
Clonamos el repositorio oficial de aMule directamente desde GitHub para asegurarnos de compilar la última versión de la rama master:
git clone https://github.com/amule-org/amule.git
Una vez descargado el clon de github sigue los pasos que se describen en el apartado 2. Descarga el código fuente.