Сборка mediatomb

Форум программистов
sap
Сообщения: 19
Зарегистрирован: 31 май 2016, 10:15

Сообщение sap » 31 май 2016, 10:48

Хотел бы собрать mediatomb, чтобы решить проблему загрузки процессора под 100 в entware-keenetic на keenetic giga http://keenopt.ru/viewtopic.php?f=3&t=428#p4624

Код: Выделить всё

strace: Process 18196 attached
futex(0x5c6b3c, FUTEX_WAIT_PRIVATE, 1, NULL) = -1 ENOSYS (Function not implemented)
futex(0x5c6b3c, FUTEX_WAIT_PRIVATE, 1, NULL) = -1 ENOSYS (Function not implemented)
futex(0x5c6b3c, FUTEX_WAIT_PRIVATE, 1, NULL) = -1 ENOSYS (Function not implemented)


Но в этом совсем не разбираюсь. Предполагаю, что нужен патч. Но вот как правильно это сделать?

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1331
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 31 май 2016, 10:53

Этап 1. Научиться собирать mediatomb "стандартным" способом. Этап выполнен?

sap
Сообщения: 19
Зарегистрирован: 31 май 2016, 10:15

Сообщение sap » 31 май 2016, 11:35

Для entware-keenetic инструкцию не нашел. Насколько понимаю, все тоже самое, что и в entware-ng, только нужно сделать так:

Код: Выделить всё

git clone https://github.com/The-BB/Entware-Keenetic.git

Код: Выделить всё

cp configs/keenle.config .config


Правильно?

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1331
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 31 май 2016, 14:18

Зависит от нужного фида. Давайте так - как нечто не выйдет, тогда и спрашивайте.

sap
Сообщения: 19
Зарегистрирован: 31 май 2016, 10:15

Сообщение sap » 04 июн 2016, 19:13

Собрал mediatomb, установил - проблема cpu100 по-прежнему присутствует. А вот что дальше делать: нужен какой-то патч?

Аватара пользователя
Александр Рыжов
Сообщения: 330
Зарегистрирован: 12 авг 2015, 13:14
Откуда: Смоленск

Сообщение Александр Рыжов » 04 июн 2016, 20:01

sap писал(а):Источник цитаты нужен какой-то патч?

Конечно нужен! Если бы мы знали какой, то с радостью бы поделились с вами.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1331
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 04 июн 2016, 20:32

sap писал(а):Источник цитаты Собрал mediatomb, установил - проблема cpu100 по-прежнему присутствует.

Вы же собрали то, что в репе.
Предлагаю начать с
1. отключения thumbnailer - https://github.com/Entware-ng/rtndev/bl ... kefile#L71 enable->disable
встречались случаи, что это помогало.
2. Если не помогло - включаем https://github.com/Entware-ng/Entware-n ... common#L50
LINUXTHREADS_OLD в конфиге uclibc, пересобираем тулчейн и mediatomb (проще с нуля собрать все)
перед проверкой как минимум обновить libpthread, а лучше все системные либы. Могут отвалится другие проги, включая dropbear - все менять....

На этом предложения не исчерпываются. пляски с бубном - продолжим.... если не поможет

sap
Сообщения: 19
Зарегистрирован: 31 май 2016, 10:15

Сообщение sap » 05 июн 2016, 11:11

Лишь мои предположения (я далеко не программист): последние годы код mediatomb не изменялся, в zyxware проблемы cpu100 не было, значит что-то изменилось в сборке и появился вызов FUTEX_WAIT_PRIVATE.
Вот тут есть фикс для erlang, но в коде mediatomb ничего похожего не нашел
http://stackoverflow.com/questions/5463 ... centos-5-5

Может быть можно что-то изменить в gcc (или uclibc-ng), чтобы отключить флаг PRIVATE и использовать только FUTEX_WAIT? Если это реализуемо, тогда не придется патчить все пакеты с проблемой cpu100.

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1331
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 05 июн 2016, 11:55

Константа UCLIBC_HAS_STDIO_FUTEXES определена в ядре 2.6.23 используемом в белом роутере GIGA.
Собственно Вам и предлагаю варианты исключить код, где идет некорректный syscall вызов из ядра. Где он сказать трудно, но вы можете освоить gdb и выяснить. Прдлеожил отключить thumbnailer (есть посты в инете, что это помогает). Второй вариант - другая конфигурация системной библиотеки.

С вероятностью 99.99% все заработает, если в указанном ранее файле common отключить
UCLIBC_HAS_THREADS_NATIVE
и включить (см выше)
LINUXTHREADS_OLD

Окончательный конфиг сборки uclibc называется `.config`. Он формируется по определенному алгоритму. В нем должны быть выключены/включены/нужно уточнение

Код: Выделить всё

UCLIBC_HAS_THREADS_NATIV  is not set
UCLIBC_HAS_THREADS=y
UCLIBC_HAS_TLS  is not set
LINUXTHREADS_OLD=y

Во вложении конфигурация uclibc из старых сборок (прошивка v1, zyxware). Можно на нее ориентироваться, но версия uclibc там другая, древняя.
Если пересоберете uclibc, то нужно будет пересобрать все нужные пакеты и их заменить.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

sap
Сообщения: 19
Зарегистрирован: 31 май 2016, 10:15

Сообщение sap » 07 июн 2016, 21:20

В файле common сделал так

Код: Выделить всё

LINUXTHREADS_OLD=y
# UCLIBC_HAS_THREADS_NATIVE  is not set
UCLIBC_HAS_THREADS=y


Собираю в ubuntu 14.04 (gcc 5.3), на этапе make toolchain/install вылезает ошибка

Код: Выделить всё

make[3]: Leaving directory `/media/main/ext2zyx/Entware-Keenetic/build_dir/toolchain-mipsel_mips32r2_gcc-5.3.0_uClibc-1.0.13/uClibc-ng-1.0.13'
cp -fpR /media/main/ext2zyx/Entware-Keenetic/build_dir/toolchain-mipsel_mips32r2_gcc-5.3.0_uClibc-1.0.13/uClibc-ng-1.0.13/libc/libc_so.a /media/main/ext2zyx/Entware-Keenetic/staging_dir/toolchain-mipsel_mips32r2_gcc-5.3.0_uClibc-1.0.13/lib/
cp -fpR /media/main/ext2zyx/Entware-Keenetic/build_dir/toolchain-mipsel_mips32r2_gcc-5.3.0_uClibc-1.0.13/uClibc-ng-1.0.13/libpthread/*/libpthread_so.a /media/main/ext2zyx/Entware-Keenetic/staging_dir/toolchain-mipsel_mips32r2_gcc-5.3.0_uClibc-1.0.13/lib/
cp: cannot stat '/media/main/ext2zyx/Entware-Keenetic/build_dir/toolchain-mipsel_mips32r2_gcc-5.3.0_uClibc-1.0.13/uClibc-ng-1.0.13/libpthread/*/libpthread_so.a': No such file or directory
make[2]: *** [/media/main/ext2zyx/Entware-Keenetic/staging_dir/toolchain-mipsel_mips32r2_gcc-5.3.0_uClibc-1.0.13/stamp/.uclibc_installed] Error 1
make[2]: Leaving directory `/media/main/ext2zyx/Entware-Keenetic/toolchain/uClibc'
make[1]: *** [toolchain/uClibc/install] Error 2
make[1]: Leaving directory `/media/main/ext2zyx/Entware-Keenetic'
make: *** [toolchain/install] Ошибка 2


Файла libpthread_so.a в папке действительно нет, но он есть в папке назначения и еще трех папках. Что можно с этим сделать? Просто скопировать файл в папку?


Вернуться в «Собираем софт сами (пакеты, прошивки)»

Кто сейчас на конференции

Всего 1 посетитель :: 0 зарегистрированных, 0 скрытых и 1 гость (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (121) здесь было 18 май 2016, 18:19

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость