我正在尝试在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并发布结果
我真的怀疑它..在Linuxnetworking(至于内核提供)从2.4到2.6,甚至从2.6.20到2.6.24 +更改。 整个结构不但完全重新命名,有的完全消失,有的重新安排。
它可能会需要大量的摆弄之前,你甚至可以让它build立。