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

    В наличии: роутер 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, сделали очень продуманную систему с репозиторием приложений, унифицированной системой конфигов. Тянет на целый дистрибутив, только для роутеров.

    И, напоследок, несколько ссылок:
    Share post

    Comments 25

      +8
      Вместо этой надписи должна была появиться картинка с троллейбусом из буханки хлеба. К сожалению, мне стало лень в двадцать пятый раз её искать.

      Однако, ваше упорство в решении странных проблем лично меня, например, восхищает.
        +15
        image
          +3
          Кстати, очень искал подобные картинки, чтобы разбавить ими пост. Это идеально подходит!
            +5
            кто-то сделал хайрез версию рисованной картинки? :3
            она же другой была.
              +9
              Кто то нарисовал картинку на тему троллейбус из буханки хлеба, а ктото сделал хайрез на эту картинку. Вопрос остается прежним: НО ЗАЧЕМ? :))
                +4
                Кто-то нарисовал, но зачем?
                Кто-то сделал хайрез, но зачем?
                Кто-то, но зачем?
                Зачем? За хлебом!
                  0
                  тег сарказм — не поддерживается )))
                  –1
                  Сам хотел сделать, НО ЗАЧЕМ?
                    +1
                    Это художник сделал большую серию рисунков, правда не все из них такие удачные.
                  +1
                  О, новая версия! Фотография вместо карандашного скетча :)
                  0
                  На ночь глядя так и отлично заходит. Как раз уже меньше задумываешься, на кой это, а больше обращаешь внимание на новый для себя материал.
                    0
                    Вам аккамуль не жалко на своей приставке?
                      0
                      От USB же
                        0
                        продержался всю ночь на 96%
                        +1
                        «Торент» пишется с «р»…
                          +4
                          с двумя «р»*
                            +3
                            address пишется тоже с двумя d и s, но по-русски пишется просто «адрес».
                          +2
                          Всемогущий линукс.
                          • UFO just landed and posted this here
                              0
                              Элегантно! Чесать за правым ухом левой пяткой!

                              А какие проблемы возникли когда настраивали DSL-2650U?
                                0
                                И да, просил я статью про торрент — получай.

                                Следующая просьба, точнее вопрос: реально ли к 2650 роутеру подключить ЮСБ кабель принтера, и осуществлять печать через вай-фай и кабель к роутеру? Заранее за все спасибо )
                                  0
                                  комент ниже
                                  0
                                  нужно поднимать samba сервер, делать принтер сетевым, и уже на компьютере добавлять сетевой принтер.
                                  P.S. USB разъем в этом роутере и предназначался для сетевых принтеров.
                                    0
                                    Круто. А я думал для торрентов, ибо во всех обзорах роутер позиционировали как роутер со встроенным торрент клиентом.
                                      0
                                      Гмм… А подробнее чуток где почитать можно как правильно поднять сервак?

                                    Only users with full accounts can post comments. Log in, please.