Я пытаюсь запустить Firefox в chroot Linux. В chroot есть копия Debian Etch, установленная через debootstrap. Если chroot работает на машине с ядром 2.6, я могу нормально запустить Firefox 2.0, 3.0 и 3.5. Моя проблема возникает, когда я перемещаю chroot на машину с ядром 2.4.37, тогда я могу запустить 2.0 нормально, но 3.0 и 3.5 оба зависают без звука, без отображения и без вывода ошибок.
С Firefox 3.5 на машине с ядром 2.4, strace -f ./firefox
выходы: (показаны только последние несколько строк перед зависанием)
[pid 8220] set_thread_area({entry_number:-1 -> -1, base_addr:0x41bef140, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = -1 ENOSYS (Function not implemented)
[pid 8220] modify_ldt(1, {entry_number:0, base_addr:0x41bef140, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}, 16) = 0
[pid 8220] munmap(0x40019000, 11144) = 0
[pid 8220] getpid() = 8220
[pid 8220] rt_sigaction(SIGRTMIN, {0x400241e0, [], SA_RESTORER, 0x416f58f8}, NULL, 8) = 0
[pid 8220] rt_sigaction(SIGRT_1, {0x40023cc0, [RTMIN], SA_RESTORER, 0x416f58f8}, NULL, 8) = 0
[pid 8220] rt_sigaction(SIGRT_2, {0x40023500, [], SA_RESTORER, 0x416f58f8}, NULL, 8) = 0
[pid 8220] rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0
[pid 8220] rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 8) = 0
[pid 8220] open("/proc/cpuinfo", O_RDONLY) = 3
[pid 8220] read(3, "processor\t: 0\nvendor_id\t: Genuin"..., 1024) = 422
[pid 8220] read(3, "", 1024) = 0
[pid 8220] close(3) = 0
[pid 8220] readlink("/etc/malloc.conf", 0xbfffe47b, 4096) = -1 ENOENT (No such file or directory)
[pid 8220] rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
[pid 8220] rt_sigsuspend([]
В set_thread_area
сбой вызова с сообщением «Функция не реализована» вместе с тем фактом, что, поскольку я запускаю в chroot, только ядро отличается в двух моих рабочих средах, заставляет меня думать, что Firefox не работает на ядре 2.4. Однако Mozilla перечисляет длинный список требований для работы Firefox, и ядро 2.6 не входит в их число. Может ли кто-нибудь предложить обходной путь, как я могу запустить это?
Первое, что я попробую, - это скомпилировать его на машине с ядром 2.4, чтобы ваш компилятор не пытался использовать ABI с ядром 2.6. Если вы сможете успешно скомпилировать под 2.4, он, вероятно, будет работать нормально. Если нет, вероятно, где-то есть скрытая зависимость.
Хотя эта функция действительно не реализована в 2.4, она, вероятно, не вызывается из самого Firefox. Я предполагаю, что, запустив - в 2.4 - двоичный файл, скомпилированный и скомпилированный с 2.6, вы вызовете несовместимую библиотеку. Поскольку Firefox является переносимым материалом, он либо определен ifdef, либо является частью отдельной библиотеки.
вы загружаете двоичные файлы или компилируете из исходников? для двоичного файла: вы уверены, что версия glibc соответствует установленной?
Вам необходимо проверить версии glibc (не glib). Просто запустите /lib/libc.so.6 и опубликуйте результаты
Я действительно в этом сомневаюсь .. В сетевом окружении Linux (насколько это предусмотрено ядром) МНОГО изменилось с 2.4 на 2.6, и даже с 2.6.20 на 2.6.24 +. Не только тривиальные изменения, но и целые структуры были полностью переименованы, некоторые полностью исчезли, а у других были перегруппированы члены.
Скорее всего, вам придется немало возиться, прежде чем вы сможете его построить.