I am trying to run Firefox inside of a Linux chroot. The chroot has a copy of Debian Etch installed via debootstrap. If the chroot is running on a machine w/ a 2.6 kernel, I can run Firefox 2.0, 3.0 and 3.5 all fine. My problem occurs when I move the chroot to a machine running a 2.4.37 kernel, then I can run 2.0 alright, but 3.0 and 3.5 both hang silently with no display and no errors output.
With Firefox 3.5 on the Kernel 2.4 machine, strace -f ./firefox
outputs: (only the last few lines before the hang shown)
[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([]
The set_thread_area
call failing with "Function Not Implemented" along with the fact that since I'm runninng in a chroot, only the kernel is different between my two running environments, leads me to believe that Firefox does not run on the 2.4 kernel. However, Mozilla lists a long list of requirements for running Firefox, and 2.6 kernel is not one of them. Can anyone suggest a workaround for how I can get this running?
The first thing I'd try is to actually compile it on the 2.4-kernel machine, so your compiler doesn't try to use the 2.6-kernel ABI. If you can successfully compile under 2.4, it'll probably work fine. If not, there's probably a hidden dependency somewhere.
While this function is indeed not implemented in 2.4, it's probably not called from Firefox itself. I'm guessing that by running -- in 2.4 -- a binary compiled and linked against 2.6, you call a library that is incompatible. Since Firefox is portable stuff, this is either ifdef'ed or part of a separate library.
are you downloading binaries, or compiling from source? for binary, are you sure the version of glibc matches what you have installed?
You need to check glibc (not glib) versions. Just run /lib/libc.so.6 and post results
I really doubt it .. A LOT changed in Linux networking (as far as what the kernel provides) from 2.4 to 2.6, and even from 2.6.20 to 2.6.24 +. Not just trivial changes, entire structures were re-named totally, some vanished completely, others had their members re-arranged.
Its likely going to need a great deal of fiddling before you can even get it to build.