前言

在当前的 centOS6.5 安装光盘中,自带的 firefox web browser 版本过旧,而且是 ESR 版,也就是无法进行自动更新,这会导致安装系统以后,默认的 17.0.10 旧版与新版的差距越来越大,参考如下截图:

我们可以通过卸载这个旧版,然后安装可以自动升级的新版 firefox 来解决这个问题:

必须指出,安装新版的 firefox 有2种途径:通过 yum 自动升级安装和从 firefox 官网下载最新版来安装;

无论是 centos 官方 yum 源服务器,还是查询到的距离本地最近的第三方 yum 源服务器,其上的 firefox 版本虽新,但应该都还是落后于官方的最新版,甚至有可能比本地能自动更新的 firefox 版本还旧,如下所示:

注意,使用 yum 来升级到新版的 firefox 后,有时会出现问题,

例如,运行新版的 firefox 时,会提示某个 gdk 符号(通常是某个函数的名称)未定义,然后就退出。。。。。

这牵涉到 firefox 使用的动态共享库的依赖性问题,一个可能的原因是 firefox 依赖的共享库 /usr/lib/firefox/libxul.so


通过 yum 从网络上任何软件仓库服务器下载升级的 firefox,由于非官方的最新版本,因此它自带的 libxul.so 版本也不是最新的,

对于旧版的 libxul.so 而言,它又依赖于最新的 libgdk 共享库;

如果我们不能保证 libgdk 随时处于最新版的状态,当 libxul.so 引用一个当前系统上的 libgdk 中不存在的符号,就会导致 firefox 启动失败(闪退),并且给出某某以 gdk_ 前缀的符号未定义的错误信息;

而 mozilla 官方 33.0 版本以后的 firefox ,已经解决了其自带共享库

libxul.so 对系统共享库 libgdk 的依赖问题,

这就是为什么通过 yum 升级安装的 firefox 在运行时会闪退;而官方的

firefox 可以正常启动的原因:两者的 libxul.so 版本差异造成的


另外,虽然可以通过 yum 来升级旧版 libxul.so 依赖的 libgdk 到最新版,但这无非是一个比较繁琐,浩大的工程,而且极可能旧版的 libxul.so 还依赖于其它最新版的系统共享库;

作为对上面论述的一个侧面佐证,让我们查看一下,libxul.so 的“动态依赖性”

[root@centos6-5vm 桌面]# cd /usr/lib/firefox/
[root@centos6-5vm firefox]# ll libxul.so
-rwxr-xr-x. 1 root root 60391628 10月 31 04:33 libxul.so[root@centos6-5vm firefox]# ldd libxul.solinux-gate.so.1 =>  (0x0023c000)libpthread.so.0 => /lib/libpthread.so.0 (0x003ff000)libsmime3.so => /usr/lib/libsmime3.so (0x00e04000)libssl3.so => /usr/lib/libssl3.so (0x00e6e000)libnss3.so => /usr/lib/libnss3.so (0x00ae4000)libnssutil3.so => /usr/lib/libnssutil3.so (0x00ee4000)libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00f6f000)libXext.so.6 => /usr/lib/libXext.so.6 (0x00cc8000)libXdamage.so.1 => /usr/lib/libXdamage.so.1 (0x00732000)libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00780000)libXcomposite.so.1 => /usr/lib/libXcomposite.so.1 (0x009af000)libmozsqlite3.so => /usr/lib/xulrunner/libmozsqlite3.so (0x00175000)libasound.so.2 => /lib/libasound.so.2 (0x0023d000)librt.so.1 => /lib/librt.so.1 (0x00203000)libnspr4.so => /lib/libnspr4.so (0x00329000)libplc4.so => /lib/libplc4.so (0x006d8000)libplds4.so => /lib/libplds4.so (0x006ca000)libmozalloc.so => /usr/lib/xulrunner/libmozalloc.so (0x0020c000)libdbus-glib-1.so.2 => /usr/lib/libdbus-glib-1.so.2 (0x00ab7000)libdbus-1.so.3 => /lib/libdbus-1.so.3 (0x00367000)libgobject-2.0.so.0 => /lib/libgobject-2.0.so.0 (0x003ae000)libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x0041a000)libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0x00f78000)libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0x0052e000)libgio-2.0.so.0 => /lib/libgio-2.0.so.0 (0x0054d000)libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0x0020f000)libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00785000)libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00f3a000)libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0x0081d000)libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0x00667000)libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0x00686000)libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0x006de000)libcairo.so.2 => /usr/lib/libcairo.so.2 (0x008d3000)libgmodule-2.0.so.0 => /lib/libgmodule-2.0.so.0 (0x00d22000)libX11.so.6 => /usr/lib/libX11.so.6 (0x03889000)libXt.so.6 => /usr/lib/libXt.so.6 (0x009b2000)libgthread-2.0.so.0 => /lib/libgthread-2.0.so.0 (0x003fa000)libdl.so.2 => /lib/libdl.so.2 (0x0073e000)libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x03335000)libm.so.6 => /lib/libm.so.6 (0x00743000)libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00953000)libc.so.6 => /lib/libc.so.6 (0x01417000)/lib/ld-linux.so.2 (0x00698000)libz.so.1 => /lib/libz.so.1 (0x00971000)libresolv.so.2 => /lib/libresolv.so.2 (0x00d29000)libselinux.so.1 => /lib/libselinux.so.1 (0x0098a000)libexpat.so.1 => /lib/libexpat.so.1 (0x00a0f000)libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x00de9000)libXi.so.6 => /usr/lib/libXi.so.6 (0x006b8000)libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x00f1e000)libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x00727000)libpng12.so.0 => /usr/lib/libpng12.so.0 (0x00a37000)libpixman-1.so.0 => /usr/lib/libpixman-1.so.0 (0x00c20000)libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00a5f000)libSM.so.6 => /usr/lib/libSM.so.6 (0x00526000)libICE.so.6 => /usr/lib/libICE.so.6 (0x00a7f000)libXau.so.6 => /usr/lib/libXau.so.6 (0x00239000)libuuid.so.1 => /lib/libuuid.so.1 (0x00692000)

第 35 行与 36 行,就是 libxul.so 依赖的 libgdk 相关的共享库;

可以看到,firefox “自带”的共享库 libxul.so 依赖的其它系统共享库数量,极其惊人,通过 yum 来逐一更新这些共享库,无疑是自找麻烦


所以,我们推荐直接在官网上下载最新的 tar.bz2 格式的压缩包,其中有 firefox 的二进制可执行文件,

并且这个压缩包自包含了最新的 libxul.so共享库;

从这个问题上,不难看出,yum 在解析软件包依赖性,尤其是版本的兼容性方面,还存在需要加强的地方

总之,如果你的 centos6.5 上的 firefox 是不能自动升级的 ESR 版,而且版本过旧,那么建议按照下面的解决方案来处理:

1.用你本地的旧版 firefox,访问

http://www.firefox.com.cn

2. 进入存放下载文件(Firefox-latest.tar.bz2)的目录

[root@centos6-5vm ~]# cd /root/下载

3. 在该目录解压 Firefox-latest.tar.bz2,解压后会生成一个 firefox 子目录,里面有最新版本的 firefox 的二进制可执行文件,以及各种扩展模块,插件等等

[root@centos6-5vm 下载]# ll
总用量 41632
-rw-r--r--. 1 root root 42630327 9月  21 11:35 Firefox-latest.tar.bz2
[root@centos6-5vm 下载]# tar -xjvf Firefox-latest.tar.bz2

4. 删除系统默认安装的旧版 firefox ,通常位于 /usr/lib 目录下

[root@centos6-5vm 下载]# ll
总用量 41636
drwxr-xr-x. 8  503 games     4096 9月  19 09:55 firefox
-rw-r--r--. 1 root root  42630327 9月  21 11:35 Firefox-latest.tar.bz2
[root@centos6-5vm 下载]# whereis firefox
firefox: /usr/bin/firefox /usr/lib/firefox /usr/share/man/man1/firefox.1.gz
[root@centos6-5vm 下载]# rm -rf /usr/lib/firefox

5. 将当前目录下的新版 firefox 子目录复制到 /usr/lib 目录下

[root@centos6-5vm 下载]# mv firefox /usr/lib

6. 进入 /usr/bin 目录,删除其下的 firefox 脚本,回到主目录或根目录,创建一个软链接,指向

/usr/lib/firefox/firefox

[root@centos6-5vm 下载]# cd /usr/bin
[root@centos6-5vm bin]# ll firefox
-rwxr-xr-x. 1 root root 6546 10月 30 2013 firefox
[root@centos6-5vm bin]# rm firefox
rm:是否删除普通文件 "firefox"?y
[root@centos6-5vm bin]# cd
[root@centos6-5vm ~]# ln -s /usr/lib/firefox/firefox /usr/bin/firefox

7. 在 shell 终端执行 firefox 命令,就能启动最新版的  firefox (启动前确认已经终止所有旧版的 firefox 进程)

[root@centos6-5vm ~]# firefox

前面我们创建软链接的原因,就是为了这一步执行 firefox 命令时,系统在搜索路径  /usr/bin 下找到 firefox 这个软链接,并且指向真正的可执行文件路径

/usr/lib/firefox/firefox

注意,对于这一步而言,需要 firefox 占用一个 shell 虚拟终端(pts/n),该虚拟终端不能执行任何其它命令,直到关闭 firefox 进程,

因此,我们修改系统左上方的 firefox 浏览器图标的属性,在 “命令”字段右侧的文本框中,输入

/usr/lib/firefox/firefox %u

然后关闭对话框,重新点击该图标,就能不占用任何 shell 虚拟终端来启动 firefox

如果你不想用上面这张截图中带有定制公司 logo 的版本,也可以去下面这个官方  FTP 站点下载“纯净版”:

http://download.cdn.mozilla.net/pub/mozilla.org/firefox/releases/latest/linux-i686/zh-CN/

转载于:https://blog.51cto.com/shayi1983/1556636

替换 centOS6.5 默认安装的旧版 firefox ,安装最新版 firefox 全过程相关推荐

  1. mysql-安装包模式的安装过程-旧版

    傻瓜版mysql安装方式 >安装过Noise 要切换路径 修改安装路径 输入root用户的密码 可以设置简单一点 root 123456 mysql服务名称 即将执行 执行完成都打勾 完事了 & ...

  2. win11正式版如何强行安装 Windows11正式版强行安装的步骤方法

    很多网友因为使用的电脑比较老旧,电脑配置并不符合win11系统的配置要求,但是自己也想要体验win11正式版系统,不知道要如何强行安装win11正式版系统.下面就教下大家win11正式版强行安装方法. ...

  3. linux系统发行版安装,Linux 发行版和安装的基本知识

    Linux 发行版和安装的基本知识 更新时间:2006年10月24日 00:00:00   作者: 一.Linux发行版的基本知识 虽然Linux的基础是其内核(kernel),但是光有内核还远不是一 ...

  4. 向日葵Linux命令行安装,向日葵X版Linux安装教程

    最近,有关如何教大家Sunflower X版本的Linux安装教程的问题引起了许多网民的关注. 大多数网民都想知道如何教授Sunflower X版本的Linux安装教程. 关于向日葵教学有关如何使用X ...

  5. 关于CentOS-6的默认带的mysql启动和安装问题

    一开始想自己一步一步从编译开始搭建一个lanmp环境: 从鸟哥的linux看到可以不用自己去安装,默认的可能更稳定,所以就开始探索系统自带的mysql和其他的工具,在mysql启动的时候遇到了问题. ...

  6. 旧版VS安装 Visual Studio 2019/2017/2015官方安装教程

    安装VisualStudio找不到官方版本?只能找到第三方?害怕中毒? 不要急,本文例举了VS 2019 2017 2015的官方位置,不用但心装成第三方Visual Studio 百度搜索 Visu ...

  7. 旧版 npm 安装 node_modules 模块目录层次过深,导致 win 下无法删除

    windows 删除目录时提示文件名或扩展名太长无法删除 解决方案,使用 node 模块 rimraf 全局安装模块 npm install -g rimraf 删除目录 rimraf node_mo ...

  8. 旧版eclipse安装maven_厉害!Eclipse 已经开始可以支持 Java 14~

    根据个人的需要,下载Java Developers或者Enterprise Java Developers版本. 设置JDK 下载最新的JDK 14,并在Eclipse IDE中指向该JDK. 设置M ...

  9. android系统旧版本下载安装,我的世界旧版下载安装-我的世界老版本下载手机版-乐游网安卓下载...

    <我的世界老版本>是一款像素3D沙盒游戏,由pc端移植而来,朋友们可以在手机上玩耍我的世界了,游戏玩法自由,玩家可以建造各种自己想象的东西,比如一栋大楼.一艘轮船.一架飞机.一个人物角色等 ...

最新文章

  1. 如何理解和分析linux系统的CPU平均负载情况(load average)
  2. 4怎么放大字体_win8.1系统如何放大所有字体?
  3. java绘制矩形 鼠标_如何用java在面板上用鼠标绘制出一个矩形
  4. 测试库的接收到的数据是否完整(jrtplib为列)
  5. ~~朴素dijkstra算法
  6. 20 Tips to Simplify Your Digital and Online Life
  7. C++ std::condition_variable notify_one()与notify_all()的作用
  8. springmvc请求参数获取的几种方法
  9. java batik 乱码_Batik渲染png图片异常的bug修复
  10. Python3 爬虫教程 - 新兴网页解析利器 parsel
  11. Box和Dropbox的区别
  12. 嵌入式开发板硬件操作入门学习3——电机驱动板
  13. 学编程难吗?多久能入门?
  14. 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。 注意对于重复的emp_no进行忽略。...
  15. 机械行业想转行IT互联网行业,大家有什么好的建议?
  16. iOS逆向:微信逆向及动态库开发过程中的坑
  17. OLAP引擎 :CH Doris impala+kudu优缺点分析
  18. DSP学习(8)—— linker.cmd文件解析
  19. 2.1 安装 go-gtk
  20. 决定系数 均方误差mse_误差分析计算公式及其 matlab 代码实现(mse、mape、rmse等)...

热门文章

  1. 7-1 ATM机类结构设计(一) (100 分)
  2. java ajax 更改头像_ajax+node实现头像更改
  3. [NLP] TextCNN模型原理和实现
  4. Nodejs windows的安装
  5. 黑马程序员 C语言:循环语句
  6. DataBinder.Eval数据绑定中的使用
  7. 代码里配置java代理
  8. ProtoBuf3语法指南(Protocol Buffers)_上
  9. 接口和抽象类有什么区别?
  10. OSChina 周日乱弹 —— 七哥的北漂日记