Page 2 of 3 FirstFirst 123 LastLast
Results 16 to 30 of 44

Thread: Полная инструкция по установке eMule на роутере

  1. #16
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    Еще информация к размышлению. strace кроме EFBIG выдает еще и SIGXFSZ:

    Code:
    _llseek(11, 1108992000, [1108992000], SEEK_SET) = 0
    write(11, "d\363\303\32\355\263x\261\327\2447\271\350\336\332\302"..., 10240) = -1 EFBIG (File too large)
    --- SIGXFSZ (File size limit exceeded) @ 0 (0) ---
    с одной стороны подозрение вызывает lseek. Единственное место где он вызывается --- файл CFile.cpp, причем в форме lseek, которая может оказаться 32 и 64 битной. Однако, в Makefile определяется -D_FILE_OFFSET_BITS=64 в результате чего lseek превращается в корректный уже 64-битный _llseek , к тому же он возвращает успех. Так что похоже lseek не виноват.

    Далее цитата из man 2 write:
    Code:
    EFBIG  An  attempt  was made to write a file that exceeds the implementation-defined maximum file size or the process' file size limit,
                  or to write at a position past the maximum allowed offset.
    Итак EFBIG могут вызвать 3 причины, а именно, попытки:
    1) write a file that exceeds the implementation-defined maximum file size;
    2) write a file that exceeds the process' file size limit;
    3) write at a position past the maximum allowed offset.

    Причем SIGXFSZ (File size limit exceeded), похоже, указывает на вариант №2.

    Далее, существует такое понятие как лимиты ресурсов или RLIMIT, причем они используются в файле amule.cpp
    , правда их там пытаются выставить в максимум.

    Цитата из man 2 getrlimits , касаемо лимита размера файла, который может создать процесс:
    Code:
           RLIMIT_FSIZE
                  The  maximum  size  of  files  that the process may create.  Attempts to extend a file beyond this limit result in delivery of a
                  SIGXFSZ signal.  By default, this signal terminates a process, but a process can catch this signal instead, in  which  case  the
                  relevant system call (e.g., write() truncate()) fails with the error EFBIG.
    Очень похоже на нашу ситуацию, по крайней мере оба ключевых слова (SIGXFSZ и EFBIG) присутствуют.

    Чему же равен RLIMIT_FSIZE

    Code:
    #include <sys/time.h>
    #include <sys/resource.h>
    #include <stdio.h>
    
    int main()
    {
      struct rlimit rl;
      int res = getrlimit(RLIMIT_FSIZE, &rl);
      printf("%ld %ld %d %ld\n", rl.rlim_cur, rl.rlim_max, sizeof(rlim_t), RLIM_INFINITY);
    }
    возвращает 2147483647 2147483647 4 2147483647
    Это величина в байтах. Первое число т.н. soft rlimit , второе hard rlimit . Соответственно, при желании можем их установить, причем soft <= hard . Величины эти имеют тим rlim_t и являются 32-битными. Необходимо отметить, что у свежей suse они тоже четырехбитные (-1 -1 4 -1, что по сути есть то же самое). В результате непонятно как вообще в линухе можно работать с файлами более 2 Гб если лимит размера файла четырехбайтный.

    Дополнение. А вот, кстати, где сидит 1 Гигабайт. Если запустить strace amuled -f, т.е. прописать его с самого начала, а не атачить к pid-у, то как раз и наблюдается то о чем я писал выше. Этот код выполняется в файле amule.cpp . А вот изменить то эти цифры что-то ни хрена не получается.

    Code:
    getrlimit(RLIMIT_DATA, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
    setrlimit(RLIMIT_DATA, {rlim_cur=1073741823, rlim_max=1073741823}) = 0
    getrlimit(RLIMIT_FSIZE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
    setrlimit(RLIMIT_FSIZE, {rlim_cur=1073741823, rlim_max=1073741823}) = 0
    getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0
    setrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0
    getrlimit(RLIMIT_RSS, {rlim_cur=7401488, rlim_max=4735824}) = 0
    setrlimit(RLIMIT_RSS, {rlim_cur=720283552, rlim_max=2147449912}) = 0
    Дополнение 2. Короче дело в следующем. Как и предполагалось в начале виноваты искривления uclibc . Максимальное значение RLIMIT_FSIZE равное RLIM_INFINITY определяется в ней для части архитектур как (~0UL), а для второй части, в т.ч. mipsel как (~0UL>>1) . А setrlimit для перестраховки делает еще раз >>1 Отсюда и берется 1Гб. Если закомментировать одну строчку (избавиться от setrlimit, который в общем то на хрен не нужен), то проблема исчезает:

    strace после операции (getrlimit оставлен чисто для контроля):
    Code:
    getrlimit(RLIMIT_DATA, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
    getrlimit(RLIMIT_FSIZE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
    getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0
    getrlimit(RLIMIT_RSS, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
    Причем, как ни странно, вместо ожидаемого увеличения объема от 1 до 2 Гб, похоже проблема снялась совсем и, наконец, заработал LFS (aMule, кстати, не дает поставить на загрузку ссылку больше 4Гб ни под mipsel ни под виндой):
    Code:
    _llseek(13, 4205578240, [4205578240], SEEK_SET) = 0
    write(13, "\210\302\2568\10\25\322\16\225\350!\372\200OQ\6x\326\362"..., 10240) = 10240
    _llseek(13, 4205598720, [4205578240], SEEK_SET) = 0
    write(13, "\216\35{\312\347\305\271\247\243{\206\202\357\254\311`"..., 10240) = 10240
    _llseek(13, 4205608960, [4205608960], SEEK_SET) = 0
    write(13, "\36\250\2732;\354C!\356\232\376\352\365\202\177,~h\233"..., 10240) = 10240
    Last edited by al37919; 08-04-2007 at 08:23.

  2. #17
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    Патч получился очень содержательным.
    Attached Files Attached Files

  3. #18
    спасибо, что разобрался :-) ждем ебилдов, как говорят у нас на родине.. ipkg-пакетов то есть :-)

  4. #19
    Join Date
    Dec 2003
    Location
    Russian Federation
    Posts
    8,356
    oleo отдайте этот патч и попросите пересобрать.

  5. #20
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    Сборка официального билда оказалась делом непростым. У меня все успешно откомпилировалось и работатет как надо, а билд oleo пока не снимает ограничений. Чем отличаются наши системы компиляции я не понимаю. Единственное что бросается в глаза сразу --- мой amuled имеет размер 3.6Мб, а у oleo 3.2Мб ... Я делал кросс-компиляция согласно первой половине этой инструкции http://www.nslu2-linux.org/wiki/Optw...ckageToOptware

    В любом случае, источник проблемы найден.setrlimit работает неправильно, oleo это признал. Однако, новый официальный билд без прямого вызова setrlimit имеет тоже неверные лимиты.

    Поскольку на данный момент я являюсь вроде как единственным держателем работающего бинарника, то решил выложить его здесь для тестирования. А может он и работает корректно только у меня? Этот файл откомпилирован на основе amule-2.1.3-6 путем удаления одной строки в файле amule.cpp

    2dimonb:
    не запостишь результат
    strace amuled -f 2> log
    для моего бинарника и для бинарника из amule-2.1.3-7 в части касающейся getrlimit (4 строки порядка 100 строк от начала)
    Attached Files Attached Files

  6. #21
    Примерно следующий результат:

    Code:
    getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
    setrlimit(RLIMIT_STACK, {rlim_cur=2147448808, rlim_max=0}) = 0
    getrlimit(RLIMIT_DATA, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
    getrlimit(RLIMIT_FSIZE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
    getrlimit(RLIMIT_NOFILE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
    getrlimit(RLIMIT_RSS, {rlim_cur=7401488, rlim_max=9443488}) = 0

  7. #22
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    Спасибо, я так понимаю это мой билд. Вроде все отлично. А amuled из amule-2.1.3-7.ipk из официального репозитория optware что дает?

  8. #23
    официальная сборка:

    Code:
    getrlimit(RLIMIT_STACK, {rlim_cur=716175296, rlim_max=719845052}) = 0
    setrlimit(RLIMIT_STACK, {rlim_cur=2147448808, rlim_max=0}) = 0
    getrlimit(RLIMIT_DATA, {rlim_cur=716175296, rlim_max=720246656}) = 0
    getrlimit(RLIMIT_FSIZE, {rlim_cur=716175296, rlim_max=720246656}) = 0
    getrlimit(RLIMIT_NOFILE, {rlim_cur=716175296, rlim_max=720246656}) = 0
    getrlimit(RLIMIT_RSS, {rlim_cur=7401488, rlim_max=9443488}) = 0

  9. #24
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    Огромное спасибо. Результаты практически идентичны моим. А то у меня закрались сомнения не задаются ли эти константы на этапе выполнения. Уж больно неожидано возникли эти новые 700Мб. Значит проблема полностью воспроизводится. А дальше уже надежда на oleo, т.к. фиксить тулчейн мне пока не по силам.

  10. #25
    Да незачто :-)


    Вообще очень странная картинка получается..
    setrlimit никто не делает, а getrlimit возвращается разный... какая-то несуразица

  11. #26

    eMule и перенаправление портов

    Простите за столь тупой вопрос полнейшего ламера. Подскажите, что куда вписать в 500gp с прошивкой от Олега (последней) чтобы избегать lowid встроенными средствами роутера не пользуюсь, хочу просто скачать то, что мне нужно, но как то не получается пока что. Спасибо.
    Конфиг - роутер с динамическим IP провайдера (Доминанта СПб), ноут по wifi также с динамическим ip присваеваемым роутером при соединении.

  12. #27
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    осел на ПК за роутером?
    тогда проброс портов в виртуальном сервере через веб интерфейс.

  13. #28
    Quote Originally Posted by al37919 View Post
    осел на ПК за роутером?
    тогда проброс портов в виртуальном сервере через веб интерфейс.
    да,на ноуте.
    чтосделать я понял, а вот как???

  14. #29
    Понимаю, что править нужно на вкладке (см. скрин) новот что этодля меня загадка,так и не смог разобраться, вечно при тесте портов из eMule , тест проваливается.
    Attached Images Attached Images  

  15. #30
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    в муле заходим настройка -> соединение -> соединение. Вверху указаны два порта --- один tcp, другой udp

Page 2 of 3 FirstFirst 123 LastLast

Similar Threads

  1. Replies: 220
    Last Post: 06-02-2016, 11:53
  2. Инструкция по установке и настройке aMule
    By Iskan Der in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 60
    Last Post: 16-11-2013, 20:58
  3. Инструкция по настройке роутера Asus RT-N16 для чайников
    By ryzhov_al in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 17
    Last Post: 03-10-2013, 11:33
  4. Инструкция по настройке роутера WL-500gP с нуля
    By OlegI in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 1259
    Last Post: 10-02-2011, 22:25
  5. edokey/emule command line client....
    By brunobf in forum WL-500g Custom Development
    Replies: 9
    Last Post: 20-09-2006, 02:43

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
  •