Server per il P2P con Debian: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (→‎Accesso remoto: aggiunti "a capo")
 
(28 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Template:Articoli ezine|titolo=Server per il P2P in Debian|intro=Una rapida guida sul come configurare un server per gestire i protocolli emule e torrent da remoto. Ottima soluzione per distribuire e scaricare file.<br/>
{{Versioni compatibili|Squeeze|Wheezy}}
|abstract=Debian offre già le migliori soluzioni software per il P2P, basta solo un po' di opportuna configurazione per avere un serverino di tutto rispetto.<br/>
__TOC__
|1=[http://e-zine.debianizzati.org/stampa/numero_6.pdf numero 6]}}
{{E-zine
 
|num=6
|articoli=http://e-zine.debianizzati.org/stampa/numero_6.pdf
}}
=Introduzione alle reti P2P=
=Introduzione alle reti P2P=
Per questa parte rimando all'articolo originale, non essendovi al momento necessità di aggiornamento
Per questa parte rimando all'articolo originale presente sull'e-zine, non essendovi al momento necessità di aggiornamento.


= Costruiamo il nostro server =
= Costruiamo il nostro server =
Riga 11: Riga 13:
* ''Rtorrent'' per usare il protocollo ''BitTorrent''.
* ''Rtorrent'' per usare il protocollo ''BitTorrent''.


La rete ''eDonkey'' è basata su una serie di server che permettono la localizzazione delle risorse all'interno della rete; è necessario tenere aggiornata la lista dei server poiché è possibile, in qualunque momento, aggiungere nuovi server o rimuoverne di esistenti. La rete ''Kad'', invece, è priva di server, è una rete decentralizzata peer-to-peer di terza generazione che utilizza il protocollo ''Kademlia'' in cui ad ogni nodo è associato un ID univoco usato non solo per identificare il nodo stesso ma anche per memorizzare l&#39;''hash'' della risorsa che si vuol condividere; ''hash'' ed ''Id'' hanno la stessa lunghezza e l&#39;''hash'' della risorsa condivisa viene memorizzata nei nodi con valore di ''Id'' più prossimi all&#39;''hash'' stesso.
La rete ''eDonkey'' è basata su una serie di server che permettono la localizzazione delle risorse all'interno della rete; è necessario tenere aggiornata la lista dei server poiché è possibile, in qualunque momento, aggiungere nuovi server o rimuoverne di esistenti. La rete ''Kad'', invece, è priva di server, è una rete decentralizzata peer-to-peer di terza generazione che utilizza il protocollo ''Kademlia'' in cui ad ogni nodo è associato un ID univoco usato non solo per identificare il nodo stesso ma anche per memorizzare l'''hash'' della risorsa che si vuol condividere; ''hash'' ed ''Id'' hanno la stessa lunghezza e l'''hash'' della risorsa condivisa viene memorizzata nei nodi con valore di ''Id'' più prossimi all'''hash'' stesso.


Il protocollo ''BitTorrent'', spezzetta la risorsa in parti di dimensione fissa che sono scambiati attraverso la rete ''peer-to-peer'' per poi ricomporre il file a destinazione. La descrizione delle parti in cui è suddivisa la risorsa è memorizzata in un file indice che ha estensione .torrent, che contiene anche l'indirizzo URL di un o più server traccia detti, ''tracker'', che permettono di localizzare il file o le sue parti.I computer appartenenti alla rete domestica useranno dei ''client web'' (''webUI'') per comunicare col ''server''; in questo modo non vi è la necessità di installare programmi aggiuntivi, ma sarà sufficiente il ''browser''.
Il protocollo ''BitTorrent'', spezzetta la risorsa in parti di dimensione fissa che sono scambiati attraverso la rete ''peer-to-peer'' per poi ricomporre il file a destinazione. La descrizione delle parti in cui è suddivisa la risorsa è memorizzata in un file indice che ha estensione .torrent, che contiene anche l'indirizzo URL di uno o più server traccia detti, ''tracker'', che permettono di localizzare il file o le sue parti. I computer appartenenti alla rete domestica useranno dei ''client web'' (''webUI'') per comunicare col ''server''; in questo modo non vi è la necessità di installare programmi aggiuntivi, ma sarà sufficiente il ''browser''.


''Amule'' è la soluzione più diffusa per connettersi alle reti ''eDonkey/Kad'', mentre per quanto riguarda i ''torrent'' vi sono valide alternative come ''Deluge'' e ''Transmission'', entrambi prevedono la modalità demone con la possibilità di connettersi tramite ''webUI''.
''Amule'' è la soluzione più diffusa per connettersi alle reti ''eDonkey/Kad'', mentre per quanto riguarda i ''torrent'' vi sono valide alternative come ''Deluge'' e ''Transmission'', entrambi prevedono la modalità demone con la possibilità di connettersi tramite ''webUI''.


Consideriamo una classica rete domestica costituita da un ''router DSL'' al quale si connettono i computer della casa, il nostro ''server'' risiederà su un pc dedicato. Si può usare un vecchio computer ormai in disuso. La potenza di calcolo non è importante per i nostri scopi; basta che abbia un ''hard disk'' capiente ed inoltre dovrà avere un indirizzo ''IP'' pubblico. Nel ''firewall'' presente sul ''router'' occorrerà aprire alcune porte associandole a tale indirizzo per avere un corretto funzionamento del nostro server di ''file sharing''.Per quanto riguarda la sicurezza/riservatezza, trattandosi di una rete domestica non prendiamo '''nessuna misura di protezione'''; al di fuori di una rete domestica è necessario implementare tali meccanismi che non sono però trattati in questa guida.
Consideriamo una classica rete domestica costituita da un ''router DSL'' al quale si connettono i computer della casa, il nostro ''server'' risiederà su un PC dedicato. Si può usare un vecchio computer ormai in disuso. La potenza di calcolo non è importante per i nostri scopi; basta che abbia un ''hard disk'' capiente ed inoltre dovrà avere un indirizzo ''IP'' pubblico. Nel ''firewall'' presente sul ''router'' occorrerà aprire alcune porte associandole a tale indirizzo per avere un corretto funzionamento del nostro server di ''file sharing''. Per quanto riguarda la sicurezza/riservatezza, trattandosi di una rete domestica non prendiamo '''nessuna misura di protezione'''; al di fuori di una rete domestica è necessario implementare tali meccanismi che non sono però trattati in questa guida.


==Installazione di Debian==
==Installazione di Debian==
Per iniziare installiamo sul computer una Debian stable (Squeeze) tramite immagine ''business-card'', reperibile dal sito,http://www.debian.org/CD/netinst/ci limitiamo ad installare solo il ''core'' del sistema.[[Immagine:di.jpg]]Durante l'installazione si dovrà <u>specificare un utente</u>: negli esempi proposti è stato scelto '''mulo''' siccome mi sembrava essere il nome più adatto. Qualora ne scegliate uno diverso <u>ricordatevi di modificare anche gli ''script'' mostrati di seguito</u>. Ovviamente le password dello user e di root sono a vostra discrezione.
Per iniziare installiamo sul computer una Debian [[stable]] (Squeeze) tramite immagine ''business-card'', reperibile dal sito http://www.debian.org/CD/netinst/ , e ci limitiamo ad installare solo il ''core'' del sistema.
 
[[Immagine:Installazione_serverp2p.jpg|center]]
 
Durante l'installazione si dovrà <u>specificare un utente</u>: negli esempi proposti è stato scelto '''mulo''' siccome mi sembrava essere il nome più adatto. Qualora ne scegliate uno diverso <u>ricordatevi di modificare anche gli ''script'' mostrati di seguito</u>. Ovviamente le password dello user e di root sono a vostra discrezione.
==''Rtorrent''==
==''Rtorrent''==
Per poter scaricare o condividere file ''torrent'' installiamo il programma ''Rtorrent'', mentre per permettere agli altri computer di connettersi al ''server'' tramite ''webUI'' installiamo anche il programma ''Rtgui''. Tali software sono reperibili da:http://libtorrent.rakshasa.no/http://code.google.com/p/rtgui/ed essendo nei ''repository'' di Debian potremmo installarli sfruttando il solito Apt.
Per poter scaricare o condividere file ''torrent'' installiamo il programma ''Rtorrent'', mentre per permettere agli altri computer di connettersi al ''server'' tramite ''webUI'' installiamo anche il programma ''Rtgui''. Tali software sono reperibili da http://libtorrent.rakshasa.no/http://code.google.com/p/rtgui/ ed essendo nei [[repository]] di Debian potremmo installarli sfruttando il solito Apt.
===Installazione===
===Installazione===
<pre># aptitude install rtorrent screen rtgui gawk</pre>
<pre># aptitude install rtorrent screen rtgui gawk</pre>
Siccome esistono più versioni del server apache ci verrà segnalato automaticamente da aptitude quale installare:
Siccome esistono più versioni del server Apache, ci verrà segnalato automaticamente da [[aptitude]] quale installare:
<pre>The following packages have unmet dependencies:
<pre>The following packages have unmet dependencies:
   apache2-mpm-worker: Conflicts: apache2-mpm which is a virtual package.
   apache2-mpm-worker: Conflicts: apache2-mpm which is a virtual package.
Riga 51: Riga 57:


====File di config====
====File di config====
Configuriamo ora ''Rtorrent'' creando il file '''<tt>/home/mulo/.rtorrent.rc</tt>''' come il seguente.
Configuriamo ora ''Rtorrent'' creando il file '''<code>/home/mulo/.rtorrent.rc</code>''' come il seguente.
Ricordate sempre che per avere consigli sul come crearlo a partire da zero potete utilizzare il comodo esempio presente nella documentazione in ''/usr/share/doc/rtorrent/examples/rtorrent.rc'' sul quale ho basato la mia configurazione (alias <tt>cp</tt>).
Ricordate sempre che per avere consigli sul come crearlo a partire da zero potete utilizzare il comodo esempio presente nella documentazione in ''/usr/share/doc/rtorrent/examples/rtorrent.rc'' sul quale ho basato la mia configurazione (alias <code>cp</code>).


=====.rtorrent.rc=====
=====.rtorrent.rc=====
(modifiche principali in rosso)
(modifiche principali in <font style="color:red;">rosso</font>)
<pre style="overflow:auto;max-height:400px">
# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.


# Maximum and minimum number of peers to connect to per torrent.
# This is an example resource file for rTorrent. Copy to
min_peers = 40
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
max_peers = 100
# uncomment the options you wish to enable.
# Maximum and minimum number of peers to connect to per torrent.
<span style="color:red">min_peers = 40
max_peers = 100</span>
# Same as above but for seeding completed torrents (-1 = same as downloading)
<span style="color:red">min_peers_seed = 5
max_peers_seed = 10</span>
# Maximum number of simultanious uploads per torrent.
<span style="color:red">max_uploads = 5</span>
# Global upload and download rate in KiB. "0" for unlimited.
<span style="color:red">download_rate = 75
upload_rate = 5</span>
# Default directory to save the downloaded torrents.
#directory = ./complete
<span style="color:red">directory = /home/mulo/torrent/</span>
# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
<span style="color:red">session = /home/mulo/torrent/session</span>
# Watch a directory for new torrents, and stop those that have been
# deleted.
<span style="color:red">schedule = watch_directory,10,10,load_start=/home/mulo/watch/*.torrent
schedule = tied_directory,10,10,start_tied=
schedule = untied_directory,10,10,close_untied=</span>
# */
# Close torrents when diskspace is low.
<span style="color:red">#schedule = low_diskspace,5,60,close_low_diskspace=100M</span>
# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
<span style="color:red">schedule = ratio,60,60,"stop_on_ratio=250,250M,2500"</span>
# Move completed torrents
system.method.set_key = event.download.finished,move_complete,"execute=mv,-u,$d.get_base_path=,/home/mulo/complete;d.set_directory=/home/mulo/complete"
# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no
# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no
# Port range to use for listening.
<span style="color:red">port_range = 6881-6999</span>
# Start opening ports at a random position within the port range.
#port_random = no
# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
#check_hash = no
check_hash = yes
# Set whetever the client should try to connect to UDP trackers.
<span style="color:red">use_udp_trackers = yes</span>
# Alternative calls to bind and ip that should handle dynamic ip's.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa
# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
# encryption = allow_incoming,enable_retry,prefer_plaintext
<span style="color:red">encryption = allow_incoming,try_outgoing,enable_retry</span>
# Enable DHT support for trackerless torrents or when all trackers are down.
# May be set to "disable" (completely disable DHT), "off" (do not start DHT),
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
# The default is "off". For DHT to work, a session directory must be defined.
#
<span style="color:red">dht = auto</span>
# UDP port to use for DHT.
#
dht_port = 6881
# Enable peer exchange (for torrents not marked private)
#
peer_exchange = yes
#
# Do not modify the following parameters unless you know what you're doing.
#
# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10
# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100
# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10
# This will set rtorrent/scgi to listen on localhost, port 5000
scgi_port = localhost:5000
# Force rtorrent to use the UTF-8 encoding. The XMLRPC standard requires UTF-8 replies
encoding_list=UTF-8


# Same as above but for seeding completed torrents (-1 = same as downloading)
min_peers_seed = 5
max_peers_seed = 10


# Maximum number of simultanious uploads per torrent.
La maggior parte di queste opzioni sono esplicite, altre un po' ermetiche; è possibile consultare il [http://libtorrent.rakshasa.no/rtorrent/rtorrent.1.html manuale] per avere maggiori informazioni.<br/>
max_uploads = 5
Inoltre a questa [http://libtorrent.rakshasa.no/wiki/RTorrentCommonTasks pagina] è possibile avere informazioni avanzate in merito ai possibili comandi utilizzabili.
 
=====rtgui=====
Infine impostiamo alcuni parametri della webGui. Del file ''/etc/rtgui/config.php'' è sufficiente modificare i seguenti sulla base delle proprie impostazioni appena assegnate:
<pre>
$watchdir="/home/mulo/torrent/watch/";
$downloaddir="/home/mulo/torrent";
</pre>
 
===Script di avvio===
''Rtorrent'' dovrà partire all'avvio del ''server''; dobbiamo, dunque, "demonizzarlo" creando il file <code>/etc/init.d/rtorrent</code>:
<pre>
#!/bin/sh
### BEGIN INIT INFO
# Provides:      rtorrent
# Required-Start:  $network
# Required-Stop:  $network
# Default-Start:  2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: Start rtorrent as a daemon
### END INIT INFO


# Global upload and download rate in KiB. "0" for unlimited.
#############
download_rate = 75
###<Notes>###
upload_rate = 5
#############
# This script depends on screen.
# For the stop function to work, you must set an
# explicit session directory using ABSOLUTE paths (no, ~ is not absolute) in your rtorrent.rc.
# If you typically just start rtorrent with just "rtorrent" on the
# command line, all you need to change is the "user" option.
# Attach to the screen session as your user with
# "screen -dr rtorrent". Change "rtorrent" with srnname option.
# Licensed under the GPLv2 by lostnihilist: lostnihilist _at_ gmail _dot_ com
##############
###</Notes>###
##############
#######################
##Start Configuration##
#######################
# You can specify your configuration in a different file
# (so that it is saved with upgrades, saved in your home directory,
# or whateve reason you want to)
# by commenting out/deleting the configuration lines and placing them
# in a text file (say /home/user/.rtorrent.init.conf) exactly as you would
# have written them here (you can leave the comments if you desire
# and then uncommenting the following line correcting the path/filename
# for the one you used. note the space after the ".".
# . /etc/rtorrent.init.conf
#Do not put a space on either side of the equal signs e.g.
# user = user
# will not work
# system user to run as
user="mulo"
# the system group to run as, not implemented, see d_start for beginning implementation
# group=`id -ng "$user"`
# the full path to the filename where you store your rtorrent configuration
config="/home/mulo/.rtorrent.rc"
# set of options to run with
options=""
# default directory for screen, needs to be an absolute path
#base="/home/${user}"
base="/home/mulo"
# name of screen session
srnname="rtorrent"
# file to log to (makes for easier debugging if something goes wrong)
logfile="/var/log/rtorrentInit.log"
#######################
###END CONFIGURATION###
#######################


# Default directory to save the downloaded torrents.
PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin
#directory = ./complete
DESC="rtorrent"
directory = /home/mulo/complete
NAME=rtorrent
DAEMON=$NAME
SCRIPTNAME=/etc/init.d/$NAME
checkcnfg() {
exists=0
for i in `echo "$PATH" | tr ':' '\n'` ; do
if [ -f $i/$NAME ] ; then
exists=1
break
fi
done
if [ $exists -eq 0 ] ; then
echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2
exit 3
fi
if ! [ -r "${config}" ] ; then
echo "cannot find readable config ${config}. Check that it is there and permissions are appropriate." | tee -a "$logfile" >&2
exit 3
fi
session=`getsession "$config"`
if ! [ -d "${session}" ] ; then
echo "cannot find readable session directory ${session} from config ${config}. Check permissions." | tee -a "$logfile" >&2
exit 3
fi
}
d_start() {
  [ -d "${base}" ] && cd "${base}"
  stty stop undef && stty start undef
  # robert 20080807 su -c "screen -ls | grep -sq "\.${srnname}:space:" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
  su -c "screen -ls | grep -sq "\.${srnname}:space:" " ${user} || su -c "screen -dm -S ${srnname} " ${user}
# this works for the screen command, but starting rtorrent below adopts screen session gid
# even if it is not the screen session we started (e.g. running under an undesirable gid
#su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "sg \"$group\" -c \"screen -fn -dm -S ${srnname} 2>&1 1>/dev/null\"" ${user} | tee -a "$logfile" >&2
# robert 20080807 su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
su -c "screen -S "${srnname}" -X screen rtorrent ${options}" ${user}
}
d_stop() {
session=`getsession "$config"`
if ! [ -s ${session}/rtorrent.lock ] ; then
return
fi
pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"`
        pid2=`su $user -c 'screen -ls' | awk -F [.] '/[[:digit:]].rtorrent/{print($1)}' | sed "s/[^0-9]//g"`
if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process
kill -s INT ${pid}; kill -s KILL ${pid2}
fi
        su $user -c 'screen -wipe'
}
getsession() {
session=`awk '/^[[:space:]]?session[[:space:]]?=[[:space:]]?/{print($3)}' "$config"`
echo $session
}
checkcnfg
case "$1" in
  start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
  stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
  restart|force-reload)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
  *)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
</pre>


# Default session directory. Make sure you don't run multiple instance
Quindi impostiamo il nostro servizio affinché parta all'avvio:
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = /home/mulo/session


# Watch a directory for new torrents, and stop those that have been
<pre>
# deleted.
# chmod +x /etc/init.d/rtorrent
schedule = watch_directory,10,10,load_start=/home/mulo/watch/*.torrent
# update-rc.d rtorrent defaults
schedule = tied_directory,10,10,start_tied=
</pre>
schedule = untied_directory,10,10,close_untied=
# */
# Close torrents when diskspace is low.
#schedule = low_diskspace,5,60,close_low_diskspace=100M


# Stop torrents when reaching upload ratio in percent,
Per testare che tutto funzioni proviamo ad avviare il [[demone]]:
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
schedule = ratio,60,60,"stop_on_ratio=250,250M,2500"
# Move completed torrents
system.method.set_key = event.download.finished,move_complete,"execute=mv,-u,$d.get_base_path=,/home/mulo/complete;d.set_directory=/home/mulo/complete"


# The ip address reported to the tracker.
<pre># /etc/init.d/rtorrent start</pre>
#ip = 127.0.0.1
#ip = rakshasa.no


# The ip address the listening socket and outgoing connections is
e a collegarci all'interfaccia grafica all'URL ''<nowiki>http://<IpAddressMulo>/rtgui</nowiki>''
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no


# Port range to use for listening.
===Specifiche===
port_range = 6881-6999
*Porte da aprire
** 6881-6999 (TCP)
** 6881 (UDP)
* Limiti banda
** download    75 KiB
** upload    5 KiB
* Connessione tramite webUI all'indirizzo ''<nowiki>http://<IpAddressMulo>/rtgui</nowiki>''


# Start opening ports at a random position within the port range.
[[Immagine:rtgui.jpg|center]]
#port_random = no


# Check hash for finished torrents. Might be usefull until the bug is
===Conclusioni===
# fixed that causes lack of diskspace not to be properly reported.
Le maggiori implicazioni riguardo alla '''sicurezza''' sono in merito all'accesso all'interfaccia di controllo. Si consiglia pertanto di rendere accessibile la stessa esclusivamente all'interno della propria LAN o tutt'al più proteggere la pagina di controllo con una password. Inoltre non sarebbe male anche l'idea di utilizzare un buon filtro IP come blockcontrol. Infine si ricorda che per quanto concerne l'uso di rtorrent è pur sempre possibile, oltre alla comoda interfaccia web appena illustrata, utilizzare il programma via '''ssh''' per poi accedere alla sessione di screen dove è in esecuzione rtorrent.
#check_hash = no
check_hash = yes


# Set whetever the client should try to connect to UDP trackers.
==''Amule''==
use_udp_trackers = yes
Adesso occupiamoci di installare ''Amuled'' per accedere alle reti ''eD2k'' e ''Kademlia''. Utilizzando la versione daemon avremo il vantaggio di poter fare a meno dell'ambiente grafico sul server. Per quanto riguarda l'accesso sarà invece possibile adottare, come per rtorrent, una interfaccia web (si avrà quindi il vantaggio di un accesso universale senza l'installazione di software aggiuntivo, oppure utilizzare il programma <code>amulegui</code>, il quale permette di accedere ad una interfaccia avanzata e molto più funzionale. A voi la scelta!
===Installazione===
Installiamo il pacchetto ''amule-daemon'', il quale comprende oltre al demone anche il modulo ''Amuleweb'' che permette la connessione tramite ''webUI'' al server di ''Amule'':
<pre># aptitude install amule-daemon</pre>
===Configurazione===
Dovremo configurare per prima cosa il demone di ''Amule'', quindi potremo scegliere se configurare anche la WebGUI (''AmuleWEB''), la GUI ''Amule-GUI'' o entrambi.
====Avvio autoconfigurazione====
Per configurare opportunamente il demone è possibile far sì che sia ''amule'' stesso a creare il file di configurazione di default nonché le cartelle necessarie. Infatti se avviamo da shell il demone, come da esempio:
<pre>$ amuled</pre>
verrà restituito errore ma sarà anche creata la ''directory'' <code>.aMule/</code> con tutti i vari file di configurazione che quindi potremo ora modificare a nostro gradimento.Tra questi saranno presenti anche le principali directory utilizzate da aMule per il download:
* ~/.aMule/''tmp'': cartella dei file temporanei
* ~/.aMule/''incoming'': cartella file scaricati e condivisi. Tutto quello che sta dentro questa cartella può essere scaricato dagli altri ''peer''.
====Personalizzazione delle opzioni di configurazione====
A questo punto possiamo ora aprire con un editor di testo il file <code>.aMule/amule.conf</code> e modificare il valore dei parametri di default (per approfondire si consiglia il wiki di [http://wiki.amule.org/index.php/Main_Page ''amuled''] oppure del wiki [http://wiki.debian.org/aMule di debian.org]; [http://www.linksysinfo.org/forums/showthread.php?p=367263 qui] invece per maggiori dettagli). Ovviamente per avere fin da subito una configurazione completa e funzionante senza scendere nei dettagli, potrete utilizzare il file come di seguito riportato (con i commenti ''###'' sono evidenziate lo opzioni modificate):
<pre>
[eMule]
AppVersion=2.2.6
Nick=http://www.aMule.org
QueueSizePref=50
### limita il carico del server in upload
MaxUpload=15
###limita il carico del server in download
MaxDownload=75
###quota banda che ciascun peer ciuccia
SlotAllocation=5
Port=4662
UDPPort=4672
UDPDisable=0
Address=
Autoconnect=1
### limitare per ridurre carico al NAT del router
MaxSourcesPerFile=100
### limitare per ridurre carico al NAT del router
MaxConnections=200
MaxConnectionsPerFiveSeconds=20
RemoveDeadServer=1
DeadServerRetry=3
ServerKeepAliveTimeout=0
Reconnect=1
Scoresystem=1
### Serverlist=0 auto update the server list from the supplied url
Serverlist=1
### AddServerListFromServer=0
AddServerListFromServer=1
AddServerListFromClient=0
SafeServerConnect=0
AutoConnectStaticOnly=0
UPnPEnabled=0
UPnPTCPPort=50000
SmartIdCheck=1
ConnectToKad=1
ConnectToED2K=1
TempDir=/home/mulo/.aMule/Temp
IncomingDir=/home/mulo/.aMule/Incoming
ICH=1
AICHTrust=0
CheckDiskspace=1
MinFreeDiskSpace=1
AddNewFilesPaused=0
PreviewPrio=0
ManualHighPrio=0
FullChunkTransfers=1
StartNextFile=0
StartNextFileSameCat=0
FileBufferSizePref=16
DAPPref=1
UAPPref=1
AllocateFullFile=0
OSDirectory=/home/mulo/.aMule/
OnlineSignature=0
OnlineSignatureUpdate=5
EnableTrayIcon=0
MinToTray=0
ConfirmExit=1
StartupMinimized=0
3DDepth=10
ToolTipDelay=1
ShowOverhead=0
ShowInfoOnCatTabs=1
ShowRatesOnTitle=0
VerticalToolbar=0
ShowPartFileNumber=0
VideoPlayer=
VideoPreviewBackupped=1
StatGraphsInterval=3
statsInterval=30
### limita banda occupata in download
DownloadCapacity=100
### limita banda occupata in upload
UploadCapacity=20
StatsAverageMinutes=5
VariousStatisticsMaxValue=100
SeeShare=2
FilterLanIPs=1
ParanoidFiltering=1
IPFilterAutoLoad=1
IPFilterURL=
FilterLevel=127
IPFilterSystem=0
FilterMessages=1
FilterAllMessages=0
MessagesFromFriendsOnly=0
MessageFromValidSourcesOnly=1
FilterWordMessages=0
MessageFilter=
FilterComments=0
CommentFilter=
ShareHiddenFiles=0
AutoSortDownloads=0
NewVersionCheck=1
Language=
SplitterbarPosition=75
YourHostname=
DateTimeFormat=%A, %x, %X
AllcatType=0
ShowAllNotCats=0
SmartIdState=0
DropSlowSources=0
KadNodesUrl=http://emule-inside.net/nodes.dat
Ed2kServersUrl=http://gruk.org/server.met.gz
[Browser]
DefaultBrowser=0
OpenPageInTab=1
CustomBrowserString=
[Proxy]
ProxyEnableProxy=0
ProxyType=0
ProxyName=
ProxyPort=1080
ProxyEnablePassword=0
ProxyUser=
ProxyPassword=
[ExternalConnect]
UseSrcSeeds=0
### Abilita l'uso delle interfacce web e GUI
AcceptExternalConnections=1
ECAddress=
ECPort=4712
ECPassword=637b9adadf7acce5c70e5d327a725b13
UPnPECEnabled=0
ShowProgressBar=1
ShowPercent=1
UseSecIdent=1
IpFilterClients=1
IpFilterServers=1
[WebServer]
#Enabled=0
Enabled=1
Password=637b9adadf7acce5c70e5d327a725b13
PasswordLow=
Port=4711
WebUPnPTCPPort=50001
UPnPWebServerEnabled=0
UseGzip=1
UseLowRightsUser=0
PageRefreshTime=120
Template=
[Razor_Preferences]
FastED2KLinksHandler=1
[SkinGUIOptions]
UseSkinFiles=0
Skin=
[Statistics]
MaxClientVersions=0
TotalDownloadedBytes=0
TotalUploadedBytes=34633
[Obfuscation]
IsClientCryptLayerSupported=1
IsCryptLayerRequested=1
IsClientCryptLayerRequired=0
CryptoPaddingLenght=254
CryptoKadUDPKey=271264387
[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=
</pre>
L'esempio appena proposto permette sia l'accesso tramite la webGUI, sia tramite la GUI grafica. L'abilitazione di questi è configurata tramite l'istanza ''[ExternalConnect]'' e ''[WebServer]''. La spiegazione in dettaglio è fornita nei paragrafi successivi. A questo punto non rimane che modificare con un editor di testo il file ''/etc/default/amule-daemon'' definendo lo user con il quale verrà eseguito ''amuled'', ossia modificando il seguente parametro:<pre>AMULED_USER="mulo"</pre>


# Alternative calls to bind and ip that should handle dynamic ip's.
====Avvio di Amuled====
#schedule = ip_tick,0,1800,ip=rakshasa
Ora sarà possibile avviare il demone:
#schedule = bind_tick,0,1800,bind=rakshasa
<pre># /etc/init.d/amule-daemon start</pre>
Si osserva che, per poter eseguire ''amuled'' (ossia il demone di amule), è necessario - come già modificato nel file di esempio precedente - abilitare la modalità di connessione remota del client. In dettaglio è necessario indicare al demone di accettare le connessioni esterne del client (''AcceptExternalConnections=1'') e di indicare l'hash della password di autenticazione alla connessione (''ECPassword=637b9adadf7acce5c70e5d327a725b13''). L'hash della password può essere ottenuta utilizzando il seguente comando (e inserendo la chiave desiderata al posto di ''yourpassword''):
<pre>echo -n yourpassword | md5sum | cut -d ' ' -f 1637b9adadf7acce5c70e5d327a725b13</pre>


# Encryption options, set to none (default) or any combination of the following:
====Aggiungere liste server====
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
Aggiungiamo quindi le liste dei ''server eDonkey'':
#
<pre>
# The example value allows incoming encrypted connections, starts unencrypted
$ echo "http://www.gruk.org/server.met.gz" > ~/.aMule/addresses.dat
# outgoing connections but retries with encryption if they fail, preferring
$ echo "http://www.peerates.net/servers.php" >> ~/.aMule/addresses.dat
# plaintext to RC4 encryption after the encrypted handshake
</pre>
#
Per la rete ''Kad'' scarichiamo una lista ulteriore prelevandola da http://www.nodes-dat.com/:
# encryption = allow_incoming,enable_retry,prefer_plaintext
<pre>
encryption = allow_incoming,try_outgoing,enable_retry
$ cd  /home/mulo/.aMule
$ mv nodes.dat node.dat.bak
$ wget http://www.alldivx.de/nodes/nodes.dat
</pre>


# Enable DHT support for trackerless torrents or when all trackers are down.
====AmuleWEB====
# May be set to "disable" (completely disable DHT), "off" (do not start DHT),
''Amuleweb'' è l'interfaccia web che permette di gestire da remoto Amule. Seppure non sia comoda come la GUI grafica fornita da ''amule-utils-gui'', offre il grande vantaggio di essere accessibile a qualsiasi computer tramite web browser. Per attivarla è sufficiente modificare i parametri di ''~/.aMule/amule.conf'' sotto la stanza ''[WebServer]''. Per un esempio di configurazione guardate il file precedentemente postato sotto la configurazione di ''amuled''. Tra i parametri, molto intuitivi, si consiglia di prestare attenzione alla variabile ''Password'' che deve essere uguale a quella indicata nella stanza ''[ExternalConnect]'' al parametro ''ECPassword''. Invece sotto l'opzione ''PasswordLow='' è possibile indicare una password alternativa per chi utilizza la WebGUI. Infine, per il debug, si segnala che a volte potrebbe essere comodo avviare l'interfaccia web non tramite il demone e i parametri impostati nel file ''amule.conf'' ma tramite il comando <code>amuleweb</code>.
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
====AmuleGUI====
# The default is "off". For DHT to work, a session directory must be defined.
Per avere la comodissima ''gui'' remota (in tutto e per tutto uguale a quella di default del programma Amule) è necessario installare sulla macchina client dalla quale si vuole controllare il demone il seguente pacchetto:
#  
<pre># aptitude install amule-utils-gui</pre>
dht = auto
A questo punto, se non avete modificato le impostazioni di default (o utilizzate quelle da me riportate) potrete connettervi al demone Amule se, lanciato sul client il programma ''amulegui'', indicate l'IP (oppure l'URL) del server e la password corrispondente all'hash inserito nel file di configurazione di amule (ad esempio nel file di configurazione da me indicato come ''yourpassword''). Adesso avrete a disposizione la ben nota interfaccia grafica!
{{Box | Nota |per poter avviare ''amuled'' è necessario in ogni caso configurare l'accesso remoto. Se non abilitato, il demone non potrà essere avviato né potrà essere possibile utilizzare l'interfaccia web di amministrazione.}}
La sezione per configurare l'accesso remoto è presente in ''~/.aMule/amule.conf'' sotto la stanza ''[ExternalConnect]''.
===Specifiche===
* Porte da aprire (trattasi delle porte di default, è possibile cambiarle)
*# in ingresso:
*#* 4662 tpc: trasferimento client to client
*#* 4665 udp: per ricerche su server e ricerche globali
*#* 4672 udp: gestione code e protocollo eMule
*# in uscita:
*#* 4661 tcp: porta su cui i server ascoltano per connessioni
*#* 4662 tcp: trasferimento client to client
*#* 4665 udp: per ricerche su server e ricerche globali
*#* 4672 udp: gestione code e protocollo eMule
*Limiti banda
** download 75 KiB
** upload 10 KiB
* Connessione tramite webUI all'indirizzo ''<nowiki>http://<IpAddressMulo>:4711</nowiki>''
* Connessione tramite GUI alla porta 4712 (è sufficiente installare ''amule-utils-gui'' sul computer client)


# UDP port to use for DHT.  
[[Immagine:Amuleweb.jpg|center]]
#
dht_port = 6881


# Enable peer exchange (for torrents not marked private)
#
peer_exchange = yes


#
{{Box | Nota |La ricerca di un file con rtgui può richiedere un po' di tempo, motivo per cui si può presentare la necessità di dover aggiornare la pagina con i risultati della ricerca; a tal fine è presente sulla parte destra della pagina un apposito comando. È possibile inoltre impostare il refresh automatico delle pagine tramite le opzioni di rtgui.}}
# Do not modify the following parameters unless you know what you're doing.
#


# Hash read-ahead controls how many MB to request the kernel to read
===Conclusioni===
# ahead. If the value is too low the disk may not be fully utilized,
Anche in questo caso valgono le considerazioni sulla '''sicurezza''' già esposte per rtorrent, ovvero sarebbe opportuno proteggere l'accesso allo strumento di controllo di amule tramite password o mantenerlo accessibile soltanto all'interno della propria LAN. Inoltre, anche per amuled, è possibile controllare il demone tramite '''ssh''' utilizzando il comando <code>amulecmd</code>.
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10


# Interval between attempts to check the hash, in milliseconds.
==Condivisione file==
#hash_interval = 100
Oltre a scaricare il file è necessario rendere lo stesso comodamente accessibile da tutti i client della LAN. Tra le possibili soluzioni ho optato per [[samba]] vista la sua semplicità ed universalità con tutti gli OS. Procediamo installando il ''server samba'':
<pre>
# aptitude install samba
# mv /etc/samba/smb.conf  /etc/samba/smb.conf.bak
</pre>
Per configurare ''samba'' creiamo il file <code>/etc/samba/smb.conf</code>


# Number of attempts to check the hash while using the mincore status,
<pre>
# before forcing. Overworked systems might need lower values to get a
[global]
# decent hash checking rate.
server string = MULO
#hash_max_tries = 10
workgroup=workgroup
security=shareguest
account = nobody
map to guest = bad user
[mulo]
comment = Mulo
path = /home/mulo/torrent
read only = No
guest ok = Yes
guest only = yes
browseable = Yes
public = yes
writable = yes
</pre>
Tutti gli utenti della rete domestica potranno così accedere con diritti di lettura/scrittura, senza doversi autenticare; il server condivide l'intera ''home'' dell'utente mulo, nella quale si troveranno le ''directory'' con i file scaricati.


# This will set rtorrent/scgi to listen on localhost, port 5000
==Accesso remoto==
scgi_port = localhost:5000
Possiamo eseguire il ''login'' nel ''server'' da ogni computer appartenente alla rete domestica tramite ''ssh'':
# Force rtorrent to use the UTF-8 encoding. The XMLRPC standard requires UTF-8 replies
<pre>
encoding_list=UTF-8
# aptitude install ssh
</pre>
</pre>


La maggior parte di queste opzioni sono esplicite, altre un po' ermetiche; è possibile consultare il [http://libtorrent.rakshasa.no/rtorrent/rtorrent.1.html manuale] per avere maggiori informazioni.
Generiamo, quindi, la coppia di chiavi per l'utente mulo.
Inoltre a questa [http://libtorrent.rakshasa.no/wiki/RTorrentCommonTasks pagina] è possibile avere informazioni avanzate in merito ai possibili comandi utilizzabili.
<pre>
$ ssh-keygen -t rsa
$ cp /home/mulo/.ssh/id_rsa.pub /home/mulo/.ssh/autorized_key
</pre>
Useremo l'autenticazione ''Host-based'', per la quale non verrà richiesta una chiave.


=====rtgui=====
<pre>
Infine impostiamo alcuni parametri della webGui. Del file ''/etc/rtgui/config.php'' è sufficiente modificare i seguenti sulla base delle proprie impostazioni appena assegnate:
# echo "HostbasedAuthentication yes" >> /etc/ssh/ssh_config
<pre>$watchdir="/home/mulo/watch/";$downloaddir="/home/mulo/";</pre>
</pre>


===Script di avvio===
Ci connetteremo al ''server'' con:
''Rtorrent'' dovrà partire all'avvio del ''server''; dobbiamo, dunque, "demonizzarlo" creando il file <tt>/etc/init.d/rtorrent</tt>:<pre>#!/bin/sh### BEGIN INIT INFO# Provides:      rtorrent# Required-Start:  $network # Required-Stop:  $network # Default-Start:  2 3 4 5# Default-Stop:    0 1 6# Short-Description: Start rtorrent as a daemon### END INIT INFO################<Notes>################# This script depends on screen.# For the stop function to work, you must set an# explicit session directory using ABSOLUTE paths (no, ~ is not absolute) in your rtorrent.rc.# If you typically just start rtorrent with just "rtorrent" on the# command line, all you need to change is the "user" option.# Attach to the screen session as your user with # "screen -dr rtorrent". Change "rtorrent" with srnname option.# Licensed under the GPLv2 by lostnihilist: lostnihilist _at_ gmail _dot_ com#################</Notes>##########################################Start Configuration########################## You can specify your configuration in a different file # (so that it is saved with upgrades, saved in your home directory,# or whateve reason you want to)# by commenting out/deleting the configuration lines and placing them# in a text file (say /home/user/.rtorrent.init.conf) exactly as you would# have written them here (you can leave the comments if you desire# and then uncommenting the following line correcting the path/filename # for the one you used. note the space after the ".".# . /etc/rtorrent.init.conf#Do not put a space on either side of the equal signs e.g.# user = user # will not work# system user to run asuser="mulo"# the system group to run as, not implemented, see d_start for beginning implementation# group=`id -ng "$user"`# the full path to the filename where you store your rtorrent configurationconfig="/home/mulo/.rtorrent.rc"# set of options to run withoptions=""# default directory for screen, needs to be an absolute path#base="/home/${user}"base="/home/mulo"# name of screen sessionsrnname="rtorrent"# file to log to (makes for easier debugging if something goes wrong)logfile="/var/log/rtorrentInit.log"##########################END CONFIGURATION##########################PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbinDESC="rtorrent"NAME=rtorrentDAEMON=$NAMESCRIPTNAME=/etc/init.d/$NAMEcheckcnfg() {    exists=0    for i in `echo "$PATH" | tr ':' '\n'` ; do        if [ -f $i/$NAME ] ; then            exists=1            break        fi    done    if [ $exists -eq 0 ] ; then        echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2        exit 3    fi    if ! [ -r "${config}" ] ; then        echo "cannot find readable config ${config}. Check that it is there and permissions are appropriate." | tee -a "$logfile" >&2        exit 3    fi    session=`getsession "$config"`    if ! [ -d "${session}" ] ; then        echo "cannot find readable session directory ${session} from config ${config}. Check permissions." | tee -a "$logfile" >&2        exit 3    fi}d_start() {  [ -d "${base}" ] && cd "${base}"  stty stop undef && stty start undef  # robert 20080807 su -c "screen -ls | grep -sq "\.${srnname}:space:" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2  su -c "screen -ls | grep -sq "\.${srnname}:space:" " ${user} || su -c "screen -dm -S ${srnname} " ${user}# this works for the screen command, but starting rtorrent below adopts screen session gid# even if it is not the screen session we started (e.g. running under an undesirable gid#su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "sg \"$group\" -c \"screen -fn -dm -S ${srnname} 2>&1 1>/dev/null\"" ${user} | tee -a "$logfile" >&2# robert 20080807 su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2su -c "screen -S "${srnname}" -X screen rtorrent ${options}" ${user}}d_stop() {    session=`getsession "$config"`    if ! [ -s ${session}/rtorrent.lock ] ; then        return    fi    pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"`        pid2=`su $user -c 'screen -ls' | awk -F [.] '/[[:digit:]].rtorrent/{print($1)}' | sed "s/[^0-9]//g"`    if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process        kill -s INT ${pid}; kill -s KILL ${pid2}    fi        su $user -c 'screen -wipe'}getsession() {    session=`awk '/^[[:space:]]?session[[:space:]]?=[[:space:]]?/{print($3)}' "$config"`    echo $session}checkcnfgcase "$1" in  start)    echo -n "Starting $DESC: $NAME"    d_start    echo "."    ;;  stop)    echo -n "Stopping $DESC: $NAME"    d_stop    echo "."    ;;  restart|force-reload)    echo -n "Restarting $DESC: $NAME"    d_stop    sleep 1    d_start    echo "."    ;;  *)    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2    exit 1    ;;esacexit 0</pre>Quindi impostiamo il nostro servizio affinché parta all'avvio:<pre># chmod +x /etc/init.d/rtorrent# update-rc.d rtorrent defaults</pre>Per testare che tutto funzioni proviamo ad avviare il demone:<pre>/etc/init.d/rtorrent start</pre>e a collegarci all'interfaccia grafica all'URL ''http://<IpAddressMulo>/rtgui''
<pre>
===Specifiche===
$ ssh mulo@<IpAddressMulo>
*Porte da aprire ** 6881-6999 (tcp)** 6881 (udp)*Limiti banda** download    75 KiB** upload    5 KiB*Connessione tramite webUI all'indirizzo http://<IpAddressMulo>/rtgui[[Immagine:rtgui.jpg]]
password: YourPassword
===Conclusioni===
</pre>
Le maggiori implicazioni riguardo la '''sicurezza''' sono in merito all'accesso all'interfaccia di controllo. Si consiglia pertanto di rendere accessibile la stessa esclusivamente all'interno della propria lan o tutt'al più proteggere la pagina di controllo con una password. Inoltre non sarebbe male anche l'idea di utilizzare un buon filtro IP come blockcontrol.Infine si ricorda che per quanto concerne l'uso di rtorrent è pur sempre possibile, oltre alla comoda interfaccia web appena illustrata, utilizzare il programma via '''ssh''' per poi accedere alla sessione di screen dove è in esecuzione rtorrent.


==''Amule''==
Adesso occupiamoci di installare ''Amuled'' per accedere alle reti ''eD2k'' e ''Kademlia''. Utilizzando la versione daemon avremo il vantaggio di poter fare a meno dell'ambiente grafico sul server. Per quanto riguarda l'accesso sarà invece possibile adottare, come per rtorrent, una interfaccia web (si avrà quindi il vantaggio di un accesso universale senza l'installazione di software aggiuntivo, oppure utilizzare il programma amulegui, il quale permette di accedere ad una interfaccia avanzata e molto più funzionale. A voi la scelta!
===Installazione===
Installiamo il pacchetto ''amule-daemon'', il quale comprende oltre al demone anche il modulo ''Amuleweb'' che permette la connessione tramite ''webUI'' al server di ''Amule''.<pre># aptitude install amule-daemon</pre>
===Configurazione===
Dovremo configurare per prima cosa il demone di ''Amule'', quindi potremo scegliere se configurare anche la WebGUI (''AmuleWEB''), la GUI ''Amule-GUI'' o entrambi.
====Avvio autoconfigurazione====
Per configurare opportunamente il demone è possibile far sì che sia ''amule'' stesso a creare il file di configurazione di default nonché le cartelle necessarie. Infatti se avviamo da shell il demone, come da esempio:<pre>$ amuled</pre>verrà restituito errore ma sarà anche creata la ''directory'' <tt>.aMule/</tt> con tutti i vari file di configurazione che quindi potremo ora modificare a nostro gradimento.Tra questi saranno presenti anche le principali directory utilizzate da aMule per il download:* ~/.aMule/''tmp'': cartella dei file temporanei* ~/.aMule/''incoming'': cartella file scaricati e condivisi. Tutto quello che sta dentro questa cartella può essere scaricato dagli altri ''peer''.
====Personalizzazione delle opzioni di configurazione====
A questo punto possiamo ora aprire con un editor di testo il file <tt>.aMule/amule.conf</tt> e modificare il valore dei parametri di default (per approfondire si consiglia il wiki di [http://wiki.amule.org/index.php/Main_Page ''amuled''] oppure del wiki [http://wiki.debian.org/aMule di debian.org]; [http://www.linksysinfo.org/forums/showthread.php?p=367263 qui] invece per maggiori dettagli). Ovviamente per avere fin da subito una configurazione completa e funzionante senza scendere nei dettagli, potrete utilizzare il file come di seguito riportato (con i commenti ''###'' sono evidenziate lo opzioni modificate):<pre>[eMule]AppVersion=2.2.6Nick=http://www.aMule.orgQueueSizePref=50### limita il carico del server in uploadMaxUpload=15###limita il carico del server in downloadMaxDownload=75###quota banda che ciascun peer ciucciaSlotAllocation=5Port=4662UDPPort=4672UDPDisable=0Address=Autoconnect=1### limitare per ridurre carico al NAT del routerMaxSourcesPerFile=100### limitare per ridurre carico al NAT del routerMaxConnections=200MaxConnectionsPerFiveSeconds=20RemoveDeadServer=1DeadServerRetry=3ServerKeepAliveTimeout=0Reconnect=1Scoresystem=1### Serverlist=0 auto update the server list from the supplied urlServerlist=1### AddServerListFromServer=0AddServerListFromServer=1AddServerListFromClient=0SafeServerConnect=0AutoConnectStaticOnly=0UPnPEnabled=0UPnPTCPPort=50000SmartIdCheck=1ConnectToKad=1ConnectToED2K=1TempDir=/home/mulo/.aMule/TempIncomingDir=/home/mulo/.aMule/IncomingICH=1AICHTrust=0CheckDiskspace=1MinFreeDiskSpace=1AddNewFilesPaused=0PreviewPrio=0ManualHighPrio=0FullChunkTransfers=1StartNextFile=0StartNextFileSameCat=0FileBufferSizePref=16DAPPref=1UAPPref=1AllocateFullFile=0OSDirectory=/home/mulo/.aMule/OnlineSignature=0OnlineSignatureUpdate=5EnableTrayIcon=0MinToTray=0ConfirmExit=1StartupMinimized=03DDepth=10ToolTipDelay=1ShowOverhead=0ShowInfoOnCatTabs=1ShowRatesOnTitle=0VerticalToolbar=0ShowPartFileNumber=0VideoPlayer=VideoPreviewBackupped=1StatGraphsInterval=3statsInterval=30### limita banda occupata in downloadDownloadCapacity=100### limita banda occupata in uploadUploadCapacity=20StatsAverageMinutes=5VariousStatisticsMaxValue=100SeeShare=2FilterLanIPs=1ParanoidFiltering=1IPFilterAutoLoad=1IPFilterURL=FilterLevel=127IPFilterSystem=0FilterMessages=1FilterAllMessages=0MessagesFromFriendsOnly=0MessageFromValidSourcesOnly=1FilterWordMessages=0MessageFilter=FilterComments=0CommentFilter=ShareHiddenFiles=0AutoSortDownloads=0NewVersionCheck=1Language=SplitterbarPosition=75YourHostname=DateTimeFormat=%A, %x, %XAllcatType=0ShowAllNotCats=0SmartIdState=0DropSlowSources=0KadNodesUrl=http://emule-inside.net/nodes.datEd2kServersUrl=http://gruk.org/server.met.gz[Browser]DefaultBrowser=0OpenPageInTab=1CustomBrowserString=[Proxy]ProxyEnableProxy=0ProxyType=0ProxyName=ProxyPort=1080ProxyEnablePassword=0ProxyUser=ProxyPassword=[ExternalConnect]UseSrcSeeds=0### Abilita l'uso delle interfacce web e GUIAcceptExternalConnections=1ECAddress=ECPort=4712ECPassword=637b9adadf7acce5c70e5d327a725b13UPnPECEnabled=0ShowProgressBar=1ShowPercent=1UseSecIdent=1IpFilterClients=1IpFilterServers=1[WebServer]#Enabled=0Enabled=1Password=637b9adadf7acce5c70e5d327a725b13PasswordLow=Port=4711WebUPnPTCPPort=50001UPnPWebServerEnabled=0UseGzip=1UseLowRightsUser=0PageRefreshTime=120Template=[Razor_Preferences]FastED2KLinksHandler=1[SkinGUIOptions]UseSkinFiles=0Skin=[Statistics]MaxClientVersions=0TotalDownloadedBytes=0TotalUploadedBytes=34633[Obfuscation]IsClientCryptLayerSupported=1IsCryptLayerRequested=1IsClientCryptLayerRequired=0CryptoPaddingLenght=254CryptoKadUDPKey=271264387[UserEvents][UserEvents/DownloadCompleted]CoreEnabled=0CoreCommand=GUIEnabled=0GUICommand=[UserEvents/NewChatSession]CoreEnabled=0CoreCommand=GUIEnabled=0GUICommand=[UserEvents/OutOfDiskSpace]CoreEnabled=0CoreCommand=GUIEnabled=0GUICommand=[UserEvents/ErrorOnCompletion]CoreEnabled=0CoreCommand=GUIEnabled=0GUICommand=</pre>L'esempio appena proposto permette sia l'accesso tramite la webGUI, sia tramite la GUI grafica. L'abilitazione di questi è configurata tramite l'istanza ''[ExternalConnect]'' e ''[WebServer]''. La spiegazione in dettaglio è fornita nei paragrafi successivi.A questo punto non rimane che da modificare con un editor di testo il file ''/etc/default/amule-daemon'' definendo lo user con il quale verrà eseguito ''amuled'', ossia modificando il seguente parametro:<pre>AMULED_USER="mulo"</pre>
====Avvio di Amuled====
Ora sarà possibile avviare il demone:<pre>#/etc/init.d/amule-daemon start</pre>Si osserva che, per poter eseguire ''amuled'' (ossia il demone di amule), è necessario - come già modificato nel file di esempio precedente - abilitare la modalità di connessione remota del client. In dettaglio è necessario indicare al demone di accettare le connessioni esterne del client (''AcceptExternalConnections=1'') e di indicare l'hash della password di autenticazione alla connessione (''ECPassword=637b9adadf7acce5c70e5d327a725b13''). L'hash della password può essere ottenuta utilizzando il seguente comando (e inserendo la chiave desiderata al posto di ''yourpassword''):<pre>echo -n yourpassword | md5sum | cut -d ' ' -f 1637b9adadf7acce5c70e5d327a725b13</pre>
====Aggiungere liste server====
Aggiungiamo quindi le liste dei ''server eDonkey'':<pre>$ echo "http://www.gruk.org/server.met.gz" > ~/.aMule/addresses.dat$ echo "http://www.peerates.net/servers.php" >> ~/.aMule/addresses.dat</pre>Per la rete ''Kad'' scarichiamo una lista ulteriore prelevandola da http://www.nodes-dat.com/:<pre>$ cd  /home/mulo/.aMule$ mv nodes.dat node.dat.bak$ wget http://www.alldivx.de/nodes/nodes.dat</pre>
====AmuleWEB====
''Amuleweb'' è l'interfaccia web che permette di gestire da remoto Amule. Seppure non sia comoda come la GUI grafica fornita da ''amule-utils-gui'', offre il grande vantaggio di essere accessibile a qualsiasi computer tramite web browser. Per attivarla è sufficiente modificare i parametri di ''~/.aMule/amule.conf'' sotto la stanza ''[WebServer]''. Per un esempio di configurazione guardate il file precedentemente postato sotto la configurazione di ''amuled''.Tra i parametri, molto intuitivi, si consiglia di prestare attenzione alla variabile ''Password'' che deve essere uguale a quella indicata nella stanza ''[ExternalConnect]'' al parametro ''ECPassword''.Invece sotto l'opzione ''PasswordLow='' è possibile indicare una password alternativa per chi utilizza la WebGUI.Infine, per il debug, si segnala che a volte potrebbe essere comodo avviare l'interfaccia web non tramite il demone e i parametri impostati nel file ''amule.conf'' ma tramite il comando <tt>amuleweb</tt>.
====AmuleGUI====
Per avere la comodissima ''gui'' remota (in tutto e per tutto uguale a quella di default del programma Amule) è necessario installare sulla macchina client dalla quale si vuole controllare il demone il seguente pacchetto:<pre>aptitude install amule-utils-gui</pre>A questo punto, se non avete modificato le impostazioni di default (o utilizzate quelle da me riportate) potrete connettervi al demone Amule se, lanciato sul client il programma ''amulegui'', indicate l'IP (oppure l'URL) del server e la password corrispondente all'hash inserito nel file di configurazione di amule (ad esempio nel file di configurazione da me indicato come ''yourpassword'').Adesso avrete a disposizione la ben nota interfaccia grafica!{{Box | Nota |per poter avviare ''amuled'' è necessario in ogni caso configurare l'accesso remoto. Se non abilitato, il demone non potrà essere avviato né potrà essere possibile utilizzare l'interfaccia web di amministrazione.}}La sezione per configurare l'accesso remoto è presente in ''~/.aMule/amule.conf'' sotto la stanza ''[ExternalConnect]''.
===Specifiche===
* Porte da aprire (trattasi delle porte di default, è possibile cambiarle)*# in ingresso:*#* 4662 tpc: trasferimento client to client*#* 4665 udp: per ricerche su server e ricerche globali*#* 4672 udp: gestione code e protocollo eMule*# in uscita:*#* 4661 tcp: porta su cui i server ascoltano per connessioni*#* 4662 tcp: trasferimento client to client*#* 4665 udp: per ricerche su server e ricerche globali*#* 4672 udp: gestione code e protocollo eMule*Limiti banda** download 75 KiB ** upload 10 KiB* Connessione tramite webUI all'indirizzo http://<IpAddressMulo>:4711* Connessione tramite GUI alla porta 4712 (è sufficiente installare ''amule-utils-gui'' sul computer client)[[Immagine:Amuleweb.jpg]]{{Box | Nota |La ricerca di un file con rtgui può richiedere un po' di tempo, motivo per cui si può presentare la necessità di dover aggiornare la pagina con i risultati della ricerca; a tal fine è presente sulla parte destra della pagina un apposito comando. È possibile inoltre impostare il refresh automatico delle pagine tramite le opzioni di rtgui.}}
===Conclusioni===
Anche in questo caso valgono le considerazioni sulla '''sicurezza''' già esposte per rtorrent, ovvero sarebbe opportuno proteggere l'accesso allo strumento di controllo di amule tramite password o mantenerlo accessibile soltanto all'interno della propria LAN.Inoltre, anche per amuled, è possibile controllare il demone tramite '''ssh''' utilizzando il comando amulecmd.==Condivisione file==Oltre a scaricare il file è necessario rendere lo stesso comodamente accessibile da tutti i client della LAN. Tra le possibili soluzioni ho optato per samba vista la sua semplicità ed universalità con tutti gli OS.Procediamo installando il ''server samba'':<pre># aptitude install samba # mv /etc/samba/smb.conf  /etc/samba/smb.conf.bak</pre>Per configurare ''samba'' creiamo il file <tt>/etc/samba/smb.conf</tt><pre>[global]server string = MULOworkgroup=workgroupsecurity=shareguest account = nobodymap to guest = bad user[mulo]comment = Mulopath = /home/muloread only = Noguest ok = Yesguest only = yesbrowseable = Yespublic = yeswritable = yes</pre>Tutti gli utenti della rete domestica potranno così accedere con diritti di lettura/scrittura, senza doversi autenticare; il server condivide l'intera ''home'' dell'utente mulo, nella quale si troveranno le ''directory'' con i file scaricati.==Accesso remoto==Possiamo eseguire il ''login'' nel ''server'' da ogni computer appartenente alla rete domestica tramite ''ssh'':<pre># aptitude install ssh</pre>Generiamo, quindi, la coppia di chiavi per l'utente mulo.<pre>$ ssh-keygen -t rsa$ cp /home/mulo/.ssh/id_rsa.pub /home/mulo/.ssh/autorized_key</pre>Useremo l'autenticazione ''Host-based'', per la quale non verrà richiesta una chiave.<pre># echo "HostbasedAuthentication yes" >> /etc/ssh/ssh_config</pre>Ci connetteremo al ''server'' con:<pre>$ ssh mulo@<IpAddressMulo>password: YourPassword</pre>
==Conclusioni==
==Conclusioni==
Installiamo alcuni programmi d'utilità come ''iptraf'' e ''yacpi'' per il monitoraggio del traffico e delle temperature:<pre># aptitude install htop mc iptraf yacpi elinks deborphan</pre>Possiamo rimuovere software/librerie/documentazioni inutili:<pre># aptitude purge doc-linux-it doc-linux-it-text debian-reference-en \debian-reference-it maint-guide-it fortunes-it exim4 exim4-daemon-light postfix# apt-get autoremove --purge $(deborphan --libdevel)# aptitude update# aptitude -f install# aptitude clean</pre>Analogamente, in base alle nostre necessità, possiamo rimuovere altri programmi e documenti per ottenere un sistema che occupi il minimo spazio.'''Caratteristiche del server'''* Ram < 30 MB (carico minimo)* Dimensione ~ 550 MB
Installiamo alcuni programmi d'utilità come ''iptraf'' e ''yacpi'' per il monitoraggio del traffico e delle temperature:
<pre># aptitude install htop mc iptraf yacpi elinks deborphan</pre>
Possiamo rimuovere software/librerie/documentazioni inutili:
<pre>
# aptitude purge doc-linux-it doc-linux-it-text debian-reference-en debian-reference-it maint-guide-it fortunes-it exim4 exim4-daemon-light postfix
# apt-get autoremove --purge $(deborphan --libdevel)
# aptitude update
# aptitude -f install
# aptitude clean
</pre>
Analogamente, in base alle nostre necessità, possiamo rimuovere altri programmi e documenti per ottenere un sistema che occupi il minimo spazio.<br/>
'''Caratteristiche del server'''
* Ram < 30 MB (carico minimo)
* Dimensione ~ 550 MB
 
==Ringraziamenti==
==Ringraziamenti==
Il primo ringraziamento è da parte di Risca nei confronti di Fr4nc3sco per avere impostato questa guida con ricchi suggerimenti sul come procedere. Infatti da parte mia il lavoro è stato principalmente di revisione e solo in piccola parte di scrittura. Pertanto grazie ancora Fr4nc3sco!Infine un saluto a tutta la redazione dell'e-zine, alla comunità di Debianizzati.org e tutti i nostri lettori e, last but not least, a tutti i ragazzi dell'Accademia.[[Utente:Fr4nc3sco|Fr4nc3sco]] 07:39, 9 lug 2010 (CEST)<br />[[Utente:Risca|Risca]] 11:25, 3 mag 2011 (CEST)
Il primo ringraziamento è da parte di Risca nei confronti di Fr4nc3sco per avere impostato questa guida con ricchi suggerimenti sul come procedere. Infatti da parte mia il lavoro è stato principalmente di revisione e solo in piccola parte di scrittura. Pertanto grazie ancora Fr4nc3sco! Infine un saluto a tutta la redazione dell'e-zine, alla comunità di Debianizzati.org e tutti i nostri lettori e, last but not least, a tutti i ragazzi dell'Accademia.
 
{{Autori
|Autore = [[Utente:Fr4nc3sco|Fr4nc3sco]] 07:39, 9 lug 2010 (CEST)
|Estesa_da =
:[[Utente:Risca|Risca]] 11:25, 3 mag 2011 (CEST)
}}
 
[[Categoria:E-zine]][[Categoria: Peer to Peer]][[Categoria: File sharing]]

Versione attuale delle 11:45, 24 ott 2015

Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Banner e-zine.png
Questa guida è basata sui seguenti articoli presenti all'interno del numero 6 dell'e-zine di Debianizzati.org :

http://e-zine.debianizzati.org/stampa/numero_6.pdf


Introduzione alle reti P2P

Per questa parte rimando all'articolo originale presente sull'e-zine, non essendovi al momento necessità di aggiornamento.

Costruiamo il nostro server

Con la seguente guida descriviamo il modo con cui implementare un server domestico dedicato per il file sharing attraverso reti peer-to-peer. Useremo le seguenti applicazioni:

  • Amule per connettersi alle reti eDonkey e Kad.
  • Rtorrent per usare il protocollo BitTorrent.

La rete eDonkey è basata su una serie di server che permettono la localizzazione delle risorse all'interno della rete; è necessario tenere aggiornata la lista dei server poiché è possibile, in qualunque momento, aggiungere nuovi server o rimuoverne di esistenti. La rete Kad, invece, è priva di server, è una rete decentralizzata peer-to-peer di terza generazione che utilizza il protocollo Kademlia in cui ad ogni nodo è associato un ID univoco usato non solo per identificare il nodo stesso ma anche per memorizzare l'hash della risorsa che si vuol condividere; hash ed Id hanno la stessa lunghezza e lhash della risorsa condivisa viene memorizzata nei nodi con valore di Id più prossimi allhash stesso.

Il protocollo BitTorrent, spezzetta la risorsa in parti di dimensione fissa che sono scambiati attraverso la rete peer-to-peer per poi ricomporre il file a destinazione. La descrizione delle parti in cui è suddivisa la risorsa è memorizzata in un file indice che ha estensione .torrent, che contiene anche l'indirizzo URL di uno o più server traccia detti, tracker, che permettono di localizzare il file o le sue parti. I computer appartenenti alla rete domestica useranno dei client web (webUI) per comunicare col server; in questo modo non vi è la necessità di installare programmi aggiuntivi, ma sarà sufficiente il browser.

Amule è la soluzione più diffusa per connettersi alle reti eDonkey/Kad, mentre per quanto riguarda i torrent vi sono valide alternative come Deluge e Transmission, entrambi prevedono la modalità demone con la possibilità di connettersi tramite webUI.

Consideriamo una classica rete domestica costituita da un router DSL al quale si connettono i computer della casa, il nostro server risiederà su un PC dedicato. Si può usare un vecchio computer ormai in disuso. La potenza di calcolo non è importante per i nostri scopi; basta che abbia un hard disk capiente ed inoltre dovrà avere un indirizzo IP pubblico. Nel firewall presente sul router occorrerà aprire alcune porte associandole a tale indirizzo per avere un corretto funzionamento del nostro server di file sharing. Per quanto riguarda la sicurezza/riservatezza, trattandosi di una rete domestica non prendiamo nessuna misura di protezione; al di fuori di una rete domestica è necessario implementare tali meccanismi che non sono però trattati in questa guida.

Installazione di Debian

Per iniziare installiamo sul computer una Debian stable (Squeeze) tramite immagine business-card, reperibile dal sito http://www.debian.org/CD/netinst/ , e ci limitiamo ad installare solo il core del sistema.

Installazione serverp2p.jpg

Durante l'installazione si dovrà specificare un utente: negli esempi proposti è stato scelto mulo siccome mi sembrava essere il nome più adatto. Qualora ne scegliate uno diverso ricordatevi di modificare anche gli script mostrati di seguito. Ovviamente le password dello user e di root sono a vostra discrezione.

Rtorrent

Per poter scaricare o condividere file torrent installiamo il programma Rtorrent, mentre per permettere agli altri computer di connettersi al server tramite webUI installiamo anche il programma Rtgui. Tali software sono reperibili da http://libtorrent.rakshasa.no/http://code.google.com/p/rtgui/ ed essendo nei repository di Debian potremmo installarli sfruttando il solito Apt.

Installazione

# aptitude install rtorrent screen rtgui gawk

Siccome esistono più versioni del server Apache, ci verrà segnalato automaticamente da aptitude quale installare:

The following packages have unmet dependencies:
  apache2-mpm-worker: Conflicts: apache2-mpm which is a virtual package.
  apache2-mpm-prefork: Conflicts: apache2-mpm which is a virtual package.

The following actions will resolve these dependencies:
     Keep the following packages at their current version:
1)     apache2-mpm-worker [Not Installed]


Accept this solution? [Y/n/q/?] y

Diamo pure l'ok.

Configurazione

Directory

Creiamo le directory di lavoro:

$ mkdir -p /home/mulo/torrent/{session,incomplete,watch,complete}

Il loro utilizzo sarà il seguente

  • session: cartella contenente i torrent attualmente in download/upload.
  • watch: cartella dove inserire i file torrent (.torrent) che si desidera scaricare; tale operazione potrà essere gestita direttamente da Rtgui.
  • incomplete: cartella dei file incompleti.
  • complete: cartella dei file scaricati.

File di config

Configuriamo ora Rtorrent creando il file /home/mulo/.rtorrent.rc come il seguente. Ricordate sempre che per avere consigli sul come crearlo a partire da zero potete utilizzare il comodo esempio presente nella documentazione in /usr/share/doc/rtorrent/examples/rtorrent.rc sul quale ho basato la mia configurazione (alias cp).

.rtorrent.rc

(modifiche principali in rosso)

# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.

# Maximum and minimum number of peers to connect to per torrent.
min_peers = 40
max_peers = 100

# Same as above but for seeding completed torrents (-1 = same as downloading)
min_peers_seed = 5
max_peers_seed = 10

# Maximum number of simultanious uploads per torrent.
max_uploads = 5

# Global upload and download rate in KiB. "0" for unlimited.
download_rate = 75
upload_rate = 5

# Default directory to save the downloaded torrents.
#directory = ./complete
directory = /home/mulo/torrent/

# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = /home/mulo/torrent/session

# Watch a directory for new torrents, and stop those that have been
# deleted.
schedule = watch_directory,10,10,load_start=/home/mulo/watch/*.torrent
schedule = tied_directory,10,10,start_tied=
schedule = untied_directory,10,10,close_untied=
# */
# Close torrents when diskspace is low.
#schedule = low_diskspace,5,60,close_low_diskspace=100M

# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
schedule = ratio,60,60,"stop_on_ratio=250,250M,2500"
# Move completed torrents
system.method.set_key = event.download.finished,move_complete,"execute=mv,-u,$d.get_base_path=,/home/mulo/complete;d.set_directory=/home/mulo/complete"

# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no

# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no

# Port range to use for listening.
port_range = 6881-6999

# Start opening ports at a random position within the port range.
#port_random = no

# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
#check_hash = no
check_hash = yes

# Set whetever the client should try to connect to UDP trackers.
use_udp_trackers = yes

# Alternative calls to bind and ip that should handle dynamic ip's.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa

# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
# encryption = allow_incoming,enable_retry,prefer_plaintext
encryption = allow_incoming,try_outgoing,enable_retry

# Enable DHT support for trackerless torrents or when all trackers are down.
# May be set to "disable" (completely disable DHT), "off" (do not start DHT),
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
# The default is "off". For DHT to work, a session directory must be defined.
# 
dht = auto

# UDP port to use for DHT. 
# 
dht_port = 6881

# Enable peer exchange (for torrents not marked private)
#
peer_exchange = yes

#
# Do not modify the following parameters unless you know what you're doing.
#

# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10

# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100

# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10

# This will set rtorrent/scgi to listen on localhost, port 5000
scgi_port = localhost:5000
# Force rtorrent to use the UTF-8 encoding. The XMLRPC standard requires UTF-8 replies
encoding_list=UTF-8


La maggior parte di queste opzioni sono esplicite, altre un po' ermetiche; è possibile consultare il manuale per avere maggiori informazioni.
Inoltre a questa pagina è possibile avere informazioni avanzate in merito ai possibili comandi utilizzabili.

rtgui

Infine impostiamo alcuni parametri della webGui. Del file /etc/rtgui/config.php è sufficiente modificare i seguenti sulla base delle proprie impostazioni appena assegnate:

$watchdir="/home/mulo/torrent/watch/";
$downloaddir="/home/mulo/torrent";

Script di avvio

Rtorrent dovrà partire all'avvio del server; dobbiamo, dunque, "demonizzarlo" creando il file /etc/init.d/rtorrent:

#!/bin/sh
### BEGIN INIT INFO
# Provides:       rtorrent
# Required-Start:  $network 
# Required-Stop:   $network 
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: Start rtorrent as a daemon
### END INIT INFO

#############
###<Notes>###
#############
# This script depends on screen.
# For the stop function to work, you must set an
# explicit session directory using ABSOLUTE paths (no, ~ is not absolute) in your rtorrent.rc.
# If you typically just start rtorrent with just "rtorrent" on the
# command line, all you need to change is the "user" option.
# Attach to the screen session as your user with 
# "screen -dr rtorrent". Change "rtorrent" with srnname option.
# Licensed under the GPLv2 by lostnihilist: lostnihilist _at_ gmail _dot_ com
##############
###</Notes>###
##############
#######################
##Start Configuration##
#######################
# You can specify your configuration in a different file 
# (so that it is saved with upgrades, saved in your home directory,
# or whateve reason you want to)
# by commenting out/deleting the configuration lines and placing them
# in a text file (say /home/user/.rtorrent.init.conf) exactly as you would
# have written them here (you can leave the comments if you desire
# and then uncommenting the following line correcting the path/filename 
# for the one you used. note the space after the ".".
# . /etc/rtorrent.init.conf
#Do not put a space on either side of the equal signs e.g.
# user = user 
# will not work
# system user to run as
user="mulo"
# the system group to run as, not implemented, see d_start for beginning implementation
# group=`id -ng "$user"`
# the full path to the filename where you store your rtorrent configuration
config="/home/mulo/.rtorrent.rc"
# set of options to run with
options=""
# default directory for screen, needs to be an absolute path
#base="/home/${user}"
base="/home/mulo"
# name of screen session
srnname="rtorrent"
# file to log to (makes for easier debugging if something goes wrong)
logfile="/var/log/rtorrentInit.log"
#######################
###END CONFIGURATION###
#######################

PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin
DESC="rtorrent"
NAME=rtorrent
DAEMON=$NAME
SCRIPTNAME=/etc/init.d/$NAME
checkcnfg() {
	exists=0
	for i in `echo "$PATH" | tr ':' '\n'` ; do
		if [ -f $i/$NAME ] ; then
			exists=1
			break
		fi
	done
	if [ $exists -eq 0 ] ; then
		echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2
		exit 3
	fi
	if ! [ -r "${config}" ] ; then 
		echo "cannot find readable config ${config}. Check that it is there and permissions are appropriate." | tee -a "$logfile" >&2
		exit 3 
	fi 
	session=`getsession "$config"` 
	if ! [ -d "${session}" ] ; then
		echo "cannot find readable session directory ${session} from config ${config}. Check permissions." | tee -a "$logfile" >&2
		exit 3
	fi
}
d_start() {
  [ -d "${base}" ] && cd "${base}"
  stty stop undef && stty start undef
  # robert 20080807 su -c "screen -ls | grep -sq "\.${srnname}:space:" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
  su -c "screen -ls | grep -sq "\.${srnname}:space:" " ${user} || su -c "screen -dm -S ${srnname} " ${user}
# this works for the screen command, but starting rtorrent below adopts screen session gid
# even if it is not the screen session we started (e.g. running under an undesirable gid
#su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "sg \"$group\" -c \"screen -fn -dm -S ${srnname} 2>&1 1>/dev/null\"" ${user} | tee -a "$logfile" >&2
# robert 20080807 su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
su -c "screen -S "${srnname}" -X screen rtorrent ${options}" ${user}
}
d_stop() {
	session=`getsession "$config"`
	if ! [ -s ${session}/rtorrent.lock ] ; then
		return
	fi
	pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"`
        pid2=`su $user -c 'screen -ls' | awk -F [.] '/[[:digit:]].rtorrent/{print($1)}' | sed "s/[^0-9]//g"`
	if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process
		kill -s INT ${pid}; kill -s KILL ${pid2}
	fi
        su $user -c 'screen -wipe'
}
getsession() { 
	session=`awk '/^[[:space:]]?session[[:space:]]?=[[:space:]]?/{print($3)}' "$config"`
	echo $session
}
checkcnfg
case "$1" in
  start)
	echo -n "Starting $DESC: $NAME"
	d_start
	echo "."
	;;
  stop)
	echo -n "Stopping $DESC: $NAME"
	d_stop
	echo "."
	;;
  restart|force-reload)
	echo -n "Restarting $DESC: $NAME"
	d_stop
	sleep 1
	d_start
	echo "."
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac
exit 0

Quindi impostiamo il nostro servizio affinché parta all'avvio:

# chmod +x /etc/init.d/rtorrent
# update-rc.d rtorrent defaults

Per testare che tutto funzioni proviamo ad avviare il demone:

# /etc/init.d/rtorrent start

e a collegarci all'interfaccia grafica all'URL http://<IpAddressMulo>/rtgui

Specifiche

  • Porte da aprire
    • 6881-6999 (TCP)
    • 6881 (UDP)
  • Limiti banda
    • download 75 KiB
    • upload 5 KiB
  • Connessione tramite webUI all'indirizzo http://<IpAddressMulo>/rtgui
Rtgui.jpg

Conclusioni

Le maggiori implicazioni riguardo alla sicurezza sono in merito all'accesso all'interfaccia di controllo. Si consiglia pertanto di rendere accessibile la stessa esclusivamente all'interno della propria LAN o tutt'al più proteggere la pagina di controllo con una password. Inoltre non sarebbe male anche l'idea di utilizzare un buon filtro IP come blockcontrol. Infine si ricorda che per quanto concerne l'uso di rtorrent è pur sempre possibile, oltre alla comoda interfaccia web appena illustrata, utilizzare il programma via ssh per poi accedere alla sessione di screen dove è in esecuzione rtorrent.

Amule

Adesso occupiamoci di installare Amuled per accedere alle reti eD2k e Kademlia. Utilizzando la versione daemon avremo il vantaggio di poter fare a meno dell'ambiente grafico sul server. Per quanto riguarda l'accesso sarà invece possibile adottare, come per rtorrent, una interfaccia web (si avrà quindi il vantaggio di un accesso universale senza l'installazione di software aggiuntivo, oppure utilizzare il programma amulegui, il quale permette di accedere ad una interfaccia avanzata e molto più funzionale. A voi la scelta!

Installazione

Installiamo il pacchetto amule-daemon, il quale comprende oltre al demone anche il modulo Amuleweb che permette la connessione tramite webUI al server di Amule:

# aptitude install amule-daemon

Configurazione

Dovremo configurare per prima cosa il demone di Amule, quindi potremo scegliere se configurare anche la WebGUI (AmuleWEB), la GUI Amule-GUI o entrambi.

Avvio autoconfigurazione

Per configurare opportunamente il demone è possibile far sì che sia amule stesso a creare il file di configurazione di default nonché le cartelle necessarie. Infatti se avviamo da shell il demone, come da esempio:

$ amuled

verrà restituito errore ma sarà anche creata la directory .aMule/ con tutti i vari file di configurazione che quindi potremo ora modificare a nostro gradimento.Tra questi saranno presenti anche le principali directory utilizzate da aMule per il download:

  • ~/.aMule/tmp: cartella dei file temporanei
  • ~/.aMule/incoming: cartella file scaricati e condivisi. Tutto quello che sta dentro questa cartella può essere scaricato dagli altri peer.

Personalizzazione delle opzioni di configurazione

A questo punto possiamo ora aprire con un editor di testo il file .aMule/amule.conf e modificare il valore dei parametri di default (per approfondire si consiglia il wiki di amuled oppure del wiki di debian.org; qui invece per maggiori dettagli). Ovviamente per avere fin da subito una configurazione completa e funzionante senza scendere nei dettagli, potrete utilizzare il file come di seguito riportato (con i commenti ### sono evidenziate lo opzioni modificate):

[eMule]
AppVersion=2.2.6
Nick=http://www.aMule.org
QueueSizePref=50
### limita il carico del server in upload
MaxUpload=15
###limita il carico del server in download
MaxDownload=75
###quota banda che ciascun peer ciuccia
SlotAllocation=5
Port=4662
UDPPort=4672
UDPDisable=0
Address=
Autoconnect=1
### limitare per ridurre carico al NAT del router
MaxSourcesPerFile=100
### limitare per ridurre carico al NAT del router
MaxConnections=200
MaxConnectionsPerFiveSeconds=20
RemoveDeadServer=1
DeadServerRetry=3
ServerKeepAliveTimeout=0
Reconnect=1
Scoresystem=1
### Serverlist=0 auto update the server list from the supplied url
Serverlist=1
### AddServerListFromServer=0
AddServerListFromServer=1
AddServerListFromClient=0
SafeServerConnect=0
AutoConnectStaticOnly=0
UPnPEnabled=0
UPnPTCPPort=50000
SmartIdCheck=1
ConnectToKad=1
ConnectToED2K=1
TempDir=/home/mulo/.aMule/Temp
IncomingDir=/home/mulo/.aMule/Incoming
ICH=1
AICHTrust=0
CheckDiskspace=1
MinFreeDiskSpace=1
AddNewFilesPaused=0
PreviewPrio=0
ManualHighPrio=0
FullChunkTransfers=1
StartNextFile=0
StartNextFileSameCat=0
FileBufferSizePref=16
DAPPref=1
UAPPref=1
AllocateFullFile=0
OSDirectory=/home/mulo/.aMule/
OnlineSignature=0
OnlineSignatureUpdate=5
EnableTrayIcon=0
MinToTray=0
ConfirmExit=1
StartupMinimized=0
3DDepth=10
ToolTipDelay=1
ShowOverhead=0
ShowInfoOnCatTabs=1
ShowRatesOnTitle=0
VerticalToolbar=0
ShowPartFileNumber=0
VideoPlayer=
VideoPreviewBackupped=1
StatGraphsInterval=3
statsInterval=30
### limita banda occupata in download
DownloadCapacity=100
### limita banda occupata in upload
UploadCapacity=20
StatsAverageMinutes=5
VariousStatisticsMaxValue=100
SeeShare=2
FilterLanIPs=1
ParanoidFiltering=1
IPFilterAutoLoad=1
IPFilterURL=
FilterLevel=127
IPFilterSystem=0
FilterMessages=1
FilterAllMessages=0
MessagesFromFriendsOnly=0
MessageFromValidSourcesOnly=1
FilterWordMessages=0
MessageFilter=
FilterComments=0
CommentFilter=
ShareHiddenFiles=0
AutoSortDownloads=0
NewVersionCheck=1
Language=
SplitterbarPosition=75
YourHostname=
DateTimeFormat=%A, %x, %X
AllcatType=0
ShowAllNotCats=0
SmartIdState=0
DropSlowSources=0
KadNodesUrl=http://emule-inside.net/nodes.dat
Ed2kServersUrl=http://gruk.org/server.met.gz
[Browser]
DefaultBrowser=0
OpenPageInTab=1
CustomBrowserString=
[Proxy]
ProxyEnableProxy=0
ProxyType=0
ProxyName=
ProxyPort=1080
ProxyEnablePassword=0
ProxyUser=
ProxyPassword=
[ExternalConnect]
UseSrcSeeds=0
### Abilita l'uso delle interfacce web e GUI
AcceptExternalConnections=1
ECAddress=
ECPort=4712
ECPassword=637b9adadf7acce5c70e5d327a725b13
UPnPECEnabled=0
ShowProgressBar=1
ShowPercent=1
UseSecIdent=1
IpFilterClients=1
IpFilterServers=1
[WebServer]
#Enabled=0
Enabled=1
Password=637b9adadf7acce5c70e5d327a725b13
PasswordLow=
Port=4711
WebUPnPTCPPort=50001
UPnPWebServerEnabled=0
UseGzip=1
UseLowRightsUser=0
PageRefreshTime=120
Template=
[Razor_Preferences]
FastED2KLinksHandler=1
[SkinGUIOptions]
UseSkinFiles=0
Skin=
[Statistics]
MaxClientVersions=0
TotalDownloadedBytes=0
TotalUploadedBytes=34633
[Obfuscation]
IsClientCryptLayerSupported=1
IsCryptLayerRequested=1
IsClientCryptLayerRequired=0
CryptoPaddingLenght=254
CryptoKadUDPKey=271264387
[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=

L'esempio appena proposto permette sia l'accesso tramite la webGUI, sia tramite la GUI grafica. L'abilitazione di questi è configurata tramite l'istanza [ExternalConnect] e [WebServer]. La spiegazione in dettaglio è fornita nei paragrafi successivi. A questo punto non rimane che modificare con un editor di testo il file /etc/default/amule-daemon definendo lo user con il quale verrà eseguito amuled, ossia modificando il seguente parametro:

AMULED_USER="mulo"

Avvio di Amuled

Ora sarà possibile avviare il demone:

# /etc/init.d/amule-daemon start

Si osserva che, per poter eseguire amuled (ossia il demone di amule), è necessario - come già modificato nel file di esempio precedente - abilitare la modalità di connessione remota del client. In dettaglio è necessario indicare al demone di accettare le connessioni esterne del client (AcceptExternalConnections=1) e di indicare l'hash della password di autenticazione alla connessione (ECPassword=637b9adadf7acce5c70e5d327a725b13). L'hash della password può essere ottenuta utilizzando il seguente comando (e inserendo la chiave desiderata al posto di yourpassword):

echo -n yourpassword | md5sum | cut -d ' ' -f 1637b9adadf7acce5c70e5d327a725b13

Aggiungere liste server

Aggiungiamo quindi le liste dei server eDonkey:

$ echo "http://www.gruk.org/server.met.gz" > ~/.aMule/addresses.dat
$ echo "http://www.peerates.net/servers.php" >> ~/.aMule/addresses.dat

Per la rete Kad scarichiamo una lista ulteriore prelevandola da http://www.nodes-dat.com/:

$ cd  /home/mulo/.aMule
$ mv nodes.dat node.dat.bak
$ wget http://www.alldivx.de/nodes/nodes.dat

AmuleWEB

Amuleweb è l'interfaccia web che permette di gestire da remoto Amule. Seppure non sia comoda come la GUI grafica fornita da amule-utils-gui, offre il grande vantaggio di essere accessibile a qualsiasi computer tramite web browser. Per attivarla è sufficiente modificare i parametri di ~/.aMule/amule.conf sotto la stanza [WebServer]. Per un esempio di configurazione guardate il file precedentemente postato sotto la configurazione di amuled. Tra i parametri, molto intuitivi, si consiglia di prestare attenzione alla variabile Password che deve essere uguale a quella indicata nella stanza [ExternalConnect] al parametro ECPassword. Invece sotto l'opzione PasswordLow= è possibile indicare una password alternativa per chi utilizza la WebGUI. Infine, per il debug, si segnala che a volte potrebbe essere comodo avviare l'interfaccia web non tramite il demone e i parametri impostati nel file amule.conf ma tramite il comando amuleweb.

AmuleGUI

Per avere la comodissima gui remota (in tutto e per tutto uguale a quella di default del programma Amule) è necessario installare sulla macchina client dalla quale si vuole controllare il demone il seguente pacchetto:

# aptitude install amule-utils-gui

A questo punto, se non avete modificato le impostazioni di default (o utilizzate quelle da me riportate) potrete connettervi al demone Amule se, lanciato sul client il programma amulegui, indicate l'IP (oppure l'URL) del server e la password corrispondente all'hash inserito nel file di configurazione di amule (ad esempio nel file di configurazione da me indicato come yourpassword). Adesso avrete a disposizione la ben nota interfaccia grafica!

Info.png Nota
per poter avviare amuled è necessario in ogni caso configurare l'accesso remoto. Se non abilitato, il demone non potrà essere avviato né potrà essere possibile utilizzare l'interfaccia web di amministrazione.

La sezione per configurare l'accesso remoto è presente in ~/.aMule/amule.conf sotto la stanza [ExternalConnect].

Specifiche

  • Porte da aprire (trattasi delle porte di default, è possibile cambiarle)
    1. in ingresso:
      • 4662 tpc: trasferimento client to client
      • 4665 udp: per ricerche su server e ricerche globali
      • 4672 udp: gestione code e protocollo eMule
    2. in uscita:
      • 4661 tcp: porta su cui i server ascoltano per connessioni
      • 4662 tcp: trasferimento client to client
      • 4665 udp: per ricerche su server e ricerche globali
      • 4672 udp: gestione code e protocollo eMule
  • Limiti banda
    • download 75 KiB
    • upload 10 KiB
  • Connessione tramite webUI all'indirizzo http://<IpAddressMulo>:4711
  • Connessione tramite GUI alla porta 4712 (è sufficiente installare amule-utils-gui sul computer client)
Amuleweb.jpg


Info.png Nota
La ricerca di un file con rtgui può richiedere un po' di tempo, motivo per cui si può presentare la necessità di dover aggiornare la pagina con i risultati della ricerca; a tal fine è presente sulla parte destra della pagina un apposito comando. È possibile inoltre impostare il refresh automatico delle pagine tramite le opzioni di rtgui.


Conclusioni

Anche in questo caso valgono le considerazioni sulla sicurezza già esposte per rtorrent, ovvero sarebbe opportuno proteggere l'accesso allo strumento di controllo di amule tramite password o mantenerlo accessibile soltanto all'interno della propria LAN. Inoltre, anche per amuled, è possibile controllare il demone tramite ssh utilizzando il comando amulecmd.

Condivisione file

Oltre a scaricare il file è necessario rendere lo stesso comodamente accessibile da tutti i client della LAN. Tra le possibili soluzioni ho optato per samba vista la sua semplicità ed universalità con tutti gli OS. Procediamo installando il server samba:

# aptitude install samba
# mv /etc/samba/smb.conf  /etc/samba/smb.conf.bak

Per configurare samba creiamo il file /etc/samba/smb.conf

[global]
server string = MULO
workgroup=workgroup
security=shareguest
account = nobody
map to guest = bad user
[mulo]
comment = Mulo
path = /home/mulo/torrent
read only = No
guest ok = Yes
guest only = yes
browseable = Yes
public = yes
writable = yes

Tutti gli utenti della rete domestica potranno così accedere con diritti di lettura/scrittura, senza doversi autenticare; il server condivide l'intera home dell'utente mulo, nella quale si troveranno le directory con i file scaricati.

Accesso remoto

Possiamo eseguire il login nel server da ogni computer appartenente alla rete domestica tramite ssh:

# aptitude install ssh

Generiamo, quindi, la coppia di chiavi per l'utente mulo.

$ ssh-keygen -t rsa
$ cp /home/mulo/.ssh/id_rsa.pub /home/mulo/.ssh/autorized_key

Useremo l'autenticazione Host-based, per la quale non verrà richiesta una chiave.

# echo "HostbasedAuthentication yes" >> /etc/ssh/ssh_config

Ci connetteremo al server con:

$ ssh mulo@<IpAddressMulo>
password: YourPassword

Conclusioni

Installiamo alcuni programmi d'utilità come iptraf e yacpi per il monitoraggio del traffico e delle temperature:

# aptitude install htop mc iptraf yacpi elinks deborphan

Possiamo rimuovere software/librerie/documentazioni inutili:

# aptitude purge doc-linux-it doc-linux-it-text debian-reference-en debian-reference-it maint-guide-it fortunes-it exim4 exim4-daemon-light postfix
# apt-get autoremove --purge $(deborphan --libdevel)
# aptitude update
# aptitude -f install
# aptitude clean

Analogamente, in base alle nostre necessità, possiamo rimuovere altri programmi e documenti per ottenere un sistema che occupi il minimo spazio.
Caratteristiche del server

  • Ram < 30 MB (carico minimo)
  • Dimensione ~ 550 MB

Ringraziamenti

Il primo ringraziamento è da parte di Risca nei confronti di Fr4nc3sco per avere impostato questa guida con ricchi suggerimenti sul come procedere. Infatti da parte mia il lavoro è stato principalmente di revisione e solo in piccola parte di scrittura. Pertanto grazie ancora Fr4nc3sco! Infine un saluto a tutta la redazione dell'e-zine, alla comunità di Debianizzati.org e tutti i nostri lettori e, last but not least, a tutti i ragazzi dell'Accademia.




Guida scritta da: Fr4nc3sco 07:39, 9 lug 2010 (CEST) Swirl-auth20.png Debianized 20%
Estesa da:
Risca 11:25, 3 mag 2011 (CEST)
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized