Instalacja ctorrent na OpenWrt
Ostatnia zmiana: 2013-11-27 16:54

Tak, jeszcze jeden interfejs do ściągania torrentów. W porównaniu do innych ściąga jednocześnie torrenty (nie po kolei) i umożliwia graficzny (przez www), procentowy podgląd ściągania. Powstał na potrzeby jednego z użytkowników, a ponieważ nie mam żadnych sygnałów że nie działa, więc może się komuś jeszcze przydać. Całość przetestowano na Asus WL-500gP + dysk USB, ctorrent (Enhanced CTorrent), OpenWrt 0.9 Whiterussian (zwykłe webif lub x-wrt)
Jeżeli używasz OpenWrt Kamikaze - zobacz instalację yodctcs

Changelog

04.07.2007 - pierwsza wersja
19.07.2007 - możliwość uploadu plików przez www, listę plików czekających na pobranie oraz informację o wolnej przestrzeni na dysku
27.07.2007 - przenoszenie ściągniętych danych po zakończeniu, wznawianie pobierania przy zabiciu procesu (lub zaniku prądu)
17.10.2007 - Wersja ctorrent przeznaczona dla Whiterussian została usunięta. ZAINSTALUJ KAMIKAZE!

Zasada działania

- ściągnięty plik *.torrent wrzuca się (np. za pomocą ftp, samby lub interfejsu www) do określonego katalogu (downloads)
- co określony czas wszystkie znalezione nowe pliki są oznaczane i zaczyna się ich jednoczesne ściąganie.
- jeżeli ściąganie pliku zostanie zakończone, sam plik torrent, log oraz ściągnięta zawartość przenoszone są do odpowiedniego katalogu (downloads/done).

Program umożliwia także automatyczne wznawianie ściągania w przypadku zaniku prądu lub przez zastosowanie polecenia kill.

Dostęp do podglądu pobierania możliwy jest przez www (Status/Download statistic)


(kliknij, aby powiększyć)

Instalacja

Zakładam, że podłączony dysk jest w zamontowany w katalogu /mnt/disc0_1. Jeżeli nie, to należy w dalszej części odpowiednio zmodyfikować ścieżki oraz pamiętać o zmianie ścieżek w plikach.
Niezbędny jest enhanced ctorrent. Będąc zalogowanym przez ssh do rutera należy wykonać następujące polecenie:


        ipkg install http://eko.one.pl/openwrt/ctorrent_dnh3.2_mipsel.ipk 

(może być wymagane także zainstalowanie libopenssl oraz uclibcxx), a następnie instalujemy pliki:


        mkdir -p /mnt/disc0_1/downloads/
        mkdir -p /mnt/disc0_1/downloads/done
        wget http://eko.one.pl/openwrt/getdownload.sh -P /usr/sbin
        wget http://eko.one.pl/openwrt/status-download.sh -P /www/cgi-bin/webif/
        chmod 755 /usr/sbin/getdownload.sh
        chmod 755 /www/cgi-bin/webif/status-download.sh

W pliku /usr/sbin/getdownload.sh na samej górze znajdują się parametry programu (wszystkie można wyświetlić program ctorrent bez podania argumentów). Należy je zmienić i odpowiednio zmodyfikować stosowanie do posiadanego łącza.

Zostaje jeszcze okresowe przeglądanie kolejki. W tym celu należy wykonać odpowiedni wpis do crona


        echo "*/5 * * * * /usr/sbin/getdownload.sh" >> /etc/crontabs/root
        killall crond; /etc/init.d/S60cron start

(w tym przykładzie co 5 minut)

Należy pamiętać, że cron powinien być włączony (do ustawienia przez x-wrt).

Automatyzacja

Ponieważ zapisywanie plików na dysk, przechodzenie na stronę www serwera i robienie upload pliku może być trochę nudne, można całość zautomatyzować. Klikając na plik torrent na stronie otwiera się dialog z możliwością wyboru akcji (firefox). Można więc napisać odpowiedni program, który automatycznie prześle wskazany plik do rutera. Oto jego zawartość:


        #!/bin/sh
        URL=http://IP_RUTERA/cgi-bin/webif/status-download.sh
        curl --basic -u USER:HASLO -F uploadfile=@"$1;Content-Type: multipart/form-data" $URL > /dev/null 2>&1
        firefox -a firefox -remote "openURL($URL,new-tab)"

gdzie:
IP_RUTERA - adres ip rutera
USER - nazwa użytkownika do autoryzacji w webif
HASLO - hasło tego użytkownika

Plik należy zapisać pod nazwą np. upload_torrent w katalogu /usr/bin (należy pamiętać, że trzeba zainstalować program curl). Klikając na odnośnik do pliku torrent na stronie www należy wybrać akcję 'Otwórz za pomocą' i wskazać plik /usr/bin/upload_torrent. Plik zostanie automatycznie dodany do kolejki i otworzy się nowa zakładka wyświetlająca stronę statusu.

Zakończenie

Przy powyższym rozwiązaniu ctorrent nie będzie seedował danych, gdyż po zakończeniu ściągania są one natychmiast przenoszone do katalogu done. Jeżeli chcemy sedować (a powinniśmy chcieć!) to należy w pliku /usr/sbin/getdownload.sh linię


    (ctorrent $PARAM -X "mv \"&d\" $DONE" "$F" > "$F".log 2>/dev/null && mv "$F" $DONE && mv "$F".log $DONE; rm $ZN/"$F") &

zamienić na


    (ctorrent $PARAM "$F" > "$F".log 2>/dev/null && mv "$F" $DONE && mv "$F".log $DONE; rm $ZN/"$F") &

Ruterki zwykle mają ograniczone zasoby sprzętowe (pamięć ram) dlatego też należy pamiętać o ograniczeniu liczby jednocześnie ściąganych torrentów (np. do 4-5) i ograniczeniu w miarę możliwości liczby połączeń. Dobrze jest również utworzyć odpowiednio duży swap na dysku.

Należy również pamiętać o odblokowaniu portów wejściowych na firewallu w zakresie 2106 - 2706 (tcp)