Creare Seedbox Con Debian / Ubuntu

Creare Seedbox Con Debian / Ubuntu

Cos'è una seedbox? Avete presente utorrent? Veniamo oggi a creare un nostro client torrent online

Prima di tutto procuriamoci una distro funzionante di debian 5/6 o ubuntu 10~12 e cominciamo dando i seguenti comandi

apt-get update  
apt-get install subversion build-essential automake libtool libcppunit-dev libcurl3-dev  
libsigc++-2.0-dev unzip unrar-free curl libncurses-dev  
apt-get install apache2 php5 php5-cli php5-curl  
apt-get install libapache2-mod-scgi  
ln -s /etc/apache2/mods-available/scgi.load /etc/apache2/mods-enabled/scgi.load  
mkdir /install;cd /install  
svn checkout http://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/stable/ xmlrpc-c  
cd xmlrpc-c  
./configure --disable-cplusplus
make  
make install  
cd /install  

Adesso Procuriamoci il pacchetto con tutti i file da dover inserire al Seguente link tramite wget oppure trasferendolo in ftp in una cartella del nostro server ad esempio nella root e nella cartella install Adesso diamo i seguenti comandi (una volta raggiunta la cartella dove abbiamo scaricato i nostri file

unzip seedbox.zip  
cd seedbox  
unzip libtorrent-0.13.0.2.zip  
cd libtorrent-0.13.0.2  
./autogen.sh
./configure
make  
make install  
cd /seedbox  
unzip rtorrent-0.9.0.2.zip  
cd rtorrent-0.9.0.2  
./autogen.sh
./configure --with-xmlrpc-c
make  
make install  
ldconfig  

Adesso dobbiamo creare delle cartelle di configurazione per la nostra seedbox e nel mio caso le inserirò in /var/

mkdir /var/seeder1/  
mkdir /var/seeder1/rtorrent  
mkdir /var/seeder1/rtorrent/.session  
mkdir /var/seeder1/rtorrent/watch  
mkdir /var/seeder1/rtorrent/download  

Adesso rechiamoci nella cartella seeder1 (cd /var/seeder1/) e creiamo il seguente file
vim .rtorrent.rc

# This is an example resource file for seeder1rent. Copy to
# ~/.seeder1rent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.
#
# Based on original .seeder1rent.rc file from http://libtorrent.rakshasa.no/
# Modified by Lemonberry for rtGui http://rtgui.googlecode.com/
#
# This assumes the following directory structure:
#
# /Torrents/Downloading - temporaray location for torrents while downloading (see "directory")
# /Torrents/Complete - Torrents are moved here when complete (see "on_finished")
# /Torrents/TorrentFiles/Auto - The 'autoload' directory for seeder1rent to use.  Place a file
#           in here, and seeder1rent loads it #automatically.  (see "schedule = watch_directory")
# /Torrents/Downloading/seeder1rent.session - for storing seeder1rent session information
#

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

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

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

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

# Default directory to save the downloaded torrents.
directory = /var/seeder1/rtorrent/download

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

# Watch a directory for new torrents, and stop those that have been
# deleted.
schedule = watch_directory,5,5,load_start=/var/seeder1/rtorrent/watch/*.torrent  
schedule = untied_directory,5,5,stop_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=200,200M,2000

# When the torrent finishes, it executes "mv -n <base_path> ~/Download/"
# and then sets the destination directory to "~/Download/". (0.7.7+)
# on_finished = move_complete,"execute=mv,-u,$d.get_base_path=,/home/seeder1/download/complete/ ;d.set_directory=/home/seeder1/download/complete/"

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

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

# Port range to use for listening.
port_range = 55995-56000

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

scgi_port = 127.0.0.1:5000

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

# 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

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

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

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

#
# 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 = <no default>

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

Fatto ciò torniamo nella nostra cartella seedbox cd /seedbox e diamo i seguenti comandi

unzip rutorrent.zip  
mv rutorrent /var/www/  

Dopodichè scompattiamo la cartella plugin e spostiamola nella precedente cartella rutorrent e cancelliamo un plugin di cui non abbiamo bisogno (darkpal)

unzip plugins.zip  
mv plugin/* /var/www/rutorrent/plugins  
rm -rf /var/www/rutorrent/plugins/darkpal  
Diamo i permessi al webserver e abilitamo delle ultime configurazioni  
chown -R www-data:www-data /var/www/rutorrent  
a2enmod ssl  
a2enmod auth_digest  
a2enmod scgi  

Creiamo una chiave rispondendo alle varie domande con i dati (oppure premendo sempre invio)

openssl req [email protected] -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem

chmod 600 /etc/apache2/apache.pem  

Creiamo un utente seeder1 nel gruppo seedbox e scegliamo la nostra password

htdigest -c /etc/apache2/passwords seedbox seeder1  

Modifichiamo adesso il file httpd.conf (di default è vuoto) nella cartalla /etc/apache2/

vim /etc/apache2/httpd.conf  

Con il seguente codice

AuthType Digest  
AuthName "seedbox"  
AuthDigestDomain /var/www/rutorrent/ http://127.0.0.1/rutorrent  
AuthDigestProvider file  
AuthUserFile /etc/apache2/passwords  
Require valid-user  
SetEnv R_ENV "/var/www/rutorrent"

AuthType Digest  
AuthName "seedbox"  
AuthDigestDomain /var/www/rutorrent/ http://127.0.0.1/rutorrent  
AuthDigestProvider file  
AuthUserFile /etc/apache2/passwords  
Require valid-user  
SetEnv R_ENV "/var/www/rutorrent"  

Abilitiamo un'altra feature di apache2 e facciamo un reload e un riavvio

a2ensite default-ssl  
/etc/init.d/apache2 reload
service apache2 restart  

Ora l'ultimo servizio da installare

apt-get install screen  
screen -fa -d -m rtorrent  

Fatto quest'ultimo passaggio possiamo raggiungere l'ip del nostro server alla cartella rutorrent
(http://ipdelserver/rutorrent/) dove ci chiederà l'user e la password (che sarà seeder1 con la password creata in precedenza) Ora godetevi la vostra seedbox personale, ricordando che tutti i valori da modificare sono nel file creato in precedenza .rtorrent.rc Concludo inserendo anche lo script per /etc/init.d/rtorrent

adduser --disabled-login torrent  
chown -R /var/seeder1/  
vim /etc/init.d/rtorrent  

Modifichiamo come segue

#!/bin/sh
#############
######
#############
# 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
##############
######
##############

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

# 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=/var/seeder1/.rtorrent.rc

# set of options to run with
options=""

# default directory for screen, needs to be an absolute path
base=/var/seeder1/

# name of screen session
srnname="srntorrent"

# 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
  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
  # 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
  su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
}

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"`
    if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process
        kill -s INT ${pid}
    fi
}

getsession() {  
    session=`cat "$1" | grep "^[[:space:]]*session[[:space:]]*=" | sed "s/^[[:space:]]*session[[:space:]]*=[[:space:]]*//" `
    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  

Diamo infine

chmod 755 /etc/init.d/rutorrent  

Ricordo inoltre che la guida fa riferimento nel caso in cui la vostra seedbox sia nella cartella /var/www/rutorrent e non in altre cartelle (in quel caso bisogna cambiare i file di configurazione di apache) e soprattutto che questa guida crea una seedbox per uso singolo e non per multiutenza.

Articoli Correlati