Dodanie klienta torrent do routera z OpenWrt

Zawartość

A więc chcesz dodać klienta torrent do twojego routera z OpenWrt, aby móc pobrać tą metodą, chociażby obraz Raspbian, zapisać go na wcześniej podłączony i ustawiony dysk USB oraz mieć do niego dostęp z poziomu sieci lokalnej?

Nic prostrzego. Do tego celu wykorzystamy Transmission.

Sprawdzone w wersji OpenWrt 21.02 oraz OpenWrt 22.03

Instalacja i konfiguracja Transmission #

Instalacji możesz to dokonać z poziomu panelu administracyjnego przez przeglądarkę internetową (System > Software) lub też z poziomu terminala:

opkg update
opkg install transmission-daemon transmission-web luci-app-transmission

Aplikacja luci-app-transmission pozwoli nam na dostosowanie dodatkowych opcji z poziomu przeglądarki internetowej bez potrzeby edycji plików z poziomu terminala.

Pakiet transmission-daemon-openssl to program, który będzie działał w tle naszego routera, a transmission-web to osobny dostęp do naszego programu z poziomu przeglądarki internetowej, w celu dodania lub usunięcia pobieranego pliku.

Zaczniemy od konfiguracji ustawień.

Przechodzimy do panelu sterowania naszego routera, następnie Services > Transmission.

OpenWrt services transmission

Nim zaznaczymy konfigurację jako włączoną (Enabled), przejdźmy przez kilka ustawień. Najważniejsze z nich jest to, gdzie nasze pliki mają być zapisywane.

W sekcji Files and Locations wprowadzamy lokalizacje folderu w Downloads locations. W moim przypadku jest to na dysku USB zmontowanym jako /mnt/sda1. Dodatkowo mam włączone zapisywanie plików pobieranych (nieskończonych) w osobnym folderze (zaznaczamy Incomplete directory enabled).

W pozostałych ustawieniach (Miscellaneous) zmieniłem szyfrowanie z preferowane (Preferred) and wymuszone (Forced).

Ustawiłem również czarną listę (Blacklist), wybierając z iBlocklist listę level1 or Bluetack.

Resztę pozostawiam w ramach uznania.

Zaznaczmy opcję Enable na początku ustawień i klikamy Zapisz i Zastosuj (Save & Apply).


Jeżeli wasza aplikcaja luci-app-transmission zwraca informację o brakujących polach Run daemon as user oraz Run daemon as group, przez co nie ma możliwości zapisania ustawień, tak jak pokazane poniżej, należy podłużyć się terminalem, aby to naprawić.

luci-app-transmission 21.02 non-empty value

sed -i '/"file": {/a\\t\t\t\t"/etc/passwd": [ "read" ],\n\t\t\t\t"/etc/group": [ "read" ],' /usr/share/rpcd/acl.d/luci-app-transmission.json
service rpcd restart

Uruchomienie Transmission #

Niestety, na chwilę obecną, mimo, że w luci-app-transmission opcja Enabled jest ustawiona i powinna domyślnie uruchomić transmission-daemon, tak się nie dzieje.

Aby uruchomić nasz program, z poziomu terminala wydajemy komendę:

/etc/init.d/transmission start

Po czym udajemy się do panelu transmission, domyślnie http://192.168.1.1:9021/transmission/web/ gdzie dodajemy nasz torrent.

Transmission downloading raspbian buster full

Aby zatrzymać Transmission możemy zabić proces z poziomu panelu administracyjnego routera System > Processes lub z poziomu terminala:

/etc/init.d/transmission stop

Jeżeli mamy jakikolwiek problemy z uruchomieniem, zalecam wykonanie komendy logread z poziomu terminala w celu przeanalizowania błędów.

Jeżeli chcemy ręcznie zmienić ustawienia w pliku z poziomu terminala, po zatrzymaniu daemona wystarczy wy-edytować /etc/config/transmission. Czasem może być to niezbędne, jeżeli za bardzo namieszamy w ustawieniach.

W sekcji Config file directory z poziomu przeglądarki, lub option config_dir w pliku konfiguracyjnym zalecam zmianę z /tmp/transmission na /root/transmission. Dzięki temu folder roboczy demona transmission zapisany będzie w stałej lokalizacji a nie tymczasowej. Ma to znaczenie w przypadku pliku Blacklist, który zostanie na routerze po jego ponownym uruchomieniu.

Problem w OpenWrt 22.03.0 #

Jak to z każdą aktualizacją bywa, czasem coś się psuje lub przestaje działać w systemie.

Tranmission w wersji 3.00 w swoim skrypcie startowym używa coś takiego jak procd_ujail oraz seccomp. Bez zagłębiania się w to, do czego te pakiety są przydatne, skupię się tylko na tym, że powodują one problem z Transmission (Issue #19376).

Otórz plik konfiguracyjny nie zapisuje się poprawnie. W przypadku zapisywania plików wyświetlany jest błąd związany z brakiem miejsca na dysku lub też torrent nie przechodzi finalnej weryfikacji po pobraniu. Jednym słowem kupa.

Aby ten problem naprawić, można usunąć pakiet procd_ujail oraz procd_seccomp, jednakże jest to rozwiązanie, które nie zawsze się sprawdzi, gdyż inne pakiety w systemie mogą wymagać ich do pracy, w związku z tym mogą one zostać zainstalowane mimo woli lub też odinstalowanie (opkg remove ...) nie powiedzie się.

Innym rozwiązaniem, niestety również krótkoterminowym jest zmodyfikowanie skryptu startowego transmission. Na szczęście (lub też nie), transmission nie jest aktualizowany tak często, więc to rozwiązanie może się stać swojego rodzaju rozwiązaniem długoterminowym.

W pierwszej kolejności musimy zatrzymać transmission.

/etc/init.d/transmission

Następnie rozpoczynamy edycję pliku inicjującego. W tym celu używam nano ale równie dobrze możesz wykorzystać wbudowany vim.

nano /etc/init.d/transmission

Przewijamy plik aż do momentu, gdy zobaczymy sekcję secomp_path oraz procd_add_jail, po czym komentujemy (#) odpowiednie linie tak jak pokazano poniżej.

#       seccomp_path="/etc/seccomp/transmission-daemon.json"
#       if [ -f "$seccomp_path" ]; then
#               procd_set_param seccomp "$seccomp_path"
#       fi

        if [ -z "$USE" ]; then
                procd_set_param limits core="0 0"
        else
                procd_set_param limits core="0 0" as="$USE $USE"
                logger -t transmission "Starting with $USE virt mem"
        fi

        [ -d "$web_home" ] && procd_set_param env TRANSMISSION_WEB_HOME="$web_home"
        [ "$ca_bundle" -gt 0 ] && procd_set_param env CURL_CA_BUNDLE="$ca_bundle_file"

#       procd_add_jail transmission log
#       procd_add_jail_mount "$config_file"
#       procd_add_jail_mount_rw "$config_dir/resume"
#       procd_add_jail_mount_rw "$config_dir/torrents"
#       procd_add_jail_mount_rw "$config_dir/blocklists"
#       procd_add_jail_mount_rw "$config_dir/stats.json"
#       procd_add_jail_mount_rw "$download_dir"
        web_home="${web_home:-/usr/share/transmission/web}"
#       [ -d "$web_home" ] && procd_add_jail_mount "$web_home"
#       [ -f "$ca_bundle_file" ] && procd_add_jail_mount "$ca_bundle_file"
        procd_close_instance
}

Upewnij się, że dodałeś komentarz zarówno do seccomp jak i jail, gdyż pozostawiając seccomp doświadczymy notorycznego wieszania się naszego daemona transmission.

Zapisujemy nasz plik i uruchamiamy ponownie transmission.

/etc/init.d/transmission start

Takim sposobem transmission będzie działać poprawnie w OpenWrt 22.03.0. Zobaczymy, czy aktualizacja wyżej wymienionych pakietów, lub całego OpenWrt naprawi ten problem. Nie oczekiwałbym zbytniego zaangarzowania w ten błąd ze strony twórcy aplikacji.

Pozdrawiam.

Komentarze