OpenWrt - torrenty
Instalacja ctorrent na OpenWrtOstatnia zmiana: 2008-03-29 09:27
1. Changelog
2. Zasada działania
3. Instalacja
4. Automatyzacja
5. Zakończenie
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 wersja19.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
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
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
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)"
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") &
(ctorrent $PARAM "$F" > "$F".log 2>/dev/null && mv "$F" $DONE && mv "$F".log $DONE; rm $ZN/"$F") &
Należy również pamiętać o odblokowaniu portów wejściowych na firewallu w zakresie 2106 - 2706 (tcp)