Server per il P2P con Debian: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Riga 56: Riga 56:
=====.rtorrent.rc=====
=====.rtorrent.rc=====
(modifiche principali in <font style="color:red;">rosso</font>)
(modifiche principali in <font style="color:red;">rosso</font>)
<pre style="overflow:auto;max-height:400px">
<div style="overflow:auto;max-height:400px">
# This is an example resource file for rTorrent. Copy to
&&#35; This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
&&#35; ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.
&&#35; uncomment the options you wish to enable.


# Maximum and minimum number of peers to connect to per torrent.
&&#35; Maximum and minimum number of peers to connect to per torrent.
<font style="color:red;">min_peers = 40
<font style="color:red;">min_peers = 40
max_peers = 100</font>
max_peers = 100</font>


# Same as above but for seeding completed torrents (-1 = same as downloading)
&&#35; Same as above but for seeding completed torrents (-1 = same as downloading)
<font style="color:red;">min_peers_seed = 5
<font style="color:red;">min_peers_seed = 5
max_peers_seed = 10</font>
max_peers_seed = 10</font>


# Maximum number of simultanious uploads per torrent.
&&#35; Maximum number of simultanious uploads per torrent.
<font style="color:red;">max_uploads = 5</font>
<font style="color:red;">max_uploads = 5</font>


# Global upload and download rate in KiB. "0" for unlimited.
&&#35; Global upload and download rate in KiB. "0" for unlimited.
<font style="color:red;">download_rate = 75
<font style="color:red;">download_rate = 75
upload_rate = 5</font>
upload_rate = 5</font>


# Default directory to save the downloaded torrents.
&&#35; Default directory to save the downloaded torrents.
#directory = ./complete
&&#35;directory = ./complete
<font style="color:red;">directory = /home/mulo/torrent/complete</font>
<font style="color:red;">directory = /home/mulo/torrent/complete</font>


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


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


# Stop torrents when reaching upload ratio in percent,
&&#35; Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
&&#35; when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
&&#35; reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
&&#35; 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"
schedule = ratio,60,60,"stop_on_ratio=250,250M,2500"
# Move completed torrents
&&#35; 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"
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.
&&#35; The ip address reported to the tracker.
#ip = 127.0.0.1
&&#35;ip = 127.0.0.1
#ip = rakshasa.no
&&#35;ip = rakshasa.no


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


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


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


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


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


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


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


# Enable DHT support for trackerless torrents or when all trackers are down.
&&#35; 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),
&&#35; 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).
&&#35; "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.
&&#35; The default is "off". For DHT to work, a session directory must be defined.
#  
&&#35;
dht = auto
dht = auto


# UDP port to use for DHT.  
&&#35; UDP port to use for DHT.  
#  
&&#35;
dht_port = 6881
dht_port = 6881


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


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


# Hash read-ahead controls how many MB to request the kernel to read
&&#35; 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,
&&#35; 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
&&#35; while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
&&#35; pages in memory thus end up trashing.
#hash_read_ahead = 10
&&#35;hash_read_ahead = 10


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


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


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


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.
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.

Versione delle 21:23, 19 set 2012


Server per il P2P in Debian
Banner e-zine.png
La prima e-zine italiana sul mondo Debian

Una rapida guida sul come configurare un server per gestire i protocolli emule e torrent da remoto. Ottima soluzione per distribuire e scaricare file.

Debian offre già le migliori soluzioni software per il P2P, basta solo un po' di opportuna configurazione per avere un serverino di tutto rispetto.

Tratto dalla e-zine di Debianizzati.org

Link agli articoli:

numero 6

Introduzione alle reti P2P

Per questa parte rimando all'articolo originale, 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 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.

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/ci limitiamo ad installare solo il core del sistema.File:Di.jpgDurante 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/complete

&# 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/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/watch/";$downloaddir="/home/mulo/";

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 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

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>/rtguiRtgui.jpg

Conclusioni

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.

# 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.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=

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:

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)*# 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)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 = MULOworkgroup=workgroupsecurity=shareguest account = nobodymap to guest = bad user[mulo]comment = Mulopath = /home/muloread only = Noguest ok = Yesguest only = yesbrowseable = Yespublic = yeswritable = 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.Fr4nc3sco 07:39, 9 lug 2010 (CEST)
Risca 11:25, 3 mag 2011 (CEST)