Page 3 of 7 FirstFirst 12345 ... LastLast
Results 31 to 45 of 95

Thread: Кросс-компиляция rTorrent

  1. #31
    Найти libtorrent (сейчас это libtorrent-0.12.6), скомпилированный под Вашу платформу с опцией --with-posix-fallocate

    Или скомпилировать самому, вот инструкции:
    http://code.google.com/p/wl500g/wiki...CustomFirmware
    http://vectormm.net/linux/60-samosto...-rtorrent.html

    Если руки дойдут и получиться - выложу сюда

  2. #32
    Quote Originally Posted by A1ex View Post
    нет , виртуальный диск там маленький, место кончилось. А с увеличением возиться не хотелось.

    p.s. список пакетов, которые я ставил на lenny для сборки toolchain и rtorrent
    Code:
    subversion gawk g++  bison bzip2 patch flex libwww-perl libtool automake curl gettext make libcurl4-openssl-dev
    уф, наконец-то победил тулчейн
    отработало на debian 5, в процессе пришлось раз 5 увеличивать размер виртуальних дисков. в итоге получилось - 8Гб для системы, 6Гб для каталога optware (всего виртуалка занимает 7,5 Гб).

    в итоге вызов "/optware/oleg/make toolchain" корректно отработал.

    Такой вопрос от новичка: хочу скомпилировать поддержку файловой системы YAFFS2, чтоб флешки подольше жили в роутере.
    Исходники есть, в корне имеется файл Makefile.
    Подскажите, в какую директорию optware положить сорцы YAFFS'а и откуда и какой командой запускать компиляцию?

    Ну или, например, тот же rtorrent - в какой каталог класть сорцы и как запускать компиляцию?
    Last edited by brain-ripper; 27-03-2010 at 16:09.

  3. #33
    Ну или, например, тот же rtorrent - в какой каталог класть сорцы и как запускать компиляцию?
    C той же папки /optware/oleg запустить make rtorrent.
    Скрипт полезет в /optware/make и будет искать там rtorrent.mk, который содержит опции компиляции, патчей и прочего. В результате получите тот же вариант, если бы сделали на роутере ipkg install rtorrent.
    По идее для Вашей файловой системы должен быть аналогичный *.mk файл.
    Иначе набирать опции компиляции Вам придётся самостоятельно, по аналогии с другими файлами там же.

  4. #34

    rtorrent и фрагментация

    Есть ли возможность заменить кросс-компилер gcc-4.1.1-uclibc-0.9.28 на более совершенный (пусть и не такой компактный)?
    Дело в том, что на Асусе до сих пор rtorrent жутко фрагментирует все файлы. Дело в том, что функция posix_fallocate, которая наконец-то включена в libtorrent (библиотека rtorrent'а) для захвата цельного пространства на диске под файлы, не имплементирована в самом компиляторе, там стоит заглушка и извинения в документации.
    Соответственно для прошивки Олега posix_fallocate отключены в makefile детектом uclibc компилятора

  5. #35
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    brain-ripper:
    ссылку на инструкцию по добавлении пакетов я давал в этой теме здесь: http://wl500g.info/showpost.php?p=95785&postcount=10

    haccker:
    была подобная попытка: http://wl500g.info/showthread.php?t=20841 Однако, до полноценного нового тулчейна оптваре еще далеко. Основная причина --- кто-то должен этим серьезно заняться.

  6. #36

    спасибо за ответ

    На гугле народ использует тулчейн с gcc-4.2.4-uclibc-0.9.30 с теми ж проблемами.
    Думаю в данном случае мне проще будет самому дописать реализацию posix_fallocate.
    Last edited by haccker; 28-03-2010 at 12:36.

  7. #37
    Quote Originally Posted by haccker View Post
    На гугле народ использует тулчейн с gcc-4.2.4-uclibc-0.9.30 с теми ж проблемами.
    Думаю в данном случае мне проще будет самому дописать реализацию posix_fallocate.
    интересно было бы потом поглядеть

  8. #38
    Проблема оказалась несколько глубже, кросс-компиляторы, вплоть до последнего рабочего, который мне попался gcc-4.2.4-uclibc-0.9.30 не в состоянии реализовать функцию posix_fallocate.
    Так что я решил просто дописать функцию захвата и заполнения файла нулями в саму библиотеку rtorrent'a.
    К сообщению приложено 2 пропатченых библиотеки libtorrent_0.12.6 : с TEXT PADDING и ZERO PADDING. Библиотека c TEXT PADDING вместо нулей вписывает текст NO MORE FRAGMENTATION, по этому тексту удобно наблюдать за заполнением файла и вы уверенны что он создан и rtorrent работает как надо.
    Библиотека c ZERO PADDING рекомендуется для настроенного rtorrent'a - заполнение нулями даёт возможность предварительного прослушивания/просмотра недокачанных файлов плеерами.

    Дамп области файла, где хорошо видно границу закачанного блока данных в зарезервированное пространство: http://img6.imageshack.us/img6/9757/...ionpadding.jpg

    Как пользоваться простому юзеру:
    Обновиться до rtorrent 0.8.6 (libtorrent 0.12.6), сейчас для этого достаточно набрать, предварительно остановив программу:
    ipkg update
    ipkg upgrade rtorrent
    ipkg upgrade libtorrent (если это не произойдёт автоматически)

    Подменить библиотеку libtorrent скачанной отсюда с архива, обычно достаточно заменить только файл: /opt/lib/libtorrent.so.11.0.6, это должен быть файл около мегабайта размером, не симлинк. У Вас путь может быть другим.
    Не забудьте добавить в rtorrent.conf строчку system.file_allocate.set = yes

    Если кому интересно код патча с ZERO PADDING:
    Code:
    root@darkstar:/wl500g/optware/oleg/builds/libtorrent/src/data# cat socket_file.cc.diff
    114,135c114
    <   //return !posix_fallocate(m_fd, offset, length);
    <   {
    <    bool success;
    <    char buf[ 4 * 1024 ] = {0};
    <    uint64_t len;
    <    uint64_t sb = sizeof( buf );
    <
    <    if (offset > length) throw internal_error("SocketFile::posix_fallocate()incorrect offset");
    <
    <    len = length-offset;
    <    success = 1;
    <    lseek(m_fd, offset, SEEK_SET);
    <    while ( len > 0 && success )
    <     {
    <      if (len < sb) sb = len;
    <      len -= sb;
    <      success = write( m_fd, buf, sb );
    <     }//while
    <
    <     lseek(m_fd, offset, SEEK_SET);
    <     return true;
    <   }//block
    ---
    >   return !posix_fallocate(m_fd, offset, length);
    Код патча с TEXT PADDING:
    Code:
    root@darkstar:/wl500g/optware/oleg/builds/libtorrent/src/data# cat socket_file.cc.text_padding.diff
    114,147c114
    <   //return !posix_fallocate(m_fd, offset, length);
    <   {
    <    bool success;
    <    char buf[ 4 * 1024 ] = {0};
    <    uint64_t len;
    <    uint64_t sb = sizeof( buf );
    <    uint64_t i;
    <
    <    if (offset > length) throw internal_error("SocketFile::posix_fallocate()incorrect offset");
    <    //return false;
    <
    <    //fill in padding buffer
    <
    <    //printf("sb = %i \r\n", sb);
    <    for (i=0;i<sb-27;i+=32) {
    <     strncpy(&buf[i]," -~+= NO MORE FRAGMENTATION =+~- ",32);
    <    }
    <
    <    len = length-offset;
    <    success = 1;
    <    lseek(m_fd, offset, SEEK_SET);
    <    while ( len > 0 && success )
    <     {
    <      if (len < sb) sb = len;
    <      len -= sb;
    <      success = write( m_fd, buf, sb );
    < //     printf("success = %i, len = %i,", success, len );
    < //     printf(" sb = %i \r\n", sb );
    <
    <     }//while
    <
    <     lseek(m_fd, offset, SEEK_SET);
    <     return true;
    <   }//block
    ---
    >   return !posix_fallocate(m_fd, offset, length);
    Тестирование работоспособности:

    до патча:
    root# filefrag Ferry_143.mp3
    Ferry_143.mp3: 1282 extents found, perfection would be 1 extent
    после патча:
    root# filefrag Ferry_140.mp3
    Ferry_140.mp3: 1 extent found

    Не забывайте, что для захвата пространства на диске роутеру может потребоваться значительное время, ведь максимальная скорость работы с диском колеблется в пределах 3.5МБайт/сек. Тоесть для первичного создания файла в таком режиме потребуется примерно столько же времени, сколько на перехеширование. Клиент на это время блокируется.

    Прошу отписаться тех, кто скачал и потестировал пропатченную библиотеку.
    Attached Files Attached Files

  9. #39

    Решение для rtorrent против фрагментации

    Пока пропатчил библиотеку libtorrent_0.12.6, полёт нормальный:

    Тестирование на файлах по ~100МБ:
    до патча:
    root# filefrag Ferry_143.mp3
    Ferry_143.mp3: 1282 extents found, perfection would be 1 extent
    после патча:
    root# filefrag Ferry_140.mp3
    Ferry_140.mp3: 1 extent found

    Как говорится, результат говорит сам за себя

    theMIROn, код пока такой:
    с ZERO PADDING:
    Code:
    root@darkstar:/wl500g/optware/oleg/builds/libtorrent/src/data# cat socket_file.cc.diff
    114,135c114
    <   //return !posix_fallocate(m_fd, offset, length);
    <   {
    <    bool success;
    <    char buf[ 4 * 1024 ] = {0};
    <    uint64_t len;
    <    uint64_t sb = sizeof( buf );
    <
    <    if (offset > length) throw internal_error("SocketFile::posix_fallocate()incorrect offset");
    <
    <    len = length-offset;
    <    success = 1;
    <    lseek(m_fd, offset, SEEK_SET);
    <    while ( len > 0 && success )
    <     {
    <      if (len < sb) sb = len;
    <      len -= sb;
    <      success = write( m_fd, buf, sb );
    <     }//while
    <
    <     lseek(m_fd, offset, SEEK_SET);
    <     return true;
    <   }//block
    ---
    >   return !posix_fallocate(m_fd, offset, length);
    До полноценной реализации с проверками поддержки нативного posix_fallocate ядром и файловой системой далеко, да и некогда разбираться, до переноса в glibc ещё очень далеко, как минимум надо изучить реализацию на других платформах (на slackware,FreeBSD7 сходу не нашёл например), там одних только вариантов возвратов десятки.
    А здесь хватит.

    Здесь описано более подробно и выложены пропатченные библиотеки: http://wl500g.info/showthread.php?p=191197#post191197
    Last edited by haccker; 29-03-2010 at 12:50.

  10. Кросс-компиляция rtorrent

    Здравствуйте!
    Упражняюсь в кросс компиляции.
    Стенд: Ubuntu 10.10, установлены след пакеты для компиляции:
    Code:
    sudo apt-get install gcc cvs subversion flex bison make pkg-config rsync gettext libglib2.0-dev autoconf libtool automake sudo patch bzip2 gzip wget sed build-essential texinfo
    Тулчейн вчера худо-бедно победил, transmission победил, теперь воюю с rtorrent.
    Компиляция вываливается с ошибкой:
    Code:
    Fatal server error:
    Server is already active for display 0
            If this server is no longer running, remove /tmp/.X0-lock
            and start again.
    
    
    Please consult the The X.Org Foundation support
             at http://wiki.x.org
     for help.
    
     ddxSigGiveUp: Closing log
    /opt/optware/oleg/builds/rtorrent/libtool: line 832: X.libs:: command not found
    /opt/optware/oleg/builds/rtorrent/libtool: line 766: libtool: link: Failed to create `.libs': command not found
    make[4]: *** [rtorrent] Error 1
    Как-то непонятно, какое иксы могут иметь отношение к rtorrent, в поиске такую же ошибку не нашел -- буду рад советам про траблшутингу.

    Ну а цель конечно, deluge.

  11. #41
    Упражняюсь в кросс компиляции.
    Стенд: Ubuntu 10.10, установлены след пакеты для компиляции:
    Для Ubuntu есть мастер Makefile - http://www.nslu2-linux.org/Makefile
    Все делаете так - http://www.nslu2-linux.org/wiki/Optw...ckageToOptware ?

    Сам немного "балуюсь" кросс компиляцией.
    Могу попробовать собрать rtorrent, правда для совсем другой платформы.
    После плясок с бубном вокруг нескольких дистрибутивов Linux остановился на Mandriva 2010.0 и Debian 5.06. C остальными были проблемы. Все под VirtualBox.

    PS deluge слишком ресурсоемок для таких железок.
    PPS Если не ошибаюсь, для сборки deluge понадобится cmake, cmake кросскомпиляцией не собирается, только нативно. Хотя возможно я тут путаю с другим пакетом.

  12. Отличный туториал, спасибо!
    Я ориентировался на посты здесь на форуме, но в них было несколько ошибок.

    Если не трудно, попробуйте откомпилировать rtorrent.

  13. #43
    Quote Originally Posted by dfayruzov View Post
    Если не трудно, попробуйте откомпилировать rtorrent.
    Сегодня утром попробовал. Вываливается с аналогичной ошибкой.
    Потом попробовал собрать в текстовом режиме, без запуска иксов. В этом случае ругается, что не запущен X-сервер.

    PS Для работы rtorrent нужна свежая версия xmlrpc-c. Собираться должно, по идее, с любой. Насколько помню перед ошибкой упоминается именно эта библиотека. В качестве танца с бубном можно взять версию посвежее 1.06.41 с http://sourceforge.net/projects/xmlrpc-c/files/
    Шансов, что это поможет - немного.
    Забавненько.

    PS Собирал под Mandriva 2010.0 для arm marvell 88F6281. Будет время, попробую под дебианом. Но дело похоже не в этом.

  14. #44
    Quote Originally Posted by dfayruzov View Post
    Как-то непонятно, какое иксы могут иметь отношение к rtorrent, в поиске такую же ошибку не нашел -- буду рад советам про траблшутингу.
    Никакого отношения к rtorrent иксы, конечно, не имеют. Имеет же, скорее всего, некорректное раскрытие выражений вида
    args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
    Т.е. соотв. $arg - пустой.
    Вам же выдались номера строчек в libtool - ну и смотрите, что там не так.

  15. Quote Originally Posted by Novik View Post
    Никакого отношения к rtorrent иксы, конечно, не имеют. Имеет же, скорее всего, некорректное раскрытие выражений вида
    args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
    Т.е. соотв. $arg - пустой.
    Вам же выдались номера строчек в libtool - ну и смотрите, что там не так.
    пока не очень догоняю, 766я строка жирным:
    Code:
    # func_error arg...
    # Echo program name prefixed message to standard error.
    func_error ()
    {
        $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
    }
    832:
    Code:
     my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`

Page 3 of 7 FirstFirst 12345 ... LastLast

Similar Threads

  1. Простая настройка роутера до торрентов
    By gostest in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 1402
    Last Post: 21-05-2010, 18:58
  2. [How to] rtorrent & ntorrent
    By mancub in forum WL-500gP Tutorials
    Replies: 101
    Last Post: 18-12-2008, 07:21
  3. small number of peers for rTorrent
    By ufo95 in forum WL-500gP Q&A
    Replies: 0
    Last Post: 10-11-2008, 08:23
  4. older rtorrent version
    By FastJack in forum WL-500gP Q&A
    Replies: 1
    Last Post: 23-10-2007, 09:40

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •