Purtroppo, a distanza di 5 anni di onorato servizio, la mia stazione Mini-ITX fanless è morta (non so ancora dove sia il guasto, ma è sempre stata – ininterrottamente – accesa e funzionante!!!). Il suo principale utilizzo è stato come stazione di download peer-2-peer: di conseguenza ha subito nel tempo un considerevole stress. E la mancanza di ventola ha certamente influito sul suo ciclo vitale. Non avendo intenzione di spendere denaro, mi sono per forza dovuto guardare intorno: in casa avevo disponibile un Raspberry Pi 3.
Cosa faremo
- Realizzeremo una stazione di download peer-2-peer molto leggera con un Raspberry Pi 3 e aMule (amuled-daemon)
- Configureremo il SO Linux Raspbian LITE (solo riga di comando) su una MicroSD da “soli” 2GB
- Prepareremo uno storage con una pendrive USB
- Useremo alcuni strumenti di monitoraggio remoto: amulecmd e amuleweb
- Condivideremo i files scaricati sulla rete locale tramite protocollo SAMBA
Un confronto
Mini-ITX Atom D435 (qui) | Raspberry Pi 3 model B | (ALTERNATIVA qui) Mini PC Intel Atom | |
Processore | Intel® Atom™ D425 (512K Cache, 1.80 GHz) | A 1.2GHz 64-bit quad-core ARMv8 CPU | Intel® Atom™ x5-Z8300 (2M Cache, 1.84Ghz) |
RAM | 1GB DDR3 (1066 Mhz) | 1GB DDR2 (900 MHz) | 2GB DDR3 |
Disco | HDD 160GB 5400 rpm | MicroSD 2GB classe 4 + PenDrive 32GB USB 3.0 | 32GB (system disk) |
Costo con accessori | circa 120 euro nel 2011 (oggi difficilmente replicabile) | circa 70 euro (qui da amazon.it in kit) | cica 100 euro (qui da amazon.it) |
Note | (OS Win10) NON supporta LINUX |
Sulla carta la cosa non mi fa ben sperare: il Raspberry Pi è inferiore alla concorrenza su tutte le principali caratteristiche. D’altra parte la mia vecchia configurazione Atom è difficile da replicare oggi con gli stessi prezzi. In alternativa si trovano in commercio diversi Mini PC Atom preassemblati, ma sono purtroppo spesso vincolati ad usare SO Windows (problemi di BIOS). Costano decisamente poco, ma l’affidabilità è tutta da dimostrare. Passiamo quindi alla prova dei fatti e vediamo come si comporta il lampone con una installazione di aMule
Gli ingredienti
Qui qualche consiglio per gli acquisti: il raspberry Pi 3 si trova anche in kit. Dovrete aggiungere eventualmente un cavo HDMI per il collegamento ad un monitor.
Transcend TS16GUSDU1 MicroSDHC Class 10 U1 con adattatore | ||
Raspberry Pi 3 Model B Desktop |
Raspberry Pi Model B+ OFFICIAL 5V 2A Multi National Power adapter |
Installiamo il SO: Raspbian LITE
Il SO scelto è quello ufficiale Raspbian: se avete a disposizione una MicroSD sufficiente capiente (aconsigliati 8GB), seguite queste istruzioni scaricando la ISO della versione desktop completa. Avendo però io già a disposizione una MicroSD di soli 2GB ho deciso per una installazione “leggera” passando per il NOOBS (New Out Of the Box Software). Qui trovate la semplice guida di installazione. Ovviamente, in questo caso, il SO scelto è la versione di Raspbian LITE da riga di comando, cioè senza interfaccia grafica (GUI). Questa soluzione vi permetterà anche di non sovraccaricare troppo il vostro Raspberry Pi, che non si dovrà occupare di lavorare con la scheda grafica. Se poi a voi la riga di comando non vi piace proprio, provate PIXEL. In teoria, passando per il NOOBS, una volta preparata ed inserita la MicroSD nel Raspberry Pi, vi basterà accenderlo senza tastiera, mouse e monitor. Basterà infatti alimentarlo ed inserire il cavo di rete (questa cosa non funziona con il solo WiFi): in questo modo potrete connettervi da remoto (dal vostro PC usuale) in SSH:
- Cercate l’indirizzo IP assegnato al vostro raspberry (accedere al router o usate uno di quei tool per lo scanning della rete locale)
- Utilizzate il terminale locale del vostro PC per aprire una sessione SSH e collegarvi al Raspberry Pi (le credenziali di default sono pi/raspberry)
In alternativa, per la prima configurazione, collegate mouse, tastiera e monitor; quindi accedete il Raspberry Pi. Lanciate sempre sudo raspi-config
- Opzione n.1: espandiamo il filesystem (necessario solo se non siete partiti da NOOBS)
- Opzione n.2: cambiamo la password dell’utente di default (pi)
- Opzione n.7 (avanzate): (A2) cambiamo l’host name per riconoscere la stazione in rete; (A3) cambiamo la quantità di memoria allocata per la scheda video a soli 16MB; (A4) abilitiamo l’SSH per connetterci da remoto (se non già abilitato).
Infine assegnate l’IP statico, in modo che questi non cambi mai: per questa operazione ed le altre configurazioni di base (come l’aggiornamento del sistema) potete fare riferimento ad alcuni dei passi presenti in questa guida ed in altre guide Linux sul blog. Prima di installare qualsiasi nuovo componente vi consiglio di eseguire sempre il comandi di aggiornamento:
sudo apt-get update sudo apt-get upgrade
Configuriamo lo storage
Collegate la chiavetta USB (qui in calce qualche chiavetta economica consigliata; in alternativa potete collegare un HDD esterno, ma ricordatevi di alimentare adeguatamente il Raspberry Pi).
Lexar JumpDrive 32GB USB 3.0 | Lexar JumpDrive 64GB USB 3.0 | Lexar JumpDrive 128GB USB 3.0 |
Digitate sul terminale:
sudo fdisk -l
avrete l’elenco dei dischi ed il tipo di filesystem. Confrontate le dimensioni e potrete facilmente riconoscere la pendrive. Nel mio caso, ad esempio, una penna da 32GB (nominali) è stata mappata su /dev/sda . In particolare c’è una partizione DOS FAT32 in /dev/sda1 , che provvederemo ad eliminare e riformattare:
Device Boot Start End Sectors Size Id Type /dev/sda1 8192 60632063 60623872 28.9G c W95 FAT32 (LBA)
Usate il comando:
sudo fdisk /dev/sda
Ricordatevi di sostituire sda con il vostro valore di riferimento. Digitate: p per la lista delle partizioni. Per cancellarle, d ; Create la partizione primaria con n , quindi p . Occupate tutto lo spazio disponibile. Per applicare i cambiamenti, w . Per l’help usate m . Quindi formattate come linux ext4.
sudo mkfs.ext4 /dev/sda1
Se rieseguite il comando sudo fdisk -l troverete:
Device Boot Start End Sectors Size Id Type /dev/sda1 2048 60632063 60630016 28.9G 83 Linux
A questo punto è necessario montare l’unità su una cartella appositamente creata (io ho scelto di chiamarla torrents ):
sudo mkdir /mnt/torrents sudo mount /dev/sda1 /mnt/torrents df -hT
L’ultimo comando vi da la conferma che la partizione (del giusto file system) sia correttamente montata e sia tutto ok:
$ df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/root ext4 1.6G 964M 531M 65% / devtmpfs devtmpfs 459M 0 459M 0% /dev tmpfs tmpfs 463M 0 463M 0% /dev/shm tmpfs tmpfs 463M 6.2M 457M 2% /run tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs tmpfs 463M 0 463M 0% /sys/fs/cgroup /dev/mmcblk0p6 vfat 66M 21M 46M 31% /boot /dev/sda1 ext4 29G 44M 27G 1% /mnt/torrents
A questo punto è necessario che l’unità venga montata in automatico ad ogni avvio del sistema. Modifichiamo un file di configurazione con:
sudo nano /etc/fstab
aggiungiamo la seguente riga:
/dev/sda1 /mnt/torrents ext4 defaults 0 0
Ad esempio, nel mio caso, il file fstab si presenta alla fine così:
$ cat /etc/fstab proc /proc proc defaults 0 0 /dev/mmcblk0p6 /boot vfat defaults 0 2 /dev/mmcblk0p7 / ext4 defaults,noatime 0 1 /dev/sda1 /mnt/torrents ext4 defaults 0 0 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
Riavviate il Raspberry Pi con:
sudo reboot
Installiamo aMule Daemon
Emule da moltissimi anni continua ad essere un riferimento per il P2P. Quando si parla di eMule si fa riferimento all’eseguibile per SO Windows. Per le altre piattaforme il pacchetto di riferimento di chiama aMule, che deriva direttamente da eMule. La cosa interessante è che aMule dispone di un demone chiamato amuled perfetto per le installazioni prive di GUI (come questa) e sistemi di bassa potenza. Installiamolo:
sudo apt-get install amule-daemon
Il pacchetto di amule-daemon si porta dietro anche amulecmd e amuleweb di cui parleremo dopo. In genere, subito dopo l’installazione, il demone non può partire perché manca una corretta configurazione. Prima di tutto è necessario configurare un utente non amministratore con cui farlo girare: chiamo questo utente amuleusr.
sudo adduser amuleusr
Dovreste proseguire con qualcosa del genere:
$ sudo adduser amuleusr Adding user `amuleusr' ... Adding new group `amuleusr' (1002) ... Adding new user `amuleusr' (1002) with group `amuleusr' ... Creating home directory `/home/amuleusr' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for usertmp Enter the new value, or press ENTER for the default Full Name []: aMule User Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] Y
Per una ragione di comodità aggiungiamo temporaneamente l’utente amulusr al gruppo sudo, in modo che possa eseguire qualche comando con maggiori privilegi: sudo adduser amuleusr sudo Basta ricordarsi alla fine dell’installazione di eliminarlo dal gruppo sudo e di cambiargli la shell associata per evitare di loggarsi. Una volta configurato l’utente editiamo il primo fondamentale file di configurazione di aMule:
sudo nano /etc/default/amule-daemon
E’ necessario indicare l’utente appena creato (amuleusr) come utente con cui far girare il demone (chiave AMULED_USER nel file di configurazione). Alla fine della modifica il file dovrebbe essere una cosa del genere:
# Configuration for /etc/init.d/amule-daemon # The init.d script will only run if this variable non-empty. AMULED_USER="amuleusr" # You can set this variable to make the daemon use an alternative HOME. # The daemon will use $AMULED_HOME/.aMule as the directory, so if you # want to have $AMULED_HOME the real root (with an Incoming and Temp # directories), you can do `ln -s . $AMULED_HOME/.aMule`. AMULED_HOME=""
Volendo (ma in questo caso specifico non l’ho fatto) potremmo spostare sullo storage (la pen drive) tutta la cartella HOME di amuled che contiene sia i files di configurazione che le cartelle Temp (con gli spezzoni dei files in download) ed Incoming (con i files completi): basta popolare la chiave AMULED_HOME con il path dello storage. Io personalmente preferisco tenere separati i files di configurazione dai files scaricati. Quindi creiamo le due cartelle sulla pen drive: Temp e Incoming
sudo mkdir /mnt/torrents/Temp sudo mkdir /mnt/torrents/
Diamo i privilegi di scrittura al nostro utente amuleusr.
sudo chown -R amuleusr /mnt/torrents
Fino a questo momento abbiamo operato con l’utente di default pi. Passiamo adesso all’utente amulusr, in modo da avviare finalmente il demone:
su amuleusr
Ci chiederà ovviamente la password. Avviamo il demone con:
amuled -f
A questo punto all’interno della home dell’utente amuleusr verrà create una cartella nascosta .aMule . Diamo un occhiata:
cd ~/.aMule
$ ls -la ... -rw-r--r-- 1 amuleusr amuleusr 5587 Jan 15 15:25 amule.conf drwxr-xr-x 2 amuleusr amuleusr 4096 Jan 31 13:38 Incoming drwxr-xr-x 2 amuleusr amuleusr 4096 Jan 31 13:38 Temp ...
Come anticipato vi troviamo le cartelle di servizio Incoming (files scaricati completi) e Temp (spezzoni dei files in download): queste verranno configurate sullo storage nelle analoghe cartelle create al passo precedente. E’ invece fondamentale il file di configurazione amule.conf che deve essere editato. Fermiamo temporaneamente il servizio:
sudo /etc/init.d/amule-daemon stop
Se volete avere la conferma che il servizio non giri più usate sempre il comando ps aux | grep amuled . Apriamo il file con l’editor:
sudo nano /home/amuleusr/.aMule/amule.conf
Riporto qui le principali voci da modificare:
[eMule] ... # E' il nickname con cui sarete conosciuti dagli altri utenti # Cambiarlo potrebbe essere utile Nick=ilmionickpreferitoanonimo ... # E' la porta TCP utilizzata dal amule: dovrete aprirla sul router Port=39521 # E' la porta UDP utilizzata da amule: dovrete aprile sul router UDPPort=39525 UDPEnable=1 ... # Questa opzione vi evita di rimuovere i server amule # nel caso non dovessero rispondere per alcune ore RemoveDeadServer=0 DeadServerRetry=3 ServerKeepAliveTimeout=0 ... # Queste sono le cartelle si servizio da far puntare # al vostro storage TempDir=/mnt/torrents/temp IncomingDir=/mnt/torrents/incoming ... # Fatevi allertare se lo spazio su disco dovesse finire MinFreeDiskSpace=100 ... # Questa è la cartella nascosta di sistema che # non è stata spostata e rimane della home # dell'utente amuleusr OSDirectory=/home/amuleusr/.aMule/ ... # Impostate qui i limiti di banda in funzione # della capacità della vostra connessione DownloadCapacity=1000 UploadCapacity=100 ... # Per ragioni di sicurezza lasciate a 0 queste voci: # eviterete di ricevere l'elenco dei server dalla rete # riducendo il rischio di connessioni a servers fake AddServerListFromServer=0 AddServerListFromClient=0 ... [Browser] ... [Proxy] ... [ExternalConnect] ... # Questi sono i dati per la connessione remota attraverso amulecmd # La password è in formato MD5 (vedi dopo). Consiglio di non cambiare la porta. AcceptExternalConnections=1 ECPort=4712 ECPassword=90027b489987c6b6f0c4af63c673c56a ... [WebServer] # Abilito il server web per l'accesso remoto tramite HTTP # La password è in formato Md5 (vedi dopo) Enabled=1 Password=90027b489987c6b6f0c4af63c673c56a PasswordLow= Port=4711 UseGzip=1 ... Path=amuleweb [GUI] ...
Per produrre la password da inserire in cofigurazione dovete calcolarne l’MD5. Ad esempio, per calcolare l’Md5 di ccworld usate:
$ echo -n "ccworld" | md5sum 90027b489987c6b6f0c4af63c673c56a -
Ricordatevi di configurare adeguatamente il NAT sul vostro router: tutte le porte devono essere aperte e ruotate. Nel file di configurazione in alto abbiamo ipotizzato di usare le seguenti porte: TCP 39521, UDP 39525. Sul vostro router dovrete però aprire le seguenti porte
- TCP 39521
- UDP 39524 (cioè la porta TCP + 3)
- UDP 39525
Potrebbe essere necessario intervenire anche sul firewall del Raspberry Pi. Potete usare questi comandi per modificarne la configurazione:
sudo iptables -A INPUT -p tcp --dport 39521 -j ACCEPT sudo iptables -A INPUT -p udp --dport 39525 -j ACCEPT sudo iptables -A INPUT -p udp --dport 39524 -j ACCEPT
Ovviamente sostituite in modo opportuno le vostre porte IP a quelle dell’esempio. Avviamo finalmente il demone (ricordiamoci di lavorare sempre con l’utente amuleusr):
amuled -f
Usiamo amulecmd
Il programma amulecmd è uno strumento da riga di comando che permette di controllare (sia in locale che in remoto) amuled. Per funzionare è importante che la sezione [ExternalConnect] del file di configurazione amule.conf sia opportunamente compilata (vedi sopra). Per lanciare amulecmd è sufficiente digitarne il comando amulecmd :
$ 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$
La password che vi verrà chiesta è esattamente quella impostata in amule.conf. Le operazioni da fare non sono tantissime, ma sono presenti quelle fondamentali: basta digitare 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.
Ad esempio possiamo aggiungere qualche server, pescandolo dalla seguente lista (valida a gennaio 2017, ricordate di aggiornarla):
- 91.200.42.46:1176 – eMule Security No1
- 91.200.42.47:3883 – eMule Security No2
- 91.200.42.119:9939 – eMule Security No3
- 77.120.115.66:5041 – eMule Security No4
- 176.103.48.36:4184 – TV Underground
- 195.154.109.229:4232 – Sharing-Devils.org
- 212.83.184.152:7111 – PeerBooter
- 195.154.83.5:7111 – PEERATES.NET
Una nota: ormai tutti i server di amule non sono affidabili (o non funzionano) per la ricerca. Se dovete cercare un file nella rete collegatevi alla rete Kad. Per aggiungere i server al vostro mulo basta digitare all’interno di amulecmd il comando add seguito da uno dei link riportati in alto.
aMulecmd$ add ed2k://%7Cserver%7C91.200.42.46%7C1176%7C/ > Operation was successful.
ripetete l’operazione per i restanti server (qui li riporto tutti per comodità).
add ed2k://%7Cserver%7C91.200.42.46%7C1176%7C/ add ed2k://%7Cserver%7C91.200.42.47%7C3883%7C/ add ed2k://%7Cserver%7C91.200.42.119%7C9939%7C/ add ed2k://%7Cserver%7C77.120.115.66:5041%7C/ add ed2k://%7Cserver%7C176.103.48.36%7C4184%7C/ ed2k://%7Cserver%7C195.154.109.229%7C4232%7C/ add ed2k://%7Cserver%7C88.191.228.66%7C7111%7C/ add ed2k://%7Cserver%7C88.191.221.121%7C7111%7C/
Potete verificare con il comando show che i server siano stati memorizzati:
aMulecmd$ show servers > [91.200.42.46:1176] eMule Security No1 > [88.191.221.121:7111] 88.191.221.121 > [91.200.42.119:9939] eMule Security No3 > [91.200.42.47:3883] eMule Security No2 > [176.103.48.36:4184] TV Underground > [195.154.109.229:4232] 195.154.109.229 > [88.191.228.66:7111] 88.191.228.66
A questo digitate il comando connect ed aspettate qualche secondo. Se volete fare una ricerca (proviamo “spiderman“) potete usare il comando search kad :
aMulecmd$ search kad spiderman > Search in progress. Refetch results in a moment!
Per ottenere il risultato digitiamo results :
aMulecmd$ results Nr. Filename: Size(MB): Sources: ----------------------------------------------------------------------------------------------------------- ... 2. The.Amazing.SpiderMan.2.Il.Potere.Di.Electro.3D.2014.DTS.ITA.ENG.Half.SBS.10 1748.332 1 3. cartoni animati - Spiderman l'uomo ragno.mp3 2.538 0 4. Michael Buble - Spiderman theme (Swing).mp3 2.790 1 5. OK - [Divx ita] Spiderman 3.avi 695.220 406 6. x-men wolverine, thor, hulk, and spiderman 01.jpg 0.329 1 ...
Mi raccomando, non scaricate contenuti illegali! Esiste un modo per sfruttare amulecmd direttamente dalla riga di comando principale, e di conseguenza negli script. Usiamo il comando status per vedere come vanno le cose. La sintassi è la seguente:
amulecmd -P PASSWORD -c COMANDO
Ad esempio, dal prompt dell’utente:
/home/pi $ amulecmd -P 123456 -c status This is amulecmd 2.3.1 Creating client... Succeeded! Connection established to aMule 2.3.1 > eD2k: Connected to eMule Security No1 [91.200.42.46:1176] with HighID > Kad: Connected (ok) > Download: 143.87 kB/s > Upload: 27.22 kB/s > Clients in queue: 1 > Total sources: 382
Qui trovate un semplice script. Ma non è tutto: amulecmd può comandare una installazione di amuled anche da remoto. E’ sufficiente installarlo sulla macchina remota e usare una sintassi del genere:
amulecmd -h [IP_amuled] -p [porta_amuled] -P [password] -c "comando"
Usiamo amuleweb
Nella configurazione editata in fase di installazione abbiamo abilitato anche l’interfaccia web di aMule. Per funzionare è importante che la sezione [WebServer] del file di configurazione amule.conf sia opportunamente compilata (vedi sopra). La porta di default (che non abbiamo cambiato) è la 4711 e la password è quella inserita nel file di configurazione in formato Md5. Digitando nel browser http://:4711/ possiamo autenticarci e visualizzare l’interfaccia grafica (seppur minimale). Attraverso emuleweb è possibile variare alcuni parametri di configurazione, accedere al log, alle statistiche ed eseguire più facilmente le ricerche.
Condividiamo i files nella rete locale
L’idea è di condividere la cartella dei files scaricati
/mnt/torrents/Incoming
sulla nostra rete locale. Per fare questo installiamo il servizio SAMBA:
sudo apt-get install samba samba-common-bin
prima backuppiamo e poi editiamo il file di configurazione:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.old sudo nano /etc/samba/smb.conf
se vogliamo abilitare il supporto a Windows decommentiamo e modifichiamo la linea:
wins support = yes
Aggiungete (o decommentate nel caso sia già presente) alla fine della sezione Authentication la seguente riga:
security = user
Aggiungete alla fine del file la seguente sezione (la prima riga tra parentesi identifica la vostra condivisione: assegnategli una etichetta chiara):
[torrents] comment = cartella dei files scaricati path= /mnt/torrents valid users=amuleusr browseable=yes read only = no writeable=yes only guest=no guest ok=no create mask=0777 directory mask=0777 public=no
Assegnate la password all’utente che può collegarsi alla cartella condivisa:
sudo smbpasswd -a amuleusr
(io per comodità uso lo stesso utente e la stessa password dell’utente amuleusr di amuled). Riavviate il servizio:
sudo /etc/init.d/samba restart
Buongiorno
sto provando a caricare amule su un Rasberry pi 3. Siccome sono alle prime armi con questo dispositivo devo continuamente fare delle prove….
Sono arrivaetc/fstabto al punto dove devo usare nano per editare il file /etc/fstab come scritto sulle istruzioni. Mi sono dovuto documentare su nano perchè non lo conoscevo.
Eseguo il comando mi si apre la finestra di edit ma del contenuto del file nessuna traccia. Dove sbaglio?
Posso inviarvi un print screen ma non so come fare.
Grazie e spero mi possiate aiutare