我正在尝试在 Linux chroot 中运行 Firefox。chroot 有一个通过 debootstrap 安装的 Debian Etch 副本。如果 chroot 运行在带有 2.6 内核的机器上,我可以运行 Firefox 2.0、3.0 和 3.5 都很好。当我将 chroot 移动到运行 2.4.37 内核的机器上时,就会出现我的问题,然后我可以正常运行 2.0,但是 3.0 和 3.5 都静默挂起,没有显示,也没有错误输出。
在内核 2.4 机器上使用 Firefox 3.5,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 内核机器上实际编译它,因此您的编译器不会尝试使用 2.6 内核 ABI。如果你可以在 2.4 下成功编译,它可能会正常工作。如果没有,则可能在某处存在隐藏的依赖关系。
虽然这个函数在 2.4 中确实没有实现,但它可能不是从 Firefox 本身调用的。我猜想通过在 2.4 中运行一个针对 2.6 编译和链接的二进制文件,你调用了一个不兼容的库。由于 Firefox 是可移植的东西,因此它要么是 ifdef'ed,要么是单独库的一部分。
你是下载二进制文件,还是从源代码编译?对于二进制文件,您确定 glibc 的版本与您安装的版本匹配吗?
您需要检查 glibc(不是 glib)版本。只需运行 /lib/libc.so.6 并发布结果
我真的很怀疑.. Linux 网络(就内核提供的内容而言)从 2.4 到 2.6,甚至从 2.6.20 到 2.6.24 + 发生了很大变化。不只是细微的变化,整个结构都被重新命名,有些完全消失了,有些则重新排列了成员。
在您甚至可以构建它之前,它可能需要大量的摆弄。