# Poprawne zainstalowanie rTorrent'a i wTorrent'a (x86) HowTo

## Bialy

Witam,

Z góry chciałbym podziękować wujkowi i cioci.

Podczas instalowania tego duetu napotkałem masę przeszkód, dlatego postanowiłem stworzyć mały how-to.

Jako, że serwis uruchamiałem na serwerze z profilem hardened, dlatego domyślne flagi jak i wersje programów na innych profilach mogą się różnić.

Zaczynamy od wybrania oprogramowania:

1) rtorrent

2) apache + mod_scgi

3) wtorrent

rTorrent

Przed instalacją rTorrent'a musimy uzbroić go w odpowiednie flagi:

```
/etc/portage/package.use

net-p2p/rtorrent daemon xmlrpc
```

Po instalacji tworzymy użytkownika, na którym rTorrent będzie uruchomiony (ze względów bezpieczeństwa nie używamy root'a; jeśli w systemie jest już użytkownik, którego możemy użyć, to pomijamy ten kroczek):

```
useradd -m -G users UZYTKOWNIK

passwd UZYTKOWNIK
```

Powiadamiamy rTorrent'a jakiego użytkownika ma użyć:

```
/etc/conf.g/rtorrentd

USER="UZYTKOWNIK"
```

Rozpakowujemy domyślną konfigurację z /usr/share/doc/rtorrent/rtorrent-X.X.X/rtorrent.rc.bz2 (gdzie X.X.X zastępujemy numerem wersji rTorrenta) i umieszczamy w katalogu domowym UZYTKOWNIKa pod nazwą .rtorrent.rc. Edytujemy go według potrzeb dopisując:

```
scgi_port = 127.0.0.1:5000
```

Od wersji 0.8.4 zmieniła się sekcja odpowiadająca za zatrzymywanie udostępniania po osiągnięciu odpowiedniego ratio, powinna ona wyglądać mniej więcej tak:

```
# Enable the default ratio group.

ratio.enable=

# Change the limits, the defaults should be sufficient.

ratio.min.set=100

ratio.max.set=300

ratio.upload.set=20M

# Changing the command triggered when the ratio is reached.

system.method.set = group.seeding.ratio.command, d.stop=
```

Najnowsza wersja rTorrent'a nie posiada już błędu w skrypcie startowym - jeżeli rTorrent startuje prawidłowo, to można pominąć poniższy krok.

Naprawy może potrzebować plik /etc/init.d/rtorrentd, w którym sekcja start powinna wyglądać mniej więcej tak:

```
start() {

        PWHOME="$(getent passwd $USER | awk -F: '{ print $6 }')"

        ebegin "Starting rtorrent"

        env TERM="xterm" \

        start-stop-daemon --start --chuid $USER \

        --env HOME="${PWHOME:-/home/$USER}" \

        --exec /usr/bin/screen -- -dmS rtorrentd rtorrent

        eend $?

}
```

apache + mod_scgi

Przed instalacją uzbrajamy potrzebne pakiety w odpowiednie flagi:

```
/etc/portage/package.use

dev-lang/php cgi curl force-cgi-redirect pdo pic sqlite xml xmlrpc
```

mod_scgi niestety znajduje się w gałęzi niestabilnej:

```
/etc/portage/package.keywords

www-apache/mod_scgi ~x86
```

Dodatkowo może istnieć potrzeba dodania flag pdo i sqlite do /etc/make.conf

Po zainstalowaniu apache, mod_scgi i php należy odpowiednio skonfigurować apache.

Edytujemy poniższe pliki według potrzeb dopisując:

```
/etc/conf.d/apache2

APACHE2_OPTS="-D PHP"
```

```
/etc/apache2/httpd.conf

LoadModule scgi_module /usr/lib/apache2/modules/mod_scgi.so

SCGIMount /RPC2 127.0.0.1:5000

<Location /RPC2>

        AuthName "Private"

        AuthType Basic

        AuthBasicProvider file

        AuthUserFile /MIEJSCE_GDZIE_APACHE_BĘDZIE_MÓGŁ_ODCZYTAĆ_PLIK/htpasswd

        Require user UZYTKOWNIK

</Location>
```

```
/etc/apache2/vhosts.d/00_default_vhost.conf

<VirtualHost *:80>

    ServerAdmin webmaster@TWOJA.DOMENA

    ServerName ADRES.TWOJA.DOMENA:80

    DocumentRoot "/SCIEZKA_INSTALACJI_WTORRENTA"

    SCGIMount /RPC2 127.0.0.1:5000

    <Directory "/SCIEZKA_INSTALACJI_WTORRENTA">

        Options ExecCGI FollowSymLinks

        AllowOverride All

        Order allow,deny

        Allow from all

    </Directory>

 </VirtualHost>
```

Należy teraz aktywować autoryzację:

```
htpasswd -c /MIEJSCE_GDZIE_APACHE_BĘDZIE_MÓGŁ_ODCZYTAĆ_PLIK/htpasswd UZYTKOWNIK
```

wTorrent

wTorrent'a musimy ściągnąć ze strony projektu. Najpierw przechodzimy w miejsce (używając polecenie cd), w którym chcemy umieścić wTorrent'a (przy ściąganiu programu powstanie katalog wtorrent wraz z podkatalogami) i wykonujemy:

```
svn co http://svn.wtorrent-project.org/wtorrent/trunk/wtorrent/
```

*svn znajduje się w paczce dev-util/subversion.

Teraz należy usunąć wszystkie pliki i katalogi z folderu wtorrent/db/ oraz przekopiować plik konfiguracyjny:

```
cd wtorrent/conf/

cp sample.user.conf.php user.conf.php
```

Najnowsze wersje wTorrenta posiadają zaaplikowany poniższy patch - jeśli ściągnąłeś wersję 107 lub późniejszą, to pomiń poniższy krok.

Na plik wtorrent/lib/xmlrpc/xmlrpc.inc.php należy nałożyć następujący patch (bez tego wTorrent nie będzie mógł się połączyć z rTorrent'em):

```
Index: xmlrpc.inc.php

===================================================================

--- xmlrpc.inc.php   (revision 100)

+++ xmlrpc.inc.php   (working copy)

@@ -49,7 +49,8 @@

    // so that xmlrpc.inc will work even if included from within a function

    // Milosch: 2005/08/07 - explicitly request these via $GLOBALS where used.

    $GLOBALS['xmlrpcI4']='i4';

-   $GLOBALS['xmlrpcInt']='int';

+   $GLOBALS['xmlrpcI8']='i8';

+   $GLOBALS['xmlrpcInt']='int';

    $GLOBALS['xmlrpcBoolean']='boolean';

    $GLOBALS['xmlrpcDouble']='double';

    $GLOBALS['xmlrpcString']='string';

@@ -61,6 +62,7 @@

 

    $GLOBALS['xmlrpcTypes']=array(

       $GLOBALS['xmlrpcI4']       => 1,

+      $GLOBALS['xmlrpcI8']       => 1,

       $GLOBALS['xmlrpcInt']      => 1,

       $GLOBALS['xmlrpcBoolean']  => 1,

       $GLOBALS['xmlrpcString']   => 1,

@@ -75,6 +77,7 @@

       'VALUE' => array('MEMBER', 'DATA', 'PARAM', 'FAULT'),

       'BOOLEAN' => array('VALUE'),

       'I4' => array('VALUE'),

+      'I8' => array('VALUE'),

       'INT' => array('VALUE'),

       'STRING' => array('VALUE'),

       'DOUBLE' => array('VALUE'),

@@ -433,6 +436,7 @@

                $GLOBALS['_xh']['php_class']=null;

                break;

             case 'I4':

+            case 'I8':

             case 'INT':

             case 'STRING':

             case 'BOOLEAN':

@@ -600,6 +604,7 @@

                break;

             case 'BOOLEAN':

             case 'I4':

+            case 'I8':

             case 'INT':

             case 'STRING':

             case 'DOUBLE':

@@ -2728,6 +2733,7 @@

                   $this->me['string']=$val;

                   break;

                case 'i4':

+               case 'i8':

                case 'int':

                case 'double':

                case 'string':

@@ -2944,6 +2950,7 @@

                      break;

                   case $GLOBALS['xmlrpcInt']:

                   case $GLOBALS['xmlrpcI4']:

+                  case $GLOBALS['xmlrpcI8']:

                      $rs.="<${typ}>".(int)$val."</${typ}>";

                      break;

                   case $GLOBALS['xmlrpcDouble']:

@@ -3159,7 +3166,8 @@

       {

          reset($this->me);

          list($a,)=each($this->me);

-         if($a==$GLOBALS['xmlrpcI4'])

+         if($a==$GLOBALS['xmlrpcI4']

+         || $a==$GLOBALS['xmlrpcI8'])

          {

             $a=$GLOBALS['xmlrpcInt'];

          }
```

Teraz należy nadać odpowiednie prawa na katalog wtorrent/

```
chown -R apache:apache wtorrent/
```

Uruchamianie

Uruchamiamy apache i rtorrenta.

Aby sprawdzić czy autoryzacja działa łączymy się ze stroną http://TWOJA.DOMENA/RPC2, jeśli wszystko jest OK, to powinien wyskoczyć monit o podanie loginu i hasła.

Łączymy się teraz ze stroną http://ADRES.TWOJA.DOMENA/install.php i konfigurujemy według potrzeb, na przykład:

```
<?php

/* wTorrent autoconfiguration file. Created 17/11/2009 */

define ('LANGUAGE', 'pl_PL'); 

define ('DB_FILE', 'db/database.db'); //zostawiamy bez zmian

define ('RT_HOST', 'localhost'); //zostawiamy bez zmian

define ('RT_PORT', 80); //zostawiamy bez zmian

define ('RT_DIR', '/RPC2'); //zostawiamy bez zmian

define ('RT_AUTH', true); //zostawiamy bez zmian

define ('RT_USER', 'UZYTKOWNIK'); //użytkownik wykorzystywany do autoryzacji

define ('RT_PASSWD', 'HASLO'); // hasło jak wyżej

define ('NO_MULTICALL', true); 

define ('EFFECTS', true);

define ('DIR_TORRENTS', 'torrents/'); //zostawiamy bez zmian

define ('DIR_EXEC', '/SCIEZKA_INSTALACJI_WTORRENTA/'); 

define ('DIR_DOWNLOAD', '/SCIEZKA_ZAPISYWANIA/');

?>
```

+ podajemy login i hasło dostępu do wTorrenta

Jeżeli ścieżka położenia plików .torrent jest inna niż wtorrent/torrents/, to należy zrobić link do odpowiedniego folderu:

```
rm -R torrents

ln -s /SCIEZKA_DO_PLIKÓW_TORRENT/ torrents
```

Dla bezpieczeństwa usuwamy także plik wtorrent/install.php

I już wszystko powinno działać.

Proszę pamiętać, że udostępnianie plików, które są chronione prawi autorskimi jest przestępstwem!

PS. Czekam na kreatywną krytykę  :Wink: 

--EDIT--

Dodano informację o zmianie sekcji ratio.

Poprawiono scgi_port.

Zmieniono adres strony projektu wTorrent'a.Last edited by Bialy on Fri Aug 27, 2010 10:53 am; edited 7 times in total

----------

## SlashBeast

 *Quote:*   

> Proszę pamiętać, że udostępnianie plików, które łamią prawa autorskie jest przestępstwem!

 

Raczej udostepnianie plikow obietych prawem autorksim jest lamaniem praw autorskich.

Anyway, po co takie cos dodajesz do posta? Zdziwil bys sie ile ludzi uzywa torrenta nie lamaic zadnych praw czy norm...

A co do php, nie wlaczyles w nim safemode? Pewnie nie, bo wtorrent by nie dzialal z nim, ale masz profil hardened a nie pobawiles sie w ograniczanie php? Nawet system() nie zablokowales? You doing it wrong.

----------

## timor

Będę świnia... no cóż...  :Wink: 

Korzystałem z tego tandemu przez pewien czas, ale ostatnio pobawiłem się przez chwilę transmission. Może panel bardziej prymitywny ale klient w moim odczuciu dużo szybszy. Na podobnych ustawieniach i tym samym sprzęcie działa aż huczy. Ściągałem obrazy Fedory zaraz jak 12-tka wyszła i szczena mi opadła. Do tego podstawowa konfiguracja jest prostsza i nie wymaga serwera www.

----------

## vinkler

Witam.

Jak widzę instalacja znacznie bardziej "rozbudowana" niż w moim U9.10, ale nie o tym chciałem.

wTorrent posiada całkiem milutki i spolszczony interface, ale ma też bardzo irytująca cechę mianowicie nie potrafi samoczynie aktualizować statystyk czyli tego co wyświetla.

Znalazł Ktoś sposób na tą niedogodność?

P.S.

Z tego własnie względu obecnie korzystam z rTgui, który nie wymaga specjalnych zabiegów podczas instalacji i pracuje jak należy.

----------

## tgR10

 *SlashBeast wrote:*   

> 
> 
> A co do php, nie wlaczyles w nim safemode? Pewnie nie, bo wtorrent by nie dzialal z nim, ale masz profil hardened a nie pobawiles sie w ograniczanie php? Nawet system() nie zablokowales? You doing it wrong.

 

a safe mode w php to sie nadaje ... sami tworcy php mowia ze to pic na wode i w php 6.0 wogole safe mode nie bedzie ...

takze ten tekst o safemode mozna sobie wsadzic 

i wracajac do tematu to jest to opis jak to zrobic, a nie zabezpieczyc bo zabezpieczenie serwera www/php/sql to troszke inna sprawa 

a howto ciekawe napewno ktos skorzysta, sam znajomemu linka wyslalem bo szukal czegos takiego :)

----------

## SlashBeast

safe_mode to naraz kupa blokad, sam fakt, ze wtorrent dziala mowi o tym, ze openbasedir nawet jest dozwolone, masakra a nie bezpieczenstwo. Nie opowiadaj o safe_mode ze to pic, bo blokuje to i owo, ktos Cie przeczyta i stwierdzi, ze nie ma roznicy z czy bez safe_mode. w php6 ma nie byc safemode, i ludzie beda skazani na reczne blokowanie tego i owego, nic magicznego.

----------

## tgR10

co niezmienia faktu ze ten tutek to nie o bezpieczenstwie jest a ludzie nie powinni przyzwyczajac sie do safemode

po to napisalem zeby ktos przeczytal.

----------

