В наличии: роутер Dlink DSL2650u из предыдущего топика, который имеет USB хост и прошит OpenWRT прошивкой, и приставка Dingoo A320, на которую установлен OpenDingux ( Linux для Dingoo ).
Задача: Организовать круглосуточную раздачу торентов, чтобы немного поднять рейтинг на трекере. Убить целый день интересным занятием и повысить свои знания линукса.
Топик написан больше в развлекательных целях, нежели как практическое руководство, так как многих может смутить целесообразность затеянного.
Что можно полезного извлечь от топика?
Сначала предпринимались попытки поднять раздачу прямо на роутере: в USB вставляется флешка на 4гб и оттуда раздаются торенты. Следуя странице вики, установил необходимые пакеты командой:
После подключения флешка нормально определилась и появились два устройства /dev/sda и /dev/sda1. Флешка была форматирована в FAT32, поэтому пришлось доставить пакеты:
Последние два пакеты необязательны, поскольку mount монтирует в cp437 кодировке, и никакие параметры о смене кодировки не принимает. В любом случае, если не получается примонтировать раздел, нужно причину смотреть в выводе dmesg.
Можно настроить автомонтирование, для этого нужно отредактировать файл
После подключения и монтирования флешки, нужно установить transmission. Почему он? Потому что он может работать как демон, имеет rpc и web интерфейс. RPC означает возможность контролировать раздачу прямо на компьютере в удобном gui интерфейсе. Да и первое руководство, найденное в интернете было именно про него. Поэтому:
После установки нужно подредактировать конфигурационный файл
После настройки и запуска transmission пришло разочарование — роутер слишком слаб для этого. Заканчивалась оперативная память, процессор был загружен под завязку, и через несколько минут роутер переставал отвечать на обращения. Единственным спасением была перезагрузка. Попробовал сделать свап раздел на флешке и подключить его к роутеру. Разбил флешку на два раздела, под свап выделил 100мб, отформатировал, подключил… но особо ситуация не изменилась. Показания команды free показывало, что в свап занимался не больше чем на 1мб.
Поэтому полет мысли полетел дальше.
Я продолжил думать, что можно подключить в доступным usb порт с пользой для дела. На ум пришел только мобильный телефон Motorola Z6 ( на Linux ), и Dingoo A320. Поскольку моторолы под рукой не оказалось, продолжил эксперименты с дингой. С Dingux ( и OpenDingux ), можно сделать сеть через UsbNet. Подсмотрев название модуля ( cdc_ether ), принялся устанавливать его в OpenWRT. Такой пакет оказался, и без проблем установился:
После подключения в
Осталось заставить Dingoo получать данные по DHCP, а не устанавливать статичный 10.1.0.2. Покопавшись в скрипте инициализации
Cпросил у умных людей, которые имеют отношение к разработки OpenDingux, где можно переопределить их. Поскольку прав записи в /etc нет ( там squashfs образ ), то разработчики вынесли возможность переопределить переменные в файл
Дополнительно нужно прописать адрес DNS сервера в
Перезагрузив все службы, убедился в работоспособности схемы: из сети пингуется Dingoo, из Dingoo пингуется сеть и интернет. Отдельная проблема была, когда я назначил IP не 192.168.1.2, а побольше — 192.168.1.254, и не обратил внимание на маску подсети ( стандартная маска у Dingoo — 255.255.255.252 ), и долго не мог понять, почему ничего не работает.
В OpenDingux нет такого удобного репозитория, как в OpenWRT, поэтому transmission пришлось собирать ручками. Toolchain ( набор утилит для компилирования под определенную платформу ) взят отсюда. Скачал исходники, почитал
По зависимостям пришлось собрать openssl, libevent и curl. Скопировал бинарный файл transmission-daemon вместе с недостающими библиотеками на Dingoo в /usr/local/apps/transmission и создал обычным скрипт для запуска. Получился такой список файлов:
и такой скрипт:
Была проблема с запуском, transmission писал кратко «Bus error». Методом научного тыка выяснилось, что проблема исчезает, если не указывать watch директорию. Возможно ядро в Dingux без поддержки inotify.
Вы нереально настойчивы, если дочитали до этого момента. Сейчас только качаю торенты для последующей раздачи. Опытным путем подобраны лимиты на количество пиров ( 50 ), на скорость загрузки ( 300кбайт/сек ) и отдачи ( 200кбайт/сек ). Работает стабильно, можно экспериментировать с повышением лимитов.
Почему не поднять на роутере все-таки, при равном железе? Во-первых менее интересно, во-вторых, у роутера еще целая куча других задач — раздавать интернет и забирать у него ресурсы нехорошо. MiniSD карта на 4гб дает возможность накачать небольшое количество торентов для раздачи, но и на том спасибо.
Веб-интерфейс не устанавливал, поскольку нужно еще с веб-сервером играться. Контролирую через RPC и Transgui.
Почему не купить NAS для этих целей? Пока не готов к столь большой покупке, да и не так активно использую торенты. В данной задаче для меня более интересным было решение, а не результат.
Хочется выразить благодарность команде разработчиков OpenWRT, сделали очень продуманную систему с репозиторием приложений, унифицированной системой конфигов. Тянет на целый дистрибутив, только для роутеров.
И, напоследок, несколько ссылок:
Задача: Организовать круглосуточную раздачу торентов, чтобы немного поднять рейтинг на трекере. Убить целый день интересным занятием и повысить свои знания линукса.
Топик написан больше в развлекательных целях, нежели как практическое руководство, так как многих может смутить целесообразность затеянного.
Что можно полезного извлечь от топика?
- Узнать как подключать и монтировать флешки к роутеру
- Как все-таки поднять торент-клиент (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, сделали очень продуманную систему с репозиторием приложений, унифицированной системой конфигов. Тянет на целый дистрибутив, только для роутеров.
И, напоследок, несколько ссылок: