dtach moim nowym idolem

jest to starsza wersja artykułu – nowsza tutaj

od razu mówię, że post jest skierowany do komputerowców.

korzystając z tego, że we Wrocławiu mam symetryczne 4Mbit-owe łącze i komputer, zrobiłem z niego na czas świąt serwerek. chciałem sobie zainstalować na nim klienta torrenta, który to miałby zapisywać ściągane dane na dysku, które byłyby dostępne dla mnie (tj. z domu) przez FTP. bardzo duży problem pojawił się właśnie przy wspomnianym już kliencie. ale po kolei.

wybór klienta na konsolę (na serwerze stoi Slackware 12, bez jakichkolwiek iksów) był bardzo prosty – oczywiście rtorrent. nie zamierzałem jednak używać go przez konsolę – o nie! wpadłem na pomysł zainstalowania sobie na tej maszynie rtgui, ajaxowskiego interfejsu do rtorrenta. i tutaj właśnie zaczęły się schody. aby inni mogli tych schodów uniknąć, prezentuję swoje rozwiązanie problemu. btw – nie lubię IPv6. (:

zaczynamy od zainstalowania biblioteki XMLRPC. jest ona zależna od bibliotek klienta curl – w systemie sieciowym program ten definitywnie powinien być, jak go nie ma, można go łatwo dostać z płyty slackware’owskiej.
links xmlrpc-c.sf.net
tar -zxf xmlrpc*
cd xmlrpc*
./configure --disable-wininet-client --disable-libwww-client --disable-abyss-server
make
make install

mając tak przygotowaną bibliotekę możemy przystąpić do instalacji libtorrenta i rtorrenta. zwracam uwagę na argument –with-xmlrpc-c przy konfiguracji tego drugiego.
wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.12.2.tar.gz
tar -zxf libtorrent-0.12.2.tar.gz
cd libtorrent-0.12.2
./configure --disable-ipv6
make
make install
cd ..
wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.8.2.tar.gz
tar -zxf rtorrent-0.8.2.tar.gz
cd rtorrent-0.8.2
./configure --disable-ipv6 --with-xmlrpc-c
make
make install

tym sposobem mamy elegancko zainstalowany rtorrent wrazem z wymaganą przez niego biblioteką. aby móc używać rtgui, brakuje nam dalej jeszcze jednego elementu : serwera HTTP z obsługą PHP. mój wybór padł na lighttpd, jako że ma on już wbudowany moduł do obsługi XMLRPC, a poza tym jest o wiele lżejszy i bardziej odpowiada moim wymaganiom (jak najbardziej nie mam nic do apacza, ale po prostu 80% czasu po prostu go nie wykorzystuję, a kompiluje się znacznie dłużej).
wget http://www.lighttpd.net/download/lighttpd-1.4.20.tar.bz2
tar -jxf lighttpd-1.4.20.tar.bz2
cd lighttpd-1.4.20
./configure --disable-ipv6
make
make install
cd ..
wget http://pl.php.net/get/php-5.2.8.tar.bz2/from/this/mirror
tar -jxf php-5.2.8.tar.bz2
cd php-5.2.8
./configure --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect --disable-ipv6 --with-xmlrpc
make
make test
make install

tak więc mamy już zainstalowane lighttpd i php w ich domyślnych lokalizacjach (czyli lighttpd w /usr/local/sbin, a php i php-cgi w /usr/local/bin). pozostała jeszcze ich konfiguracja – w przypadku php kopiujemy znajdujący się w katalogu ze źródłami php.ini-dist do /usr/local/lib i doklejamy do niego następującą linijkę :
cgi.fix_pathinfo = 1
do lighttpd kopiujemy domyślną konfigurację z katalogu doc w źródłach do /etc, czyli :
cp lighttpd-1.4.20/doc/lighttpd.conf /etc/
i wprowadzamy do niego nasze zmiany – po pierwsze wywalamy haszyk przy „mod_fastcgi” oraz dopisujemy według wzoru „mod_scgi” (na tej liście na początku). później jeszcze odkomentowywujemy (hę?) linijki dotyczące „fastcgi.server”, ewentualnie poprawiając zmienną bin-path (bądź socket), jeśli mamy binarkę phpowską w innej lokalizacji. aby możliwe było odwoływanie się przez serwer do rtorrenta (przez wspominany już XMLRPC oczywiście), musimy dodać obsługę tej możliwości :
scgi.server = (
"/RPC2" =>
( "127.0.0.1" =>
(
"socket" => "/home/torrent/rpc.socket", #zmien zgodnie z wpisem w konfiguracji rtorrenta
"check-local" => "disable",
"disable-time" => 0,
)
)
)

tak spreparowanego lighttpd jeszcze nie odpalamy, została nam konfiguracja rtorrenta.
oczywiście nie będziemy rtorrenta odpalać na koncie roota – bo przecież każdy admin wie, że jakikolwiek proces sieciopodobny odpalony z konta o UID równym jeden to potencjalnie bardzo duża dziura w zabezpieczeniach, którą nie wiadomo kto i nie wiadomo jak wykorzysta. tak więc utworzymy dla rtorrenta specjalne konto (ba, i nawet specjalną grupę!), z którego będzie on uruchamiany.
groupadd torrent
useradd -g torrent -d /home/torrent -s /bin/bash -m torrent

przechodzimy do folderu domowego naszego nowego użytkownika i tworzymy tam plik .rtorrent.rc, który będzie przechowywał ustawienia rtorrenta. nie będę się tutaj już nad jego konfiguracją rozwodził, odeślę tylko do jego wiki. nie zapominamy oczywiście o włączeniu obsługi XMLRPC w rtorrencie :
scgi_local = /home/torrent/rpc.socket
tak spreparowanego rtorrenta możemy spokojnie odpalić. na początku pewnie będzie się pluł o brak możliwości zapisu w niektórych katalogach – wtedy odpowiednio chownujemy (bądź chmodujemy).
i tutaj następuje wyjaśnienie tytułu tego wpisu :

rtorrent jest programem ncurse’owskim. z tego powodu za każdym razem, gdy go odpalamy, pojawia nam się jego konsolowy interfejs. większość mojego czasu spędzonego na konfigurację na tym serwerze poświęciłem właśnie tematowi „jak go, cholera jasna, schować, jednocześnie uruchamiając go z ograniczonego usera”. na myśl przyszedł oczywiście screen – z tym że działał on tylko na koncie roota. gdy chciałem go wywołać spod usera „torrent” (używając oczywiście su) :
su - torrent -c "screen rtorrent"
dostawałem piękny komunikat, że niemożliwe jest otwarcie mojego terminala, czyli /dev/pts/0 (bądź 1,2,3…). podobnym niepowodzeniem kończyło się dodawanie do komendy ampersandów bądź przekierowań strumenia do /dev/null – program się najzwyklej nie uruchamiał nie wyrzucając błędu (bądź wyrzucając go do /dev/null – hahaha), bądź bablając o jakimś „epoll”, bądź tworząc swoisty zombie process. problem ten też był związany z tym, że chciałem, aby rtorrent uruchamiał się wraz z uruchamianiem komputera – a wiadomo, że uruchomienie czegoś wywalającego cokolwiek do konsoli z poziomu skryptów rc.d jest niemożliwe. niestety, nie pomogło mi w tym problemie nawet google – jedyne skrypty, które się tam znajdowały, przewidywały użycie screena – i u mnie po prostu nie działały.
wtedy właśnie do akcji wkroczył dtach. przeczytałem o nim chyba przypadkowo na stronie rtorrenta – po przeczytaniu niezbyt zachęcającego napisu dtach does not, however, have the other features of screen, such as its support of multiple terminals or its terminal emulation support nie zniechęciłem się i ściągnąłem program (poszukałem już slackowskiej paczki, kompilowanie wszystkiego jest cholernie nużące, zwłaszcza na Duronie 750), i nastała dla mnie nowa era. polecenie :
su - torrent -c "dtach -n torrent rtorrent"
zachowała się tak, jak powinna. rtorrent został uruchomiony spod usera torrent, a jego output schowany gdzieś tam, nie obchodzi mnie gdzie. i to działa.
tutaj następuje koniec objaśnienia tytułu tego wpisu

mając już (względnie) bezpiecznego i dobrze skonfigurowanego rtorrenta, pora zadbać o bezpieczeństwo lighttpd. domyślnie cały czas ma on uprawnienia roota, w jego pliku konfiguracyjnym znajdują się jednak dyrektywy server.username i server.groupname – zmieniamy je do naszych upodobań i tworzymy odpowiednią grupę i użytkownika.

teraz pozostało nam tylko ściągnąć rtgui stąd i rozpakować go w naszych htdocs. zanim jednak będziemy się cieszyć możliwością zarządzania rtorrentem przez konsolę, musimy dopracować jeszcze jedną rzecz (to przedostatnia, i dość mała w porównaniu z resztą)

socket XMLRPC tworzony przez rtorrenta ma domyślne uprawnienia 755. lighttpd uruchomiony z ograniczonego konta nie ma więc prawa do zapisu do tego pliku, i jeśli będzie chciał się do tego socketa podpiąć, sypnie errorem do loga, a rtgui nie da rady połączyć się z rtorrentem. najprostszym rozwiązaniem jest po prostu chmod 777 tego socketa – bądź uruchomienie lighttpd jako root, ale mi jakoś to pierwsze wydaje się o wiele lepsze. problem tylko taki, że chmod będzie potrzebny za każdym razem, gdy uruchamiany będzie rtorrent. nie ma jednak problemu w uprzednim uruchomieniu rtorrenta, chmodnięciu na 777 rpc.socket i dopiero uruchomieniu lighttpd.

do ustawienia pozostał tylko config.php w katalogu rtgui, ale z tym już każdy powinien sobie poradzić.

znowu idę spać o wiele za późno.

Informacje o Daniel

freezingly cold soul
Ten wpis został opublikowany w kategorii komputer. Dodaj zakładkę do bezpośredniego odnośnika.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s