Több torrent kliens is létezik, az általam használtat osztom most meg, ez pedig az rtorrent. Valamint a végén bemutatok 2 megoldást, hogy hogyan tudunk grafikus felületet varázsolni neki.
Külön köszönet illeti ecaddict-ot, aki a prohardver fórumon közzétette S99rtorrent konfig fájlját, így nem kell külön az iptablesben szórakozni a portok nyitogatásával, tehát, hogy aktívak legyünk.
Kezdjük is:
ipkg install rtorrent screen
Majd, hozzunk létre 2 könyvtárat, amelyre a későbbiek során lesz szükségünk. Én ezeket a samba megosztásom alá teszem, hogy a LAN-on el tudjam érni, valamint mivel úgyis nagy lesz a helyigény, célszerű olyan helyet választani, ahol van is belőle bőségesen:
mkdir -p /opt/etc/samba/Share/torrent/work
mkdir -p /opt/etc/samba/Share/torrent/session
Ezután szerkesszük meg az S99rtorrent fájlt, amely hasonlóan nézzen ki, a szükséges szerkesztéseket mindenki végezze el rajta (elérési utak):
vi /opt/etc/init.d/S99rtorrent
#!/bin/sh
config=”/opt/etc/rtorrent.conf”
OPTIONS=”-n -o import=${config}”
BASE=”/opt/etc/samba/Share/torrent”
SRNAME=rtorrent
logfile=”/opt/var/log/rtorrentInit.log”
PATH=/opt/bin:/opt/sbin:/usr/bin:/sbin:/bin:/usr/sbin
DESC=rtorrent
NAME=rtorrent
# Do not proceed unless some apps are available.
test -x /opt/bin/screen || ( echo “screen not found.” | tee -a “$logfile” >&2 ; exit 2 )
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 “$logfi
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”
exit 3
fi
}
getsession() {
session=`awk ‘/^[[:space:]]*session[[:space:]]*=[[:space:]]*/{print($3)}’ “$config”`
echo $session
}
getprange() {
ports=`awk ‘/^[[:space:]]*port_range[[:space:]]*=[[:space:]]*/{print($3)}’ “$config” | sed “s/-/ /”`
echo $ports
}
getdhtport() {
dht_port=`awk ‘/^[[:space:]]*dht_port[[:space:]]*=[[:space:]]*/{print($3)}’ “$config”`
echo $dht_port
}
fwopen() {
DHT_PORT=`getdhtport “$config”`
iptables -D INPUT -j DROP
PORTS=$(seq `getprange “$config”`)
for P in $PORTS; do
iptables -I INPUT -i vlan1 -p tcp –syn –dport $P -j ACCEPT
done
if [ $DHT_PORT ]; then
iptables -I INPUT -i vlan1 -p tcp –dport $DHT_PORT -j ACCEPT
fi
iptables -A INPUT -j DROP
}
fwclose() {
DHT_PORT=`getdhtport “$config”`
PORTS=$(seq `getprange “$config”`)
for P in $PORTS; do
iptables -D INPUT -i vlan1 -p tcp –syn –dport $P -j ACCEPT
done
if [ $DHT_PORT ]; then
iptables -D INPUT -i vlan1 -p tcp –dport $DHT_PORT -j ACCEPT
fi
}
d_start() {
[ -d "${BASE}" ] && cd “${BASE}”
fwopen
stty stop undef && stty start undef \screen -ls | grep “.$SRNAME[[:space:]]” > /dev/null || \screen -dm -S $SRNAME \scree
}
d_stop() {
fwclose
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”`
if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn’t belong to another process
kill -s INT ${pid}
fi
}
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: $0 {start|stop|restart|force-reload}” >&2
exit 1;;
esac
Ennek a scriptnek kell pár telepített csomag a futáshoz, ezért ezeket most telepítsük is fel:
ipkg install procps grep gawk
Valamint adjunk neki futási jogot, hogy a router indulásánál automatikus elinudljon:
chmod 755 /opt/etc/init.d/S99rtorrent
Szerkesszük meg az rtorrent.conf állományt is, figyeljünk itt is az elérési utakra! Valami hasonlónak kell lennie. Persze a config nem teljes, mindenki a saját igénye szerint állítsa be. Sokan több portot is megadnak, 100-asával nyitogatják őket, de elvileg 1 egész darabnak is elégnek kell lennie. De persze nem mondom azt, hogy ez így minden környezetben jól működik, próba cseresznye. Benne hagytam mindent, hogy lásd, mit lehetne még beállítani.
# 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.
# Minumum amount of peers to connect per torrent, if available.
min_peers = 20
# Minumum amount of peers to connect per torrent.
max_peers = 40
# Same as above but for seeding completed torrents (-1 = same as downloading)
#min_peers_seed = 10
#max_peers_seed = 20
# Maximum number of simultanious uploads per torrent.
max_uploads = 5
# Global download rate in KiB. “0″ for unlimited.
download_rate = 0
# Global upload rate in KiB. “0″ for unlimited.
upload_rate = 0
# Default directory to save downloaded files. Note it doesn’t support
# space yet.
directory = /opt/etc/samba/Share/torrent/work/
# Watch a directory for new torrents, and stop those that have been deleted.
#schedule = watch_directory,5,5,load_start=/opt/share/torrent/dl/*.torrent
#schedule = untied_directory,5,5,stop_untied=
# Close torrents when diskspace is low.
#schedule = low_diskspace,5,60,close_low_diskspace=100M
# Default session directory. Make sure you don’t run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = /opt/etc/samba/Share/torrent/session
# The ip address reported to the tracker.
#ip = rakshasa
# The ip address the listening socket and outgoing connections is
# bound to.
# Port range to use for listening.
port_range = 55000-55000
# 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
# 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
#
# 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
# Max number of files to keep open simultaniously.
#max_open_files = 128
# Number of sockets to simultaneously keep open.
#max_open_sockets =
# Example of scheduling commands: Switch between two ip’s every 5
# seconds.
#schedule = “ip_tick1,5,10,ip=torretta”
#schedule = “ip_tick2,10,10,ip=lampedusa”
# Remove a scheduled event.
#schedule_remove = “ip_tick1″
# 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=200,200M,2000″
#schedule = ratio,30,60,stop_on_ratio=200
# 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
# 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
scgi_port = 127.0.0.1:5000
Ha ez megvan, akkor bele kell piszkálni kicsit a lighttpd.conf-ba is.
Először is engedélyezni kell egy modul használatát a server.modules-hoz hozzá kell adni a mod_scgi sort, ahogy az alábbi képen látható:

Majd a végére pedig illesszük be ezt a sort:
scgi.server = ( “/RPC2″ => ( “127.0.0.1″ => ( “host” => “127.0.0.1″, “port” => 5000, “check-local” => “disable”)))
Ezzel nagyjából már készen is vagyunk. A biztonság kedvéért mentsünk mindent és dobjunk egy reboot-ot is:
flashfs save && flashfs commit && flashfs enable
reboot
Újraindulás után csatlakozzunk fel ssh-n, és adjuk ki a ps -ax parancsot, és ha ilyesmit látunk a végefelé a listának, akkor jól dolgoztunk:

Ezután már nincs sok hátra, minthogy grafikus felületet varázsoljunk neki.
Először egy javas megoldást mutatok. Ehez természetesen telepíteni kell a jávát.
Ezután le kell töltenünk az ntorrent-et innen.
Ezt kicsomagolod egy tetszőleges könyvtárba, majd elindítod az nTorrent.exe-t.
Majd kitöltögeted szépen a szükséges adatokat, valahogy így:

Ha ezen a ponton ráböksz a save gombra, akkor el tudja menteni a profilt miután adtál neki egy nevet, valamint ha bepipáltad a connect on startup lehetőséget, akkor elindulás után automatikusan csatlakozik.
Másik megoldás, egyszerűbb, átláthatóbb felületet ad (legalábbis számomra), ráadásul több szolgáltatása is van (peer lista például).
Ekőször is töltsük le a csomagot innen. Ha nem jönne le, akkor feltettem saját szerverre is: letöltés.
Csomagoljuk ki a lighttpd root-ja alá mundjuk az rtorrent könyvtárba, aztán szerkesszük meg a config.php-t.
Nálam most ez így néz ki:
< ?php
// configuration parameters
$uploads = ‘./torrents’;
$uploads_mode = 0777;
$settings = ‘./settings’;
$scgi_port = 5000;
$scgi_host = “127.0.0.1″;
//$scgi_port = 0;
//$scgi_host = “unix:///tmp/rpc.socket”;
// For web->rtorrent link through unix domain socket
// (scgi_local in rtorrent conf file), change variables
// above to something like this:
//
// $scgi_port = 0;
// $scgi_host = “unix:///tmp/rpc.socket”;
?>
Most már nincs más dolgunk, mint megnyitni a következő címet: 192.168.1.1:8081/rtorrent.
Pár kép, hogy kedvet kapjatok hozzá:)



Read original blog post