Compilar aMule desde GitHub (Rama Master) en Raspberry Pi

«Instalar aMule desde GitHub no solo sirve para tener nuevas funciones, si no, para asegurar que el programa sea totalmente compatible con el hardware y software moderno. Obtenemos un binario que aprovecha los 64 bits de la Raspberry Pi, ya que desde 2021, el código está «congelado».


Ramas de desarrollo.

A la hora de compilar debes saber que existen varias ramas de desarrollo. Para entenderlo fácil, imagina que el desarrollo de un programa en GitHub es como un árbol del cual parten distintas ramas, y de nosotros depende elegir la rama que se ajuste a nuestras necesidades.

De las ramas disponibles, la rama master (o a veces llamada main) es la que ocupa nuestra atención, es donde los desarrolladores van subiendo todos los parches modernos para hacerlo compatible con el compilador actual (gcc) y las nuevas librerías (wxWidgets 3.2).

Otras ramas son las Tags y los Branches de desarollo.

En esta tabla a modo de resumen, te muestro los tres tipos de «versiones» disponibles:

TipoQué es¿Cuándo elegirla?
Master (Branch)El tronco principal. Tiene lo último de lo último.Nuestra elección. Es la más compatible con sistemas modernos.
Tags (Etiquetas)Son «fotos» fijas del código en un momento concreto (ej. v2.3.3).Solo si usas un sistema operativo viejo que coincida con la fecha de esa versión.
Branches de desarrolloRamas paralelas donde se prueban cosas experimentales (ej. fix-webserver).Solo si eres desarrollador y quieres probar una función específica que aún no está terminada.

«Usamos la rama Master porque es la versión ‘viva’ del código. Mientras que las versiones descargables (estables) se quedan congeladas en el tiempo, la rama Master recibe actualizaciones constantes que permiten que aMule se compile sin errores en sistemas de vanguardia como Debian 13.»

1. Limpieza de Instalaciones Previas

Utiliza este punto, si ya tenías aMule instalado y por ende, un servicio systemd de control. Si no es así, pasa al punto 2.

Si ya usabas aMule o bien tenías algún servicio de systemd corriendo para su gestion, debemos eliminar todo rastro para evitar conflictos con versiones antiguas de los repositorios.

Comprueba si ya tienes un servicio activo con systemctl list-units --all | grep -i amule

systemctl list-units --all | grep -i amule
  amule.service                                                                                                                                                                        loaded    active   running   aMule Master Daemon

Esto arroja que tengo un servicio llamado amule.service y debo detenerlo con este comando:

sudo systemctl stop amule.service

Una vez detenido el servicio, desinstalamos todo lo relacionado con aMule

sudo apt purge amule amule-daemon amule-utils-gui amule-utils amule-common

Y por último eliminamos todos los restos que dependen de la mula.

sudo apt autoremove --purge

2. Instalación de Dependencias de Compilación

Necesitamos el conjunto de herramientas de desarrollo y las librerías necesarias para el GUI remoto y el demonio:

sudo apt update

Instala el compilador y demás librerías. Copia y pega todo ese bloque en la terminal y dale a Enter.


sudo apt install -y git build-essential autoconf automake libtool \
libwxgtk3.2-dev libcryptsetup-dev libcurl4-openssl-dev libgd-dev \
libgeoip-dev libupnp-dev libboost-dev binutils-dev zlib1g-dev \
libcrypto++-dev libreadline-dev gettext autopoint

3. Obtención y Preparación del Código (Master)

Clonamos directamente la rama de desarrollo para asegurar que los parches estén aplicados:

Nos situamos en el directorio principal con:

cd ~

Descargamos el directorio completo desde GitHub

git clone https://github.com/amule-project/amule.git

El código anterior nos genera un directorio llamado amule, en el cual nos debemos situar con el comando:

 cd amule

Elegimos la rama principal de desarrollo (main)

git checkout master

Con git checkout master, le decimos a nuestra Raspberry: «No me des lo que se publicó hace años, dame lo que los desarrolladores tienen en su mesa de trabajo hoy mismo».

Preparamos el código fuente antes de la compilacion para permitir al software compilarse específicamente en tu máquina

./autogen.sh

El siguiente comando no es necesario usarlo, sirve para «volver al estado de fábrica» cuando ya has intentado compilar antes y la carpeta se ha llenado de archivos basura (objetos .o, ejecutables a medio hacer, scripts generados por ./autogen.sh). Se debería usar antes de ./autogen.sh para así una vez ejecutado, se vuelvan a crear los nuevos archivos de compilación.

git clean -fxd       # Limpieza total del árbol de archivos

4. Configuración del Demonio y Utilidades

A continuación te presento dos tipos de configuraciones, ya sea para Raspberry Pi 4 o Raspberry Pi 5 y así obtener la configuración del demonio (amuled), la interfaz gráfica remota (amule-gui) y las herramientas de consola:

«El comando ./configure es el cerebro del proceso. Se encarga de comprobar que tu Raspberry Pi tiene todas las librerías instaladas y utiliza nuestras instrucciones personalizadas para crear un plan de construcción (Makefile) optimizado para nuestro SSD y procesador.»

Copia esto tal cual y lo pegas en tu terminal.

Para Raspberry Pi 4 (Cortex-A72)

CXXFLAGS="-O3 -march=armv8-a+crc+simd -mtune=cortex-a72" ./configure \
    --enable-amule-daemon \
    --enable-amule-gui \
    --enable-amulecmd \
    --enable-webserver \
    --enable-cas \
    --enable-alcc \
    --disable-monolithic \
    --with-denoise-level=0 \
    --enable-optimize \
    --enable-mmap \
    --disable-debug

Para Raspberry Pi 5 (Cortex-A76)

CXXFLAGS="-O3 -march=armv8.2-a+crypto -mtune=cortex-a76" ./configure \
    --enable-amule-daemon \
    --enable-amule-gui \
    --enable-amulecmd \
    --enable-webserver \
    --enable-cas \
    --enable-alcc \
    --disable-monolithic \
    --with-denoise-level=0 \
    --enable-optimize \
    --enable-mmap \
    --disable-debug

Se ha incluido --enable-optimize para que la Raspberry Pi exprima su procesador y --disable-monolithic para separar el demonio de la interfaz.

5. Compilación Potente e Instalación

Aprovechamos los 4 núcleos de la Pi 4. Al estar en SSD, este proceso es significativamente más rápido:

make -j$(nproc)

make -j$(nproc) (La Construcción)

Este es el comando que hace el trabajo pesado.

  • ¿Qué hace?: Lee un archivo llamado Makefile (que se generó al ejecutar el ./configure) y empieza a llamar al compilador para transformar cada archivo de código .cpp en archivos binarios de lenguaje máquina.
  • El parámetro --j$(nproc): Es vital en la Raspberry Pi 4. Le dice al sistema: «Usamos $(nproc) para que el sistema detecte automáticamente los 4 núcleos de la Pi 4 o Pi 5 «. Sin el -j$(nproc), solo usaría uno y la compilación de aMule tardaría 4 veces más.
  • Resultado: Al terminar, tendrás el programa «construido» dentro de la carpeta donde estás, pero aún no está instalado en el sistema.
sudo make install

sudo make install (La Mudanza)

Una vez que el programa está construido, hay que poner cada pieza en su sitio definitivo.

  • ¿Qué hace?: Copia los ejecutables (como amuled, amulegui) y los archivos de ayuda/traducciones a las carpetas protegidas del sistema operativo.
  • ¿A dónde van?: En tu caso, los mueve a /usr/local/bin/.
  • ¿Por qué sudo?: Porque para escribir archivos en las carpetas del sistema (/usr/local/) necesitas permisos de administrador (SuperUser DO).
sudo ldconfig

sudo ldconfig (El Registro)

Este es el paso que mucha gente olvida y que causa errores de «librería no encontrada».

  • ¿Qué hace?: Actualiza los enlaces y la caché de las librerías compartidas.
  • ¿Por qué es necesario?: aMule utiliza muchas piezas externas (como wxWidgets o Crypto++). Al instalar versiones nuevas, el sistema necesita «indexarlas» en una base de datos interna (/etc/ld.so.cache).
  • En resumen: Le dice al sistema operativo: «¡Oye! Acabamos de instalar programas y librerías nuevas en /usr/local/lib. Asegúrate de que todos los procesos sepan dónde encontrarlas ahora mismo».

6. Configuración de Acceso y Directorios

A. Primer arranque

Para que todo funcione, tienes que «despertar» al demonio.

En una terminal escribe:

amuled

Esto creará la carpeta ~/.aMule.

Es muy posible que en la primera vez que el programa se ejecute, este se cierre automáticamente, ¡Tranquilo! es totalmente normal. La primera vez que ejecutas aMule, crea la carpeta de configuración, pero se cierra inmediatamente porque un demonio sin «mando a distancia» no sirve para nada.

El error te está diciendo literalmente: «Si no puedo conectarme con el exterior, no tengo forma de que me des órdenes».

B. Generar una contraseña segura

Las contraseñas del archivo amule.conf son encriptadas y no se pueden escribir directamente. Por ejemplo para usar la contraseña <BurritoSabanero> habrá que encriptarla para que sea válida y se pueda usar.

Primero, genera el código (hash) de tu contraseña. Cambia tu_contraseña_aquí por la que quieras:

echo -n "tu_contraseña_aquí" | md5sum

Por ejemplo:

echo -n "BurritoSabanero" | md5sum

No olvides entrecomillar la palabra elegida como contraseña.

Esto nos dará como resultado la contraseña encriptada siguiente:

0d545153bf7b94d6094a01f5f925163b  -

C. Editar el archivo de configuración

Ahora vamos a decirle a aMule que acepte conexiones y a ponerle esa contraseña. Abre el editor:

nano ~/.aMule/amule.conf

Busca las líneas que dicen, ECPassword y AcceptExternalConnections y déjalas así:

  • AcceptExternalConnections=1 (Cambia el 0 por el 1)
  • ECPassword=la_contraseña_que_generaste (Pega aquí el hash MD5)

D. Activar la Interfaz Web.

Como has instalado amule-utils, también tienes amuleweb. Si lo activas, podrás gestionar las descargas escribiendo la IP de tu Raspberry en el navegador de tu móvil o tablet (ej: http://192.168.1.50:24711).

Busca también la sección [WebServer] y cambia lo siguiente.

  • Enabled=1
  • Password=la_contraseña_que_generaste (Puedes usar la misma o generar otra distinta)

E. Prueba de fuego

Guarda los cambios con Ctrl+O, pulsa Enter y sal con Ctrl+X.

Ahora vuelve a lanzar el demonio:

amuled -f

Si todo ha ido bien, esta vez no se cerrará. Se quedará funcionando.

Tip de experto: Como amuled se queda bloqueando la terminal, lo ideal es lanzarlo en segundo plano para que libere la terminal y asi puedas seguir usandola. Esto se logran usando el modificador -f al final del comando.

F.Configuración aMule

Para modificar la configuración de amuled, asegurate que el demonio no se está ejecutando.

killall amuled

Con el demonio fuera de juego, podemos editar nuestras preferencias en el archivo de configuración de amule.

nano /home/usuario/.aMule/amule.conf

La siguiente configuración es una copia de mi archivo amule.conf. Si quieres puedes usarlo copiarlo y adaptarlo a tus necesidades. Yo he modificado las líneas que están resaltadas en verde con respecto al archivo original.

[eMule]
AppVersion=2.3.3
Nick=Usuario_de_aMule
QueueSizePref=50
MaxUpload=5000
MaxDownload=19375
SlotAllocation=20
Port=24662
UDPPort=24672
UDPEnable=1
Address=
Autoconnect=1
MaxSourcesPerFile=300
MaxConnections=300
MaxConnectionsPerFiveSeconds=20
RemoveDeadServer=1
DeadServerRetry=3
ServerKeepAliveTimeout=0
Reconnect=1
Scoresystem=1
Serverlist=1
AddServerListFromServer=0
AddServerListFromClient=0
SafeServerConnect=0
AutoConnectStaticOnly=0
UPnPEnabled=0
UPnPTCPPort=50000
SmartIdCheck=1
ConnectToKad=1
ConnectToED2K=1
TempDir=/home/tu_usuario/.aMule/Temp
IncomingDir=/home/tu_usuario/.aMule/Incoming
ICH=1
AICHTrust=0
CheckDiskspace=1
MinFreeDiskSpace=1
AddNewFilesPaused=0
PreviewPrio=0
ManualHighPrio=0
StartNextFile=0
StartNextFileSameCat=0
StartNextFileAlpha=0
FileBufferSizePref=100
DAPPref=1
UAPPref=1
AllocateFullFile=0
OSDirectory=/home/tu_usuario/.aMule/
OnlineSignature=0
OnlineSignatureUpdate=5
EnableTrayIcon=0
MinToTray=0
Notifications=0
ConfirmExit=1
StartupMinimized=0
3DDepth=10
ToolTipDelay=1
ShowOverhead=0
ShowInfoOnCatTabs=1
VerticalToolbar=0
GeoIPEnabled=0
ShowVersionOnTitle=0
VideoPlayer=
StatGraphsInterval=3
statsInterval=30
DownloadCapacity=300
UploadCapacity=100
StatsAverageMinutes=5
VariousStatisticsMaxValue=100
SeeShare=2
FilterLanIPs=1
ParanoidFiltering=1
IPFilterAutoLoad=1
IPFilterURL=http://upd.emule-security.org/ipfilter.zip
FilterLevel=127
IPFilterSystem=0
FilterMessages=1
FilterAllMessages=0
MessagesFromFriendsOnly=0
MessageFromValidSourcesOnly=1
FilterWordMessages=0
MessageFilter=
ShowMessagesInLog=1
FilterComments=0
CommentFilter=
ShareHiddenFiles=1
AutoSortDownloads=0
NewVersionCheck=0
AdvancedSpamFilter=1
MessageUseCaptchas=1
Language=
SplitterbarPosition=75
YourHostname=
DateTimeFormat=%A, %x, %X
AllcatType=0
ShowAllNotCats=0
SmartIdState=1
DropSlowSources=0
KadNodesUrl=http://upd.emule-security.org/nodes.dat
Ed2kServersUrl=http://emule-security.org/serverlist/server.met
ShowRatesOnTitle=0
GeoLiteCountryUpdateUrl=http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
StatsServerName=Shorty's ED2K stats
StatsServerURL=http://ed2k.shortypower.dyndns.org/?hash=
CreateSparseFiles=1
[Browser]
OpenPageInTab=1
CustomBrowserString=
[Proxy]
ProxyEnableProxy=0
ProxyType=0
ProxyName=
ProxyPort=1080
ProxyEnablePassword=0
ProxyUser=
ProxyPassword=
[ExternalConnect]
UseSrcSeeds=0
AcceptExternalConnections=1
ECAddress=
ECPort=4712
ECPassword=0d545153bf7b94d6094a01f5f925163b
UPnPECEnabled=0
ShowProgressBar=1
ShowPercent=1
UseSecIdent=1
IpFilterClients=1
IpFilterServers=1
TransmitOnlyUploadingClients=0
[WebServer]
Enabled=1
Password=0d545153bf7b94d6094a01f5f925163b
PasswordLow=
Port=24711
WebUPnPTCPPort=50001
UPnPWebServerEnabled=0
UseGzip=1
UseLowRightsUser=0
PageRefreshTime=120
Template=default
Path=amuleweb
[GUI]
HideOnClose=0
[Razor_Preferences]
FastED2KLinksHandler=1
[SkinGUIOptions]
Skin=
[Statistics]
MaxClientVersions=0
[Obfuscation]
IsClientCryptLayerSupported=1
IsCryptLayerRequested=1
IsClientCryptLayerRequired=0
CryptoPaddingLenght=254
CryptoKadUDPKey=1686729473
[PowerManagement]
PreventSleepWhileDownloading=0
[UserEvents]
[UserEvents/DownloadCompleted]
CoreEnabled=0
CoreCommand=
GUIEnabled=0
GUICommand=
[UserEvents/NewChatSession]
CoreEnabled=0
CoreCommand=
GUIEnabled=0
GUICommand=
[UserEvents/OutOfDiskSpace]
CoreEnabled=0
CoreCommand=
GUIEnabled=0
GUICommand=
[UserEvents/ErrorOnCompletion]
CoreEnabled=0
CoreCommand=
GUIEnabled=0
GUICommand=
[HTTPDownload]
URL_1=http://upd.emule-security.org/ipfilter.zip
URL_2=http://emule-security.org/serverlist/server.met
URL_5=http://upd.emule-security.org/nodes.dat
URL_3=http://emule-security.org/serverlist/server.met

Descripción de los puntos más importantes de la configuración de aMule.

Parámetros Críticos de Configuración (amule.conf)

  • Nick: Es tu nombre de usuario en la red. Aunque no afecta a la velocidad, sirve para identificarte en las colas de otros usuarios.
  • MaxDownload=19375: Define el límite máximo de descarga (en este caso, unos 150 Mbps). Permite que aMule use el ancho de banda necesario sin saturar la CPU de la Raspberry.
  • MaxUpload=5000: Define la velocidad de subida. Es vital ser generoso (5 MB/s); en la red eD2k, cuanto más subes, más créditos ganas y más rápido descargas de los demás.
  • Slot Allocation=20 : determina cuánta velocidad de subida le das a cada persona que se descarga algo de ti. Con 5000 de subida total, estás abriendo 250 slots simultáneos. Vas a ganar créditos con 250 personas a la vez, lo que te garantiza descargar a máxima velocidad en tiempo récord.
  • Port=24662 (TCP): Es el puerto que usa el programa para recibir datos. Debe estar abierto en tu router hacia la IP de la Raspberry para evitar la «ID Baja».
  • UDPPort=24672 (UDP): Puerto para la red Kad y búsquedas. También debe estar abierto en el router para que la red funcione al 100%.
  • MaxSourcesPerFile=300: El número máximo de fuentes que el programa buscará por cada archivo. Un valor de 300 es el punto de equilibrio ideal para la Raspberry Pi 4.
  • MaxConnections=300: Límite de conexiones totales simultáneas. Mantenerlo en 300 evita que la Raspberry se bloquee por exceso de hilos de red abiertos. Si se sube mucho (ej. 500 o más), la Pi suele dar errores de red (epoll).
  • MaxConnectionsPerFiveSeconds=20: Controla cuántas conexiones nuevas se intentan cada 5 segundos. Un valor bajo (20) evita que el router colapse al arrancar el programa.

Mantenimiento y Rendimiento del Sistema

  • FileBufferSizePref=100: Define el tamaño del búfer en RAM antes de escribir en el disco. Un valor alto (100% o más) reduce el número de escrituras constantes, protegiendo la salud de la tarjeta MicroSD.
  • AllocateFullFile=0: Si está en 1, reserva todo el espacio del archivo al empezar. En la Raspberry es mejor dejarlo en 0 para que no se congele el sistema al intentar crear archivos muy grandes de golpe.
  • SmartIdState=1: Ayuda a recuperar la ID Alta (flechas verdes) si sufres un micro-corte de internet, siempre que los puertos del router estén bien configurados.
  • Serverlist=1: Indica al programa que actualice la lista de servidores conocidos cada vez que se inicia.

Rutas y Seguridad

  • IncomingDir y TempDir: Son las carpetas donde se guardan las descargas finalizadas y los archivos temporales. En una Raspberry, si puedes usar un SSD o disco externo, cambia estas rutas para evitar desgastar la tarjeta SD.
  • IPFilterURL: La dirección para descargar el filtro de IPs (ej: http://upd.emule-security.org/ipfilter.zip). Es fundamental para bloquear servidores falsos y clientes espía automáticamente.
  • Ed2kServersUrl: Dirección para descargar una lista de servidores fiables (ej: http://upd.emule-security.org/server.met). Garantiza que siempre conectes a servidores reales y seguros.


7. El paso final: ¿Quieres que aMule arranque solo?

Para que tu Raspberry Pi sea un servidor de descargas profesional, lo ideal es crear un servicio en systemd. Esto hará que amuled se inicie automáticamente cada vez que enciendas la Pi sin necesidad de abrir una terminal.

[Unit]
Description=aMule Master Daemon
After=network.target

[Service]
User=tu_usuario
Group=tu_usuario
# Usamos 'simple' porque amuled en rama master gestiona muy bien la salida a consola
Type=simple 
ExecStart=/usr/local/bin/amuled
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

¿Cómo aplicamos este cambio de forma profesional?

Como ya tienes un servicio corriendo (el que me has mostrado), sigue estos pasos para que el sistema reconozca la nueva configuración sin errores:

  1. Edita el archivo:
    sudo nano /etc/systemd/system/amule.service (o el nombre que tenga).
  2. Recarga la configuración:
    sudo systemctl daemon-reload
    (Esto es vital cada vez que editas un archivo .service).
  3. Reinicia el servicio:
    sudo systemctl restart amule.service
  4. Comprueba que vive:
    systemctl status amule.service

«Al compilar nosotros mismos, el sistema no sabe cómo arrancar el programa automáticamente. Creamos este archivo en /etc/systemd/system/ para que la Raspberry Pi sepa que el ‘cerebro’ de las descargas debe estar siempre vivo, incluso si hay un corte de luz y el SSD se reinicia.»

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio