![在 Centos 6.10 32 位上运行 Firefox 109](https://linux22.com/image/219893/%E5%9C%A8%20Centos%206.10%2032%20%E4%BD%8D%E4%B8%8A%E8%BF%90%E8%A1%8C%20Firefox%20109.png)
目标:获取在 Centos 6.10 32 位上运行的最新版本的 Firefox
问题:当尝试从 [https://ftp.mozilla.org/pub/firefox/releases/][1] 下载并运行任何高于 49.0.2 的 Firefox 版本时,它会失败,通常会抱怨 glibc 版本。
示例:firefox 50.1.0:
/usr/lib/libstdc++.so.6: version
GLIBCXX_3.4.15'未找到(/usr/local/firefox/libxul.so 需要)无法加载 XPCOM。`
我尝试过的事情:我可以通过编译 gcc-6.5.0、将其安装到/opt/alt-libs-gcc-6.5.0
、在 centos 6 上编译 gtk3 版本并将其安装到/opt/gtk3
然后运行来获得版本 50-70 的工作LD_LIBRARY_PATH=/opt/alt-libs-gcc-6.5.0:/opt/gtk3/lib /usr/local/firefox/firefox
。我还必须找到或编译其他一些库(libcanberra、libcairo、一些 gdk 库等)
在70.0.1版本之后,我可以使用上面相同的方法打开它,但添加了参数-safe-mode
。它打开了窗口,我可以输入一个网站,但是一旦我按回车键,网址就会消失,并且不会加载页面。终端还显示许多 GLib-GObject-CRITICAL 警告和错误。
我尝试启动 Rocky Linux 8 虚拟机,安装所需的软件包,然后下载并运行 Firefox 109.0.1。然后抓取整个 /lib 文件夹并将其复制到/opt/rocky
我的 Centos 6.10 虚拟机上。但是,当我尝试使用 rocky ld-linux/linker 运行 firefox 时,/opt/rocky/ld-linux.so.2 --library-path /opt/rocky /usr/local/firefox/firefox -safe-mode
它失败了Exec failed with error: No such file or directory
我尝试/opt/rocky/ld-linux.so.2 --library-path /opt/rocky /usr/local/firefox/firefox -safe-mode
在 Rocky 虚拟机上运行,但遇到了同样的错误。这就是我来这里的原因。为什么 Firefox 不能在相同的虚拟机、相同的库、相同的 ld-linux 上运行(只是重新定位到新文件夹)?看来我必须遗漏一些东西,或者我试图错误地使用链接器。但无论我在哪里找到例子,我的例子看起来都是完全有效的。
LD_DEBUG=all /opt/rocky/ld-linux.so.2 --library-path /opt/rocky /usr/local/firefox/firefox -safe-mode
在错误之前吐出大量文本(如预期),在错误之后吐出一些文本,但它似乎没有指出任何内容。该错误就在那里,之前没有任何问题或警告。
2329: symbol=__fprintf_chk; lookup in file=/usr/local/firefox/firefox [0]
2329: symbol=__fprintf_chk; lookup in file=/opt/rocky/libpthread.so.0 [0]
2329: symbol=__fprintf_chk; lookup in file=/opt/rocky/libdl.so.2 [0]
2329: symbol=__fprintf_chk; lookup in file=/opt/rocky/libstdc++.so.6 [0]
2329: symbol=__fprintf_chk; lookup in file=/opt/rocky/libm.so.6 [0]
2329: symbol=__fprintf_chk; lookup in file=/opt/rocky/libgcc_s.so.1 [0]
2329: symbol=__fprintf_chk; lookup in file=/opt/rocky/libc.so.6 [0]
2329: binding file /usr/local/firefox/firefox [0] to /opt/rocky/libc.so.6 [0]: normal symbol `__fprintf_chk' [GLIBC_2.3.4]
Exec failed with error: No such file or directory
2329:
2329: calling fini: /usr/local/firefox/firefox [0]
2329:
2329:
2329: calling fini: /opt/rocky/libpthread.so.0 [0]
2329:
2329:
2329: calling fini: /opt/rocky/libdl.so.2 [0]
2329:
2329:
2329: calling fini: /opt/rocky/libstdc++.so.6 [0]
可能是有用的信息,也可能只是一个兔子洞:我尝试使用 patchelf 更改二进制文件的链接器、所需的库和 r 路径,但没有任何变化。我检查了 libxul.so 所需的库,发现它也列出了链接器,尽管我不认为它是二进制文件。
/lib/ld-linux.so.2 (0xb776c000)
如果我尝试使用 patchelf 更改它,它不会在列表中替换它,它只是将我的其他链接器也添加到列表中,并且显然会破坏 libxul.so,因为 firefox 在更改后无法立即运行。
我还尝试在 Centos 6.10 上编译 Firefox(这涉及到搜索和编译一堆其他东西),但最终结果完全相同,并且无法运行,就像该网站的官方二进制文件一样。也就是说,我在编译时可能可以应用一些设置或参数来解决所有这些问题,我只是不知道它们可能是什么。
其他说明:Centos 6.10 的 epel 存储库提供了 Firefox 版本 78.5,因此显然有人让它在 Centos 6.10 上的版本 70 之后工作。也许有一种方法可以让我使用该软件包来了解他们是如何使其工作的?
问题:关于如何实现这项工作有什么想法吗?我是否尝试错误地移植库和链接器?我可以做些什么来让我自己的编译工作吗?
信息:
uname -r
4.4.246-1.el6.elrepo.i686
答案1
CentOS 6 自 2020 年 11 月 30 日起已停产,并于 2017 年停止接收新功能。即使操作系统发生这种情况,也可以编译比系统存储库中可用的库更新的库,以便运行更新的软件,但最终即使这样不起作用,因为会出现兼容性问题。这就是你现在所看到的。与其经历所有这些繁琐的事情,不如使用更新的操作系统。
如果您需要 CentOS,那么 CentOS Stream 9 仍在接收新功能,更新版本的 Firefox 将在该系统上运行。 CentOS 7 的支持时间到明年,但在 2020 年 11 月停止接收新功能,CentOS 8 的停产日期为 2021 年 12 月 31 日,因此没有理由使用这些功能。
另一方面,由于 CentOS Stream 是一个包含大量未经测试和测试版软件的滚动版本,Alma Linux 和 Rocky Linux 与 CentOS 二进制兼容,而后者是 CentOS 本身的原始创始人之一的项目。 Firefox 102 可在 Alma 和 Rocky 的系统存储库中使用,并且我已经验证了 Firefox 的后续版本可以在两者上运行,而无需编译额外的软件。
如果您有其他绝对需要 CentOS 6 的软件,那么您仍然可以通过诸如podman
.总的来说,我建议您使用受支持的操作系统,而不是不仅不再接收更新的软件而且还将在没有安全补丁的情况下访问互联网的操作系统。这使得它完全受到恶意软件的攻击。