我无法分析此(firefox)段错误的原因

我无法分析此(firefox)段错误的原因

当在最小(非特权)LXC 容器中执行时,火狐的段错误(其他图形应用程序工作正常)。

我无法找到此段错误的确切原因(这很可能是由于权限不足或缺少资源)。

# strace /usr/bin/firefox
...
open("/usr/lib/libfreebl3.so", O_RDONLY|O_CLOEXEC) = 26
read(26,"\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0007\0\0\0\0\0\0"..., 832) = 832
fstat(26, {st_mode=S_IFREG|0755, st_size=544424, ...}) = 0
mmap(NULL, 2619144, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 26, 0) = 0x7f269bf1e000
mprotect(0x7f269bf97000, 2097152, PROT_NONE) = 0
mmap(0x7f269c197000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 26, 0x79000) = 0x7f269c197000
mmap(0x7f269c19a000, 14088, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f269c19a000
close(26)                               = 0
mprotect(0x7f269c197000, 8192, PROT_READ) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x20} ---
unlink("/home/root/.mozilla/firefox/xqa348dr.default/lock") = 0
close(6)                                = 0
rt_sigaction(SIGSEGV, {SIG_DFL, [], SA_RESTORER, 0x7f26bafb5e80}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [SEGV], NULL, 8) = 0 
tgkill(228, 228, SIGSEGV)               = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SI_TKILL, si_pid=228, si_uid=0} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)

背景:Firefox 在最小的非特权 LXC 容器中执行(没有 init,不是整个发行版,只有 firefox 及其依赖项)——因此我认为此问题可能与 Firefox 需要访问的权限不足或不存在的资源有关。在这个容器内部,像“xclock”这样的简单图形程序,甚至像“glxgears”这样的硬件加速程序都可以工作。可能是 firefox 无法工作的问题与 dbus 有关(我不知道它是否设置正确 --- 我所做的只是cp /etc/machine-id /container/etc/)。

更新:我能够解决这个问题。容器缺少 firefox 的依赖项(此时我无法说出是哪一个,因为我采取了半途而废的方式将所有包内容挂载到容器 rootfs 中)。

更新2:我仍然对如何找出上述段错误的确切原因感兴趣。

相关内容