In questa pagina descriverò come installare un server BitTorrent su un router (Asus RT-AC56U)
- useremo alcuni pacchetti Entware, pertanto
fare riferimento a questa pagina su come installare Entware su un router.
Useremo il server (daemon) "Transmission",
uno dei più usati server BitTorrent degli ambienti Linux. Per installare questo
server, abbiamo bisogno di installare diversi pacchetti Entware (transmission-web, transmission-daemon-openssl, transmission-remote-openssl)
tramite la seguente istruzione:
opkg install transmission-web transmission-daemon-openssl transmission-remote-openssl Installing transmission-web (2.93-4) to root... Downloading http://bin.entware.net/armv7sf-k2.6/transmission-web_2.93-4_armv7-2.6.ipk Installing transmission-daemon-openssl (2.93-4) to root... Downloading http://bin.entware.net/armv7sf-k2.6/transmission-daemon-openssl_2.93-4_armv7-2.6.ipk Installing libcurl (7.58.0-1) to root... Downloading http://bin.entware.net/armv7sf-k2.6/libcurl_7.58.0-1_armv7-2.6.ipk Installing libevent2 (2.0.22-1) to root... Downloading http://bin.entware.net/armv7sf-k2.6/libevent2_2.0.22-1_armv7-2.6.ipk Installing libminiupnpc (2.0.20170509-1) to root... Downloading http://bin.entware.net/armv7sf-k2.6/libminiupnpc_2.0.20170509-1_armv7-2.6.ipk Installing transmission-remote-openssl (2.93-4) to root... Downloading http://bin.entware.net/armv7sf-k2.6/transmission-remote-openssl_2.93-4_armv7-2.6.ipk Configuring libcurl. Configuring libevent2. Configuring libminiupnpc. Configuring transmission-remote-openssl. Configuring transmission-daemon-openssl. Configuring transmission-web.
Il pacchetto "transmission-web" contiene le risorse dell'interfaccia web del Transmission, il pacchetto "transmission-daemon-openssl" contiene il daemon, mentre il pacchetto "transmission-remote-openssl" è l'interfaccia remota CLI ("Command Line Interface", ovvero "Interfaccia a linea di comando") del Transmission. Diamo uno sguardo al pacchetto "transmission-daemon-openssl", esso contiene i seguenti file:
opkg files transmission-daemon-openssl | sort /opt/bin/transmission-daemon /opt/etc/init.d/S88transmission /opt/etc/sysctl.d/20-transmission.conf /opt/etc/transmission/settings.json
Il file "/opt/bin/transmission-daemon" è il daemon,
il file "/opt/etc/init.d/S88transmission"
contiene lo script per avviare e fermare il daemon Transmission, il file "/opt/etc/sysctl.d/20-transmission.conf"
è riservato al Transmission, mentre il file "/opt/etc/transmission/settings.json"
contiene il file di configurazione del Transmission.
Abbiamo bisogno di impostare il file di configurazione del Transmission (vedere
la prossima sezione su questa pagina), in seguito possiamo avviare il daemon del Transmission
usando il file script con il parametro "start", questa è una lista di
parametri che possiamo passare allo script del Transmission:
/opt/etc/init.d/S88transmission start Starting transmission-daemon... done. /opt/etc/init.d/S88transmission check Checking transmission-daemon... alive. /opt/etc/init.d/S88transmission stop Checking transmission-daemon... alive. Shutting down transmission-daemon... done. /opt/etc/init.d/S88transmission check Checking transmission-daemon... dead.
Il parametro "start" viene usato per avviare il
daemon, il parametro "check" viene usato per controllare se il daemon
è in esecuzione o meno, mentre il parametro "stop" viene usato per
fermare il daemon.
Dopo aver avviato il daemon Transmission, è possibile accedere all'interfaccia
utente via web. Per ulteriori dettagli, leggere la sezione alla fine di questa
pagina.
Note : poiché il daemon Transmission richiede un'enorme quantità di
memoria di sistema, suggerisco di attivare un file swap sul router, come
descritto nella pagina web "Come attivare un file swap su un router".
In questa sezione, spiegheremo brevemente il file "/opt/etc/transmission/settings.json"
contenente il file di configurazione del Transmission. Questo file contiene
tutte le impostazioni usate dal daemon Transmission, pertanto è importante
capire come modificarlo prima di usare il daemon Transmission. Da notare che
questo file di configurazione non può essere modificato quando il daemon del
Transmission è in esecuzione, quindi il daemon del
Transmission deve essere fermato prima di modificare questo file di
configurazione.
Innanzitutto diamo uno sguardo al contenuto di un file di configurazione di
esempio :
{ "alt-speed-down": 50, "alt-speed-enabled": false, "alt-speed-time-begin": 540, "alt-speed-time-day": 127, "alt-speed-time-enabled": false, "alt-speed-time-end": 1020, "alt-speed-up": 50, "bind-address-ipv4": "0.0.0.0", "bind-address-ipv6": "::", "blocklist-enabled": false, "blocklist-url": "http://list.iblocklist.com/?list=bt_level1", "cache-size-mb": 2, "dht-enabled": true, "download-dir": "/opt/downloads/torrent", "download-queue-enabled": true, "download-queue-size": 5, "encryption": 0, "idle-seeding-limit": 30, "idle-seeding-limit-enabled": false, "incomplete-dir": "/opt/downloads/torrent/incomplete", "incomplete-dir-enabled": false, "lpd-enabled": true, "message-level": 1, "peer-congestion-algorithm": "", "peer-id-ttl-hours": 6, "peer-limit-global": 40, "peer-limit-per-torrent": 8, "peer-port": 51413, "peer-port-random-high": 65535, "peer-port-random-low": 49152, "peer-port-random-on-start": false, "peer-socket-tos": "lowcost", "pex-enabled": true, "port-forwarding-enabled": false, "preallocation": 1, "prefetch-enabled": false, "queue-stalled-enabled": true, "queue-stalled-minutes": 30, "ratio-limit": 2, "ratio-limit-enabled": false, "rename-partial-files": true, "rpc-authentication-required": false, "rpc-bind-address": "0.0.0.0", "rpc-enabled": true, "rpc-host-whitelist": "", "rpc-host-whitelist-enabled": true, "rpc-password": "{b0b6e62c1e81950c884b369a771d4977ceb191c5dEkYqx3E", "rpc-port": 9091, "rpc-url": "/transmission/", "rpc-username": "root", "rpc-whitelist": "127.0.0.1", "rpc-whitelist-enabled": false, "scrape-paused-torrents-enabled": true, "script-torrent-added-enabled": false, "script-torrent-added-filename": "", "script-torrent-done-enabled": false, "script-torrent-done-filename": "", "seed-queue-enabled": false, "seed-queue-size": 10, "speed-limit-down": 100, "speed-limit-down-enabled": false, "speed-limit-up": 100, "speed-limit-up-enabled": false, "start-added-torrents": true, "trash-original-torrent-files": true, "umask": 18, "upload-slots-per-torrent": 14, "utp-enabled": true, "watch-dir": "/opt/etc/transmission/watchdir", "watch-dir-enabled": true }
La seguente tabella spiega brevemente il valore di ogni parametro all'interno del file di configurazione - maggiore dettagli sono disponibili a questo indirizzo web :
Stringa | Tipo di valore | Descrizione |
---|---|---|
alt-speed-down | Numero | Velocità massima globale di download (KBps) |
alt-speed-enabled | Booleano | True significa usare le velocità alternative |
alt-speed-time-begin | Numero | Quando attivare le velocità alternative (unità: minuti dopo mezzanotte) |
alt-speed-time-day | Numero | In quale/i giorno/i attivare le velocità alternative |
alt-speed-time-enabled | Booleano | True significa usare gli orari di pianificazione acceso/spento |
alt-speed-time-end | Numero | Quando disattivare le velocità alternative (unità: stesse) |
alt-speed-up | Numero | Velocità massima globale di upload (KBps) |
bind-address-ipv4 | Stringa | Dove "ascoltare" connessioni peer |
bind-address-ipv6 | Stringa | Dove "ascoltare" connessioni peer |
blocklist-enabled | Booleano | True significa attivato |
blocklist-url | Stringa | Locazione della blocklist da usare per "blocklist-update" |
blocklist-size | Numero | Numero di regole nella blocklist |
cache-size-mb | Numero | Dimensione massima della cache del disco (MB) |
dht-enabled | Booleano | True significa permette il DHT nei torrent pubblici |
download-dir | Stringa | Percorso predefinito per scaricare i torrent |
download-queue-enabled | Booleano | Se true, limita quanti torrent possono essere scaricati assieme |
download-queue-size | Numero | Massimo numero di torrent da scaricare assieme (vedere download-queue-enabled) |
encryption | Stringa | 0 = Preferire connessioni non cifrate, 1 = Preferire connessioni cifrate, 2 = Richiedere connessioni cifrate |
idle-seeding-limit | Numero | Torrent in fase di seeding saranno fermati se essi sono inattivi da un certo tempo |
idle-seeding-limit-enabled | Booleano | True se il limite di inattività del seeding viene rispettato |
incomplete-dir | Stringa | Percorso per i torrent incompleti, se attivato |
incomplete-dir-enabled | Booleano | True significa mantenere i torrent nella cartella incomplete-dir fino al completamento |
lazy-bitfield-enabled | Booleano | Può aiutare a raggirare un filtraggio da parte di un ISP |
lpd-enabled | Booleano | True significa permettere il "Local Peer Discovery" nei torrent pubblici |
message-level | Numero | Imposta il livello di verbosità dei messaggi del transmission (0 = Nessuno, 1 = Errore, 2 = Info, 3 = Debug) |
peer-congestion-algorithm | Stringa | Normalmente è vuoto (usare "lp" per usare TCP-LP) |
peer-id-ttl-hours | Numero | Ricicla l'ID del peer usato per i torrent pubblici dopo N ore di uso |
peer-limit-global | Numero | Massimo numero globale di peer |
peer-limit-per-torrent | Numero | Massimo numero globale di peer per torrent |
peer-port | Numero | Numero di porta dei peer |
peer-port-random-high | Numero | Massimo numero di porta dei peer |
peer-port-random-low | Numero | Minimo numero di porta dei peer |
peer-port-random-on-start | Booleano | True significa prendere a caso un numero di porta dei peer durante l'avvio |
peer-socket-tos | Stringa | Imposta il parametro Type-Of-Service (TOS) per i pacchetti TCP in uscita. Possibili valori sono "default", "lowcost", "throughput", "lowdelay" e "reliability". Il valore "lowcost" è raccomandato se si usa un router di tipo smart |
pex-enabled | Booleano | True significa permettere il PEX (Peer exchange Peer Exchange) nei torrent pubblici |
port-forwarding-enabled | Booleano | Se true, attiva UPnP o NAT-PMP |
preallocation | Numero | 0 = Off, 1 = Veloce, 2 = Completa (più lento ma riduce la frammentazione del disco) - predefinito è 1 |
prefetch-enabled | Booleano | Se attivato, il Transmission suggerirà al sistema operativo quali dati saranno letti dal disco allo scopo di soddisfare le richieste dai peer |
queue-stalled-enabled | Booleano | Se considerare o no i torrent inattivi come in stallo |
queue-stalled-minutes | Numero | Torrent che sono inattivi per N minuti non vanno conteggiati tra seed-queue-size o download-queue-size |
ratio-limit | Numero | "ratio limit" (rapporto) di un Torrent |
ratio-limit-enabled | Booleano | True significa impostare un "ratio limit" (rapporto) |
rename-partial-files | Booleano | True significa aggiungere ".part" ai file incompleti |
rpc-authentication-required | Booleano | Se true, userid/password sono richiesti per accedere all'interfaccia web |
rpc-bind-address | Stringa | Dove "ascoltare" per le connessioni RPC |
rpc-enabled | Booleano | Se true, attiva l'interfaccia web |
rpc-host-whitelist | Stringa | Lista delimitata da virgole dei nomi di dominio. I caratteri jolly sono consentiti se si usa '*'. Esempio: "*.foo.org,example.com" |
rpc-host-whitelist-enabled | Booleano | Se true, attiva l'opzione "rpc-host-whitelist" |
rpc-password | Stringa | Password richiesta per accedere all'interfaccia web (se "rpc-authentication-required" è true). Il testo in chiaro verrà automaticamente cifrato dal daemon |
rpc-port | Numero | Porta usata per accedere all'interfaccia web |
rpc-url | Stringa | Percorso aggiuntivo dell'interfaccia web |
rpc-username | Stringa | Nome utente richiesto per accedere all'interfaccia web (se "rpc-authentication-required" è true) |
rpc-whitelist | Stringa | Lista delimitata da virgole degli indirizzi IP. I caratteri jolly sono consentiti se si usa '*'. Esempio: "127.0.0.*,192.168.*.*" |
rpc-whitelist-enabled | Booleano | Se true, attiva l'opzione "rpc-whitelist" |
scrape-paused-torrents-enabled | Booleano | Se true, attiva lo "scraping" dei torrent in pausa |
script-torrent-added-enabled | Booleano | Se true, esegue uno script ogni qualvolta un torrent viene aggiunto |
script-torrent-added-filename | Stringa | Nome del file dello script da eseguire ogni qualvolta un torrent viene aggiunto |
script-torrent-done-enabled | Booleano | Se true, esegue uno script ogni qualvolta un torrent viene completato |
script-torrent-done-filename | Stringa | Nome del file dello script da eseguire ogni qualvolta un torrent viene completato |
seed-queue-enabled | Booleano | Se true, limita quanti torrent possono essere caricati contemporaneamente |
seed-queue-size | Numero | Massimo numero di torrent da caricare contemporaneamente (vedere seed-queue-enabled) |
seedRatioLimit | Double | Rapporto predefinito di "seed" da usare per i torrent |
seedRatioLimited | Booleano | True se seedRatioLimit viene rispettato in maniera predefinita |
speed-limit-down | Numero | Massima velocità globale di download (KBps) |
speed-limit-down-enabled | Booleano | True significa attivato |
speed-limit-up | Numero | Massima velocità globale di upload (KBps) |
speed-limit-up-enabled | Booleano | True significa attivato |
start-added-torrents | Booleano | True significa che i torrent appena aggiunti saranno avviati immediatamente |
trash-original-torrent-files | Booleano | True significa che il file .torrent dei torrent appena aggiunti verrà eliminato |
umask | Numero | Imposta la maschera di creazione dei file del transmission (base 10). Se gli utenti vogliono che i torrent salvati siano scrivibili da chiunque, allora devono impostare questo valore a 0 |
upload-slots-per-torrent | Numero | Massimo numero di slot di upload per torrent |
utp-enabled | Booleano | True significa permettere il UTP |
watch-dir | Stringa | Cartella di osservazione dei file .torrent |
watch-dir-enabled | Booleano | Se true, tiene d'occhio una cartella, se vengono aggiunti i file torrent (file .torrent) e li aggiunge automaticamente nel transmission |
E' possibile accedere al daemon Transmission attraverso
l'interfaccia web integrata. L'indirizzo web è "http://[indirizzo router]:[rpc port]",
dove [indirizzo router] è l'indirizzo web del router, mentre [rpc port] è la
porta specificata nel file di configurazione al parametro "rpc-port".
L'interfaccia web può anche modificare alcune impostazioni del Transmission in
tempo reale senza dover fermare e poi riavviare il daemon Transmission daemon -
da notare che solo poche impostazioni possono essere modificate, la maggior
parte delle impostazioni devono essere modificate tramite il file di
configurazione.
E' possibile anche accedere al daemon Transmission attraverso
un eseguibile a linea di comando denominato "transmission-remote"
incluso in uno dei pacchetti usati per installare il Transmission. Io sconsiglio
di usare la linea di comando, ci sono tanti programmi compatibili con il Transmission
per tutte le piattaforme disponibili, adatti per accedere al Transmission
da remoto, i quali usano una semplice interfaccia grafica per effettuare le
stesse operazioni. Questi programmi inoltre permettono di modificare alcune
impostazioni del Transmission in tempo reale senza fermare e riavviare il daemon
del Transmission. Prendere nota dei parametri "rpc
address" e "rpc port" inclusi nelle impostazioni del Transmission,
poiché tutti questi programmi richiedono questi due valori allo scopo di
connettersi al daemon del Transmission da remoto.
Comunque fornisco il risultato dell'eseguibile a linea di comando "transmission-remote"
giusto per avere un resoconto dei suoi parametri e delle sue opzioni :
transmission-remote --help transmission-remote 2.93 (3c5870d4f5) A fast and easy BitTorrent client https://transmissionbt.com/ Usage: transmission-remote [host] [options] transmission-remote [port] [options] transmission-remote [host:port] [options] transmission-remote [http(s?)://host:port/transmission/] [options] See the man page for detailed explanations and many examples. Options: -h --help Display this help page and exit -a --add Add torrent files by filename or URL -as --alt-speed Use the alternate Limits -AS --no-alt-speed Don't use the alternate Limits -asd --alt-speed-downlimit <speed> max alternate download speed (in kB/s) -asu --alt-speed-uplimit <speed> max alternate upload speed (in kB/s) -asc --alt-speed-scheduler Use the scheduled on/off times -ASC --no-alt-speed-scheduler Don't use the scheduled on/off times --alt-speed-time-begin <time> Time to start using the alt speed limits (in hhmm) --alt-speed-time-end <time> Time to stop using the alt speed limits (in hhmm) --alt-speed-days <days> Numbers for any/all days of the week - eg. "1-7" --blocklist-update Blocklist update -c --incomplete-dir <dir> Where to store new torrents until they're complete -C --no-incomplete-dir Don't store incomplete torrents in a different location -b --debug Print debugging information -d --downlimit <speed> Set the max download speed in kB/s for the current torrent(s) or globally -D --no-downlimit Disable max download speed for the current torrent(s) or globally -e --cache <size> Set the maximum size of the session's memory cache (in MiB) -er --encryption-required Encrypt all peer connections -ep --encryption-preferred Prefer encrypted peer connections -et --encryption-tolerated Prefer unencrypted peer connections --exit Tell the transmission session to shut down -f --files List the current torrent(s)' files -g --get <files> Mark files for download -G --no-get <files> Mark files for not downloading -i --info Show the current torrent(s)' details -if --info-files List the current torrent(s)' files -ip --info-peers List the current torrent(s)' peers -ic --info-pieces List the current torrent(s)' pieces -it --info-trackers List the current torrent(s)'trackers -si --session-info Show the session's details -st --session-stats Show the session's statistics -l --list List all torrents --move <path> Move current torrent's data to a new folder --find <path> Tell Transmission where to find a torrent's data -m --portmap Enable portmapping via NAT-PMP or UPnP -M --no-portmap Disable portmapping -n --auth <user:pw> Set username and password -ne --authenv Set authentication info from the TR_AUTH environment variable (user:pw) -N --netrc <file> Set authentication info from a .netrc file --ssl Use SSL when talking to daemon -o --dht Enable distributed hash tables (DHT) -O --no-dht Disable distributed hash tables (DHT) -p --port <port> Port for incoming peers (Default: 51413) -pt --port-test Port testing -P --random-port Random port for incoming peers -ph --priority-high <files> Try to download these file(s) first -pn --priority-normal <files> Try to download these file(s) normally -pl --priority-low <files> Try to download these file(s) last -Bh --bandwidth-high Give this torrent first chance at available bandwidth -Bn --bandwidth-normal Give this torrent bandwidth left over by high priority torrents -Bl --bandwidth-low Give this torrent bandwidth left over by high and normal priority torrents --reannounce Reannounce the current torrent(s) -r --remove Remove the current torrent(s) -pr --peers <max> Set the maximum number of peers for the current torrent(s) or globally -rad --remove-and-delete Remove the current torrent(s) and delete local data --torrent-done-script <file> Specify a script to run when a torrent finishes --no-torrent-done-script Don't run a script when torrents finish -sr --seedratio ratio Let the current torrent(s) seed until a specific ratio -srd --seedratio-default Let the current torrent(s) use the global seedratio settings -SR --no-seedratio Let the current torrent(s) seed regardless of ratio -gsr --global-seedratio ratio All torrents, unless overridden by a per-torrent setting, should seed until a specific ratio -GSR --no-global-seedratio All torrents, unless overridden by a per-torrent setting, should seed regardless of ratio -td --tracker-add <tracker> Add a tracker to a torrent -tr --tracker-remove <trackerId> Remove a tracker from a torrent -s --start Start the current torrent(s) -S --stop Stop the current torrent(s) -t --torrent <torrent> Set the current torrent(s) --start-paused Start added torrents paused --no-start-paused Start added torrents unpaused --trash-torrent Delete torrents after adding --no-trash-torrent Do not delete torrents after adding -hl --honor-session Make the current torrent(s) honor the session limits -HL --no-honor-session Make the current torrent(s) not honor the session limits -u --uplimit <speed> Set the max upload speed in kB/s for the current torrent(s) or globally -U --no-uplimit Disable max upload speed for the current torrent(s) or globally --utp Enable uTP for peer connections --no-utp Disable uTP for peer connections -v --verify Verify the current torrent(s) -V --version Show version number and exit -w --download-dir <path> When used in conjunction with --add, set the new torrent's download folder. Otherwise, set the default download folder -x --pex Enable peer exchange (PEX) -X --no-pex Disable peer exchange (PEX) -y --lpd Enable local peer discovery (LPD) -Y --no-lpd Disable local peer discovery (LPD) -pi --peer-info List the current torrent(s)' peers
Transmission può inviare una email tramite uno script ogni
qualvolta un file Torrent viene aggiunto o completato usando i parametri del
file di configurazione i cui nomi iniziano con "script-torrent" -
bisogna ricordarsi di modificare le impostazioni del Transmission se si vuole
inviare una email usando uno script ogni qualvolta un file Torrent viene
aggiunto e/o completato.
Per inviare una email, useremo il pacchetto Entware "msmtp",
fare riferimento alla pagina "Come
inviare una email tramite il router" per maggiori dettagli su questo pacchetto -
noi useremo le stesse impostazioni del server SMTP per inviare una email con il Transmission.
All'interno del corpo del messaggio email, possiamo usare alcune variabili
interne del Transmission.
E' possibile trovare maggiori dettagli circa gli script del Transmission
su questa pagina web.
Ciò che segue è un semplice script il quale invia una email ogni qualvolta il Transmission
finisce di scaricare un file Torrent :
#!/bin/sh msmtp -v -t << EOF From: [myemail]@hotmail.com Subject: Router - torrent completed To: to_address@domain.xxx Transmission finished downloading : Torrent Name : "$TR_TORRENT_NAME" . Local Time : "$TR_TIME_LOCALTIME" . Torrent Dir : "$TR_TORRENT_DIR" . Torrent Hash : "$TR_TORRENT_HASH" . Torrent ID : "$TR_TORRENT_ID" . App Version : "$TR_APP_VERSION" . EOF exit 0