amuled, aMuleGUI, amulecmd e Raspberry Pi

aMule
aMule

Emule continua indisturbato, ormai da oltre un decennio, ad essere un punto di riferimento per il P2P. Emule e i suoi cloni sono disponibili per una vasta gamma di architetture: si va da Windows fino a Linux, passando per MacOSX e Solaris. Nello specifico, quando si parla di Emule ci si riferisce solitamente all’applicazione per Windows (che è l’ambiente dove il programma è nato), mentre per quasi tutte le altre piattaforme, in particolare per Linux, il programma di riferimento si chiama aMule.

aMule deriva direttamente da Emule e ne condivide la maggior parte delle caratteristiche. Quello che rende aMule molto interessante è il fatto che ne esiste una versione sotto forma di demone chiamato amuled che può essere eseguito anche su installazioni prive di GUI e su dispositivi poco potenti come ad esempio la nostra Raspberry Pi.

Qui di seguito la mia solita raccolta di appunti personali riordinati in modo da dargli una forma passabile per la pubblicazione. Spero che siano di interesse per qualcuno.

Prerequisiti

I prerequisiti sono gli stessi esposti nella guida per il Gateway VPN, tranne ovviamente per la parte che riguarda il provider VPN. Vi invito quindi a leggere il paragrafo relativo.

Parte 1 – Installare il Sistema Operativo

Vale quanto detto sopra. La procedura per l’installazione del sistema operativo (Raspbian, Minibian o qualsiasi altra distribuzione disponibile per Raspberry Pi e che preveda la possibilità si installare amuled da repository o tramite compilazione dei sorgenti) è la medesima già esposta nella precedente guida per il Gateway VPN, quindi saltiamo anche questo punto.

N.B. poiché andremo ad implementare essenzialmente una soluzione headless, consiglio di provare l’ottima Minibian, compatibile con Raspbian ed i suoi repository.

Parte 2 – Installare e configurare Amule Daemon

In Debian e nelle sue derivate amuled si trova nel pacchetto amule-daemon, utilizziamo quindi apt-get per installarlo:

sudo apt-get install amule-daemon

E’ da notare che con l’installazione di amuled ci “tireremo” dietro anche altri programmi (tra tutti amulecmd e amuleweb) che vedremo più tardi.

Al termine dell’installazione dovremmo aver ricevuto un warning simile al seguente:

Not starting aMule daemon, AMULED_USER not set in /etc/default/amule-daemon. ... (warning).

Il warning ci informa che amuled non è stato avviato in quanto non è stato impostato alcun utente nel file /etc/default/amule-daemon. Per ragioni di sicurezza amuled non viene eseguito con i privilegi di amministratore del sistema, ma con quelli di un utente specifico che deve essere creato ad-hoc ed indicato nel file suddetto. Andiamo quindi a creare l’utente che chiameremo “amuleusr” (ovviamente potete indicare il nome che preferite):

sudo adduser amuleusr

N.B.: per maggiore sicurezza, alla fine della configurazione di amuled disabiliteremo il login per questo utente.

Ora andiamo a modificare il file /etc/default/amule-daemon:

sudo nano /etc/default/amule-daemon

Identifichiamo la seguente riga:

AMULED_USER=""

Immettiamo tra le virgolette il nome dell’utente appena creato:

AMULED_USER="amuleusr"

Salviamo ed usciamo dall’editor.

Il passo successivo sarà quello di creare il file di configurazione di amuled. Per farlo dobbiamo utilizzare l’utente creato in precedenza, quindi utilizziamo il comando su in questo modo:

su amuleusr

Immettiamo la password dell’utente quando richiesto ed andiamo poi ad impartire il comando per la creazione automatica del file di configurazione di amuled (N.B. stiamo eseguendo il programma con i privilegi dell’utente amuleusr, quindi non dobbiamo utilizzare sudo):

amuled -f

Nell’home dell’utente amuleusr verrà creata la directory nascosta .aMule con al suo interno tutti i file necessari alla corretta esecuzione di amuled. Spostiamoci quindi nella directory ~/.aMule:

cd ~/.aMule

Controlliamo i file contenuti nella directory (ho riportato solamente i file e le directory interessanti ai fini di questa guida):

ls -la
...
-rw-r--r-- 1 amuleusr amuleusr     5587 apr 15 15:25 amule.conf
drwxr-xr-x 2 amuleusr amuleusr     4096 mar 31 13:38 Incoming
drwxr-xr-x 2 amuleusr amuleusr     4096 mar 31 13:38 Temp
...

Come è possibile notare i file sono stati creati con i privilegi dell’utente amuleusr. Il file amule.conf contiene tutti i parametri di configurazione del demone. Incoming e Temp sono due directory di servizio che vengono utilizzate da amuled rispettivamente per i file scaricati completati e per i file correntemente in download (torneremo dopo su queste due dir).

Continuiamo con la configurazione del demone, ma prima accertiamoci che lo stesso non sia in esecuzione:

sudo /etc/init.d/amule-daemon stop

Apriamo quindi il file con l’editor:

nano amule.conf
Dettaglio di amule.conf - amuled
Dettaglio di amule.conf

Possiamo notare immediatamente come amule.conf sia suddiviso in sezioni. Ogni sezione è indicata tra parentesi quadrate. Avremo così le sezioni [eMule], [ExternalConnect], [WebServer] e così via. Quelle appena indicate sono fondamentalmente le sezioni che ci interessano. Andiamo quindi a modificare le opzioni essenziali al funzionamento di amuled. Cercate la voce corrispondente nel vostro amule.conf ed accertatevi di essere nella sezione corretta (ogni riga è preceduta da un commento di spiegazione):

# Sezione principale
[eMule]

# il nick con cui verrete "presentati" agli altri utilizzatori di emule
# per ragioni di privacy è bene impostarlo su qualcosa di non direttamente
# riconducibile a voi o alle altre vostre identità online.
Nick=Nomeutente

# Velocità MAX di upload espressa in kB/s (0 = no limiti)
MaxUpload=60

# Velocità MAX di download espressa in kB/s (0 = no limiti)
MaxDownload=0

# la porta TCP utilizzata da amule/amuled
Port=4662

# La porta UDP utilizzata da amuled e la sua eventuale abilitazione
UDPPort=4672
UDPEnable=1

# le due voci sotto indicano rispettivamente se si vuole ricevere
# la lista dei server a cui collegarsi dai server stessi
# e/o dai client a cui ci si collega. Per ragioni di sicurezza si
# raccomanda di lasciare disabilitate queste due opzioni ed inserire i server manualmente
# tramite uno dei metodi disponibili (vedere guida)
AddServerListFromServer=0
AddServerListFromClient=0

# Indica se si vuole utilizzare UPnP ed eventualmente su quale porta. Da abilitare solo se
# il proprio router supporta UPnP. Sconsigliato.
UPnPEnabled=0
UPnPTCPPort=50000

#La directory di download dove amule/amuled memorizzerà i file in scaricamento
TempDir=/home/amuleusr/Temp

#La directory dove amule/amuled sposterà i file scaricati al termine del download
IncomingDir=/home/amuleusr/Incoming

# La direcotry dove sono contenuti i file di configurazione e di sistema di amule/amuled
OSDirectory=/home/amuleusr/.aMule/

# Questa opzione indica se amule/amuled potrà accettare o meno connessioni esterne.
# per amuled deve essere necessariamente impostata su 1, così da permettere alle varie
# interfacce grafiche o programmi di gestione di connettersi al servizio.
AcceptExternalConnections=1

# Sezione External Connections
[ExternalConnect]

# La porta utilizzata per connetteris al demone. Se non si hanno esigenze particolari
# lasciare invariato questo valore
ECPort=4712

# La password utilizzata per connettersi al demone in formato hash MD5 (vedi guida)
ECPassword=319f4d26e3c536b5dd871bb2c52e3178

# Sezione webserver
[WebServer]

# impostiamo a 0 questa opzione in quanto non vogliamo avviare
# il webserver amuleweb all'avvio del demone
Enabled=0

Analizziamo in dettaglio alcune delle voci sopra riportate

Le porte
Potrete ignorare bellamente tutte le opzioni che riguardano le porte da utilizzare, soprattutto se non avete esigenze particolari. In ogni caso ricordatevi di impostare adeguatamente NAT e l’eventuale firewall del vostro router (a tale proposito consultare questa guida).
Le PATH di download
Visto che stiamo utilizzando una RPi attenzione ad impostare correttamente i percorsi (Path) per il download dei file. Lasciando i percorsi di default rischierete di saturare velocemente la scheda di memoria SD/microSD, sede anche del sistema operativo della RPi. Per entrambi i percorsi di download vi consiglio fin da subito di impostare un qualsiasi device fisico (esempio un HD collegato via USB) oppure una risorsa di rete (samba, NSF, ecc) accessibile all’utente con cui gira emule (amuleusr nel nostro caso).
La password di accesso
ECPassword=319f4d26e3c536b5dd871bb2c52e3178

La password indicata non è altro che l’hash MD5 della password in chiaro. Per calcolare tale valore sotto Linux è sufficiente eseguire il seguente comando:

echo -n "PASSWORD" | md5sum

Dovrete ovviamente inserire la vostra password reale (case sensitive) al posto di PASSWORD, lasciando inalterate le “virgolette“. Il risultato che otterrete sarà una stringa alfanumerica che dovrete poi copiare nel file di configurazione amule.conf alla voce ECPassword. Per connettervi al demone da qualsiasi altro servizio dovrete poi utilizzare la password in chiaro e non l’hash Md5!

La sezione WebServer
Come ho già anticipato, amuled vine fornito con un webserver chiamato aMuleWEB che ne permette la gestione da remoto tramite un semplice browser. aMuleWEB, almeno nella forma in cui viene distribuito di default, è molto limitato e permette di effettuare veramente pochissime operazioni. Conviene quindi disabilitare la sua esecuzione all’avvio di amuled, impostando l’opzione Enabled=0 nella sezione [WebServer] del file di configurazione, così da liberare risorse sulla nostra Raspberry Pi. Per controllare amuled utilizzeremo l’ottimo aMuleGUI oppure aMuleCMD.

IL PRIMO AVVIO

Avviamo finalmente il demone amuled (siamo ancora collegati con utente amuleusr):

amuled -f

A questo punto amuled dovrebbe avviarsi e continuare a girare in backgound.

Prima di proseguire rendiamo leggermente più sicura la nostra installazione disabilitando il login per l’utente amuleusr:

sudo usermod -s /usr/sbin/nologin amuleusr

Passiamo ora ad analizzare due valide opzioni per il per controllare amuled.

aMuleGUI

aMuleGUI è un client grafico che tramite un’interfaccia simile a quella di aMule ed Emule permette di pilotare amuled da una qualsiasi postazioni.

Su Debian e derivate aMuleGUI è presente nel pacchetto amule-utils-gui, quindi installiamolo alla solita maniera sul computer da cui vogliamo controllare amuled:

sudo apt-get install amule-utils-gui

Eseguiamolo poi dal menu della nostra distribuzione (Menu Internet->aMuleGUI) o direttamente da shell (amulegui). Ci verrà proposta una finestra dove dovremo inserire l’indirizzo IP della macchina dove gira amuled, la porta di connessione e la password in chiaro indicata nel file amule.conf come hash MD5 alla voce ECPassword.

aMuleGUI schermata di connessione ad amuled
aMuleGUI schermata di connessione

A connessione avvenuta, questa sarà l’interfaccia che verrà mostrata:

aMuleGUI - amuled
L’interfccia di aMuleGUI (alcune informazioni sono state offuscate)

Tramite le opzioni presenti in aMuleGUI sarà possibile modificare molte delle opzioni di configurazione di amuled, come pure aggiungere o cancellare download, ma ricordatevi che non sarà possibile terminare l’esecuzione del demone.

aMuleCMD

Amulecmd è un programma basato su console per controllare, da remoto o localmente, amule ed amuled. Quando inizialmente abbiamo installato amuled, abbiamo installato automaticamente anche amulecmd.

Amulecmd permette di utilizzare un sottoinsieme delle funzioni di amule o amuled, quali ad esempio la ricerca, oppure aggiungere o eliminare un file dal download e così via.

Per funzionare, il file di configurazione amule.conf deve avere almeno queste opzioni correttamente impostate nella sezione ExternalConnect:

[ExternalConnect]
AcceptExternalConnections=1
ECPort=4712
ECPassword=inserire_hash_MD5_della_password

E’ possibile eseguire la console di amulecmd direttamente nella macchina dove gira amuled (la password è sempre la solita password che abbiamo inserito in amule.conf come hash MD5)

$ amulecmd
This is amulecmd 2.3.1
Enter password for mule connection:

Creating client...
Succeeded! Connection established to aMule 2.3.1

---------------------------------------
| aMule text client |
---------------------------------------

Use 'Help' for command list

aMulecmd$

A questo punto se inseriamo il comando help seguito da “invio” avremo un breve elenco dei comandi disponibili che possiamo eseguire direttamente dalla console:

aMulecmd$ help

Available commands:
Add Add an eD2k or magnet link to core.
Cancel Cancel download.
Connect Connect to the network.
Disconnect Disconnect from the network.
Download Start downloading a file
Exit Exits from the application.
Get Get and display a preference value.
Help Show help.
Pause Pause download.
Priority Set download priority.
Progress Show the progress of a search.
Quit Exits from the application.
Reload Reload the given object.
Reset Reset log.
Results Show the results of the last search.
Resume Resume download.
Search Execute a search.
Set Set a preference value.
Show Show queues/lists.
Shutdown Shut down aMule.
Statistics Show full statistics tree.
Status Show short status information.

All commands are case insensitive.
Type 'help command' to get detailed info on command.

Per uscire dalla console utilizzare il comando exit oppure quit.

Quello che rende molto interessante amulecmd è però la possibilità di poter passare i comandi ad amuled direttamente da shell, utilizzando l’opzione -c [comando], esempio:

amulecmd -P PASSWORD -c "status"

Questo comando ci restituirà lo stato corrente di amuled.

Altro esempio:

amulecmd -P PASSWORD -c "set bwlimit up 80"

Così avremo impostato la velocità di upload a 80kB/s.

Ancora:

amulecmd -P PASSWORD -c "shutdown"

Con questo comando termineremo in maniera pulita amuled.

Vediamo un’applicazione leggermente più complicata di amulecmd, come ad esempio variare la velocità di upload in base agli orari della giornata. Poiché utilizzeremo crontab per eseguire i comandi, creeremo i cronjob necessari direttamente nella macchina dove gira amuled.

Aggiungiamo i cronjob richiamando l’editor tramite:

#crontab -e

ed aggiungendo alla fine del file le seguenti righe:

0 8 * * * amulecmd -P PASSWORD -c "set bwlimit up 25"
0 23 * * * amulecmd -P PASSWORD -c "set bwlimit up 90"

Usciamo dall’editor salvando le nostre modifiche.

Da ora in poi amuled varierà le velocità di upload ogni giorno a 25kB/s alle 08.00 della mattina e a 90kB/sec alle 23.00 della sera (per maggiori info su crontab consiglio questa ottima guida: Schedule Tasks on Linux Using Crontab).

Fino a qui abbiamo eseguiti amulecmd nella macchina dove gira anche amuled, ma amulecmd ci permette di poter eseguire un comando anche da remoto, basta installare il programma nella macchina locale ed utilizzare la seguente sintassi:

amulecmd -h [IP_amuled] -p [porta_amuled] -P [password] -c "comando"

Esempio:

amulecmd -h 192.168.0.135 -p 4712 -P miapassword -c "set bwlimit up 80"

Questo comando fa esattamente la stessa identica cosa di quello visto poco sopra, ovvero imposta i limiti di upload a 80kB/secondo, ma il comando viene eseguito da una macchina locale (es. un PC) verso la macchina remota dove è in esecuzione amuled (nel nostro caso la scheda RPi).

E’ possibile ovviamente utilizzare amuledcmd in molti altri modi, esempio possiamo creare una sorta di mini interfaccia testuale come spiegato in questo articolo.

Bene, con questo è tutto.

Buon divertimento con amuled e la vostra Raspberry Pi.

Fonti consultate

Informazioni su Roberto 349 Articoli
Roberto "rbnet" Bolli, (ri)fondatore di rbnet.it con la passione per la tecnologia, Linux ed i meme Internet. La notte giocatore incallito di The Last of US su Playstation 4, di giorno "lavoricchiatore" in Francia, nazione dove cerca di sopravvivere non conoscendone la lingua.

22 Commenti

  1. Ciao, senti io ho installato amule completo (apt-get install amule) su un BananaPI Pro con Raspbian.
    Volevo seguire la tua guida quando dici come configurare crontab per limitare la banda di upload, ma non ci riesco anche perchè il mio caso è diverso (nn avendo installato amuled)

    Ho provato il comando “amulecmd -P PASSWORD -c “set bwlimit up 2” e come password ho messo una a caso, siccome non mi ha mai chiesto di inserito nessuna pass nell’installazione di amule completo.
    Il comando mi rimanda: “Connection failed. Unable to connect to localost 4712”

    Che dici, è impossibile usare amulecmd senza installare amuled?
    Come posso risolvere o cmq usare cronotab senza dover installare tutto da capo?
    Grazie

    • Ciao Nessuno,
      è da molto che non utilizzo amule “normale”, ma il tutto (aka amulemcmd) dovrebbe funzionare allo stesso modo. Se non lo hai ancora fatto devi impostare amule per ricevere connessioni dall’esterno. Non ricordo esattamente la procedura, ma dovresti avere un menu Preferences/Preferenze -> Remote Control/Controllo Remoto e poi qualcosa tipo Accept Ext Connections/Consenti connessioni remote. Ti dovrebbe chiedere di inserire porta (lascia quella di default) e password, che poi saranno i dati che utilizzerai per connetterti via amulecmd Scrivi se hai bisogno di aiuto, vedrò di essere più preciso.
      Fammi sapere.

  2. Ciao,
    ti disturbo perché sto cercando di seguire la tua guida per installare amule su un raspberry pi 3 con OSMC e mi trovo davanti un ostacolo.
    Quando cerco di installare il demonecon

    sudo apt-get install amule-daemon amule-utils amule-utils-gui

    mi risponde che non trova i pacchetti

    E: Unable to locate package amule-daemon
    E: Unable to locate package amule-utils
    E: Unable to locate package amule-utils-gui

    E’ colpa della distro? Si può ovviare in qualchemodo?
    Grazie in anticipo!
    M.

    • Non conosco molto bene OSMC, ma probabilment i pacchetti non sono presenti nei suoi repository standard. Puoi provare ad aggiungere queste righe in /etc/apt/sources.list


      deb http://archive.raspbian.org/raspbian jessie main contrib non-free
      deb-src http://archive.raspbian.org/raspbian jessie main contrib non-free

      Poi dai un “sudo apt-get update” e prova a reinstallare i pacchetti di amule.

      Fammi sapere.

    • Se lasci i percorsi di default amuled dovrebbe riuscire a scrivere nelle cartelle.
      Se le monti da un’altra parte devi gestire i permessi di conseguenza, come menzionato nella guida:

      Le PATH di download
      Visto che stiamo utilizzando una RPi attenzione ad impostare correttamente i percorsi (Path) per il download dei file. Lasciando i percorsi di default rischierete di saturare velocemente la scheda di memoria SD/microSD, sede anche del sistema operativo della RPi. Per entrambi i percorsi di download vi consiglio fin da subito di impostare un qualsiasi device fisico (esempio un HD collegato via USB) oppure una risorsa di rete (samba, NSF, ecc) accessibile all’utente con cui gira emule (amuleusr nel nostro caso).

      • grazie, io infatti ho aggiunto un hd esterno, fino a qui tutto bene, adesso non ho ben chiaro due cose:
        se i permessi devo darli a amuleusr e basta nonostante utilizzo l’utente pi sul raspberry (l’installazione di amule l’ho fatta creando l’utente come da guida)
        e cosa più importante i comandi per dare questi permessi.
        scusami ma ancora mi è ostica la gestione permessi su unix….

        • No probs Luca.
          L’utente con cui gira amuled è “amuleusr”, quindi devi fare in modo che questo utente abbia i permessi di lettura/scrittura nelle directory in questione. Se l’HD di destinazione è montato correttamente, la via più facile è dare i permessi a tutti gli utenti con chmod in questo modo:

          chmod 777 -R /path/to/dir

          /path/to/dir è il percorso alla directory contente Incoming e Temp.

          Un modo leggermente più sicuro è invece quello di impostare “amuleusr” come proprietario delle directory di download:

          sudo chown -R amuleusr:amuleusr /path/to/dir

          ed in seguito settare i permessi per le dir in maniera più restrittiva con:

          chmod 770 -R /path/to/dir

          (occhio al 770)

          Per non complicarti la vita, ti consiglio la prima soluzione.

          • Grazie Roberto sono riuscito nel configurare le cartelle, grazie ancora,
            non sò se ti sei mai imbattuto in un problema simile, ma collegandomi con vnc e avviando la GUI in localhost dopo un pò mi butta fuori dicendomi che la connessione si è chiusa e non riesco più a far ripartire se non riavviando il raspberry…

          • Bene, perfetto per quanto riguarda le directory.
            Per il problema con VNC mi dispiace, ma sinceramente non l’ho mai provato in questo contesto.

Lascia un commento

L'indirizzo email non sarà pubblicato.


*