Pull to refresh

Торент на Dingoo A320, или зачем оно надо?

Reading time 5 min
Views 5.1K
В наличии: роутер Dlink DSL2650u из предыдущего топика, который имеет USB хост и прошит OpenWRT прошивкой, и приставка Dingoo A320, на которую установлен OpenDingux ( Linux для Dingoo ).
Задача: Организовать круглосуточную раздачу торентов, чтобы немного поднять рейтинг на трекере. Убить целый день интересным занятием и повысить свои знания линукса.
Топик написан больше в развлекательных целях, нежели как практическое руководство, так как многих может смутить целесообразность затеянного.
Что можно полезного извлечь от топика?
  • Узнать как подключать и монтировать флешки к роутеру
  • Как все-таки поднять торент-клиент (transmission) на роутере
  • Как подключить UsbNet устройство и установить bridge в локальную сеть
  • Как можно интересно убить целый день
Немного технических характеристик железяк:
  • Роутер: 300mhz CPU, ~30mb ( 29668kb ) RAM
  • Dingoo A320: 333mhz CPU ( разгоняется до 430mhz ), ~30mb ( 29500kb ) RAM
Как видно, характеристики похожи.

Первые попытки


Сначала предпринимались попытки поднять раздачу прямо на роутере: в USB вставляется флешка на 4гб и оттуда раздаются торенты. Следуя странице вики, установил необходимые пакеты командой:

opkg install usbutils kmod-usb-core kmod-usb-ohci kmod-usb-uhci kmod-usb2 kmod-usb-storage kmod-usb-storage-extras block-mount block-hotplug kmod-fs-ext4

После подключения флешка нормально определилась и появились два устройства /dev/sda и /dev/sda1. Флешка была форматирована в FAT32, поэтому пришлось доставить пакеты:

opkg install kmod-fs-vfat kmod-nls-cp437 kmod-nls-utf8 kmod-nls-cp1251

Последние два пакеты необязательны, поскольку mount монтирует в cp437 кодировке, и никакие параметры о смене кодировки не принимает. В любом случае, если не получается примонтировать раздел, нужно причину смотреть в выводе dmesg.
Можно настроить автомонтирование, для этого нужно отредактировать файл /etc/config/fstab. За автомонтирование отвечает ранее установленный пакет block-hotplug. Подробнее в документации OpenWRT.
После подключения и монтирования флешки, нужно установить transmission. Почему он? Потому что он может работать как демон, имеет rpc и web интерфейс. RPC означает возможность контролировать раздачу прямо на компьютере в удобном gui интерфейсе. Да и первое руководство, найденное в интернете было именно про него. Поэтому:

opkg install transmission-daemon transmission-web

После установки нужно подредактировать конфигурационный файл /etc/config/transmission. Настройка transmission в OpenWRT не суть топика, поэтому за дополнительными данными обращаться сюда. Веб-интерфейс доступен по адресу 192.168.1.1:9091, RPC подключается туда же. В качестве RPC-клиента был скачан и установлен transmission-remote-gui-bin пакет из AUR'а ( в Archlinux ).
После настройки и запуска transmission пришло разочарование — роутер слишком слаб для этого. Заканчивалась оперативная память, процессор был загружен под завязку, и через несколько минут роутер переставал отвечать на обращения. Единственным спасением была перезагрузка. Попробовал сделать свап раздел на флешке и подключить его к роутеру. Разбил флешку на два раздела, под свап выделил 100мб, отформатировал, подключил… но особо ситуация не изменилась. Показания команды free показывало, что в свап занимался не больше чем на 1мб.

Поэтому полет мысли полетел дальше.

И тут пришла бредея



Я продолжил думать, что можно подключить в доступным usb порт с пользой для дела. На ум пришел только мобильный телефон Motorola Z6 ( на Linux ), и Dingoo A320. Поскольку моторолы под рукой не оказалось, продолжил эксперименты с дингой. С Dingux ( и OpenDingux ), можно сделать сеть через UsbNet. Подсмотрев название модуля ( cdc_ether ), принялся устанавливать его в OpenWRT. Такой пакет оказался, и без проблем установился:

opkg install kmod-usb-net-cdc-ether

После подключения в ifconfig появился новый интерфейс: usb0. Установив по DHCP IP адрес ( на Dingux используется udhcpd ), проверил — все работает. Задача стояла в том, чтобы раздать интернет по usb0, и, желательно, делать доступ из локальной сети. В голове завертелись мысли о создании ряда правил для iptables, для маскарадинга, для переброса пакетов и т.п., но решение оказалось намного проще: нужно в файле /etc/config/network в секции config interface lan добавить usb0 в ifname. Получилась вот такая строчка:

option ifname "eth1.0 usb0"

Осталось заставить Dingoo получать данные по DHCP, а не устанавливать статичный 10.1.0.2. Покопавшись в скрипте инициализации /etc/init.d/network, увидел, что используются несколько пользовательских переменных.

if [ -z $DINGOO_IP_ADDRESS ]; then DINGOO_IP_ADDRESS="10.1.0.2"; fi
if [ -z $PC_IP_ADDRESS ]; then
if [ $DINGOO_IP_ADDRESS != "10.1.0.1" ]; then PC_IP_ADDRESS="10.1.0.1"
else PC_IP_ADDRESS="10.1.0.2"
fi
fi
if [ -z $DINGOO_NETMASK ]; then DINGOO_NETMASK="255.255.255.252"; fi
if [ -z $PC_NETMASK ]; then PC_NETMASK=$DINGOO_NETMASK; fi


Cпросил у умных людей, которые имеют отношение к разработки OpenDingux, где можно переопределить их. Поскольку прав записи в /etc нет ( там squashfs образ ), то разработчики вынесли возможность переопределить переменные в файл /usr/local/etc/initvars. Заставить по DHCP получать IP у меня не получилось, поэтому решил прописать вручную IP адрес 192.168.1.2:

DINGOO_IP_ADDRESS=192.168.1.2
PC_IP_ADDRESS=192.168.1.1
DINGOO_NETMASK=255.255.255.0


Дополнительно нужно прописать адрес DNS сервера в /usr/local/etc/resolv.conf

nameserver 192.168.1.1

Перезагрузив все службы, убедился в работоспособности схемы: из сети пингуется Dingoo, из Dingoo пингуется сеть и интернет. Отдельная проблема была, когда я назначил IP не 192.168.1.2, а побольше — 192.168.1.254, и не обратил внимание на маску подсети ( стандартная маска у Dingoo — 255.255.255.252 ), и долго не мог понять, почему ничего не работает.

Устанавливаем transmission


В OpenDingux нет такого удобного репозитория, как в OpenWRT, поэтому transmission пришлось собирать ручками. Toolchain ( набор утилит для компилирования под определенную платформу ) взят отсюда. Скачал исходники, почитал ./configure --help, отключив все ненужное начал пробовать компилировать.

./configure --host=mipsel-linux-uclibc --disable-gtk --disable-mac --disable-cli --disable-libnotify --disable-libappindicator --disable-libcanberra --disable-nls --disable-utp
make


По зависимостям пришлось собрать openssl, libevent и curl. Скопировал бинарный файл transmission-daemon вместе с недостающими библиотеками на Dingoo в /usr/local/apps/transmission и создал обычным скрипт для запуска. Получился такой список файлов:

ls /usr/local/apps/transmission/
libcurl.so.4 libevent-2.0.so.5 transmission transmission-daemon


и такой скрипт:

#!/bin/sh
LD_LIBRARY_PATH=.
./transmission-daemon -T -w /usr/local/torrent/ -g /usr/local/torrent/config -a 192.168.1.* -e /usr/local/torrent/log


Была проблема с запуском, transmission писал кратко «Bus error». Методом научного тыка выяснилось, что проблема исчезает, если не указывать watch директорию. Возможно ядро в Dingux без поддержки inotify.

Заключение


Вы нереально настойчивы, если дочитали до этого момента. Сейчас только качаю торенты для последующей раздачи. Опытным путем подобраны лимиты на количество пиров ( 50 ), на скорость загрузки ( 300кбайт/сек ) и отдачи ( 200кбайт/сек ). Работает стабильно, можно экспериментировать с повышением лимитов.

Почему не поднять на роутере все-таки, при равном железе? Во-первых менее интересно, во-вторых, у роутера еще целая куча других задач — раздавать интернет и забирать у него ресурсы нехорошо. MiniSD карта на 4гб дает возможность накачать небольшое количество торентов для раздачи, но и на том спасибо.
Веб-интерфейс не устанавливал, поскольку нужно еще с веб-сервером играться. Контролирую через RPC и Transgui.
Почему не купить NAS для этих целей? Пока не готов к столь большой покупке, да и не так активно использую торенты. В данной задаче для меня более интересным было решение, а не результат.

Хочется выразить благодарность команде разработчиков OpenWRT, сделали очень продуманную систему с репозиторием приложений, унифицированной системой конфигов. Тянет на целый дистрибутив, только для роутеров.

И, напоследок, несколько ссылок:
Tags:
Hubs:
+37
Comments 25
Comments Comments 25

Articles