美文网首页程序员
思考一个问题:Ubuntu14能使用Ubuntu16的源升级软件

思考一个问题:Ubuntu14能使用Ubuntu16的源升级软件

作者: 虞大胆的叽叽喳喳 | 来源:发表于2018-09-03 16:14 被阅读90次

    最近在 CentOS 系统中折腾了 LAMP 相关软件的升级,写了两篇文章。就顺带研究 Ubuntu 操作系统升级软件的相关细节,并和 CentOS 软件升级做了一些比较。

    我平时学习、测试、写一些代码都是在 Ubuntu 14 系统中运行的(阿里云 ECS),每天到公司第一件事情就是 ssh 连接 ECS。

    Ubuntu 升级是比较频繁的,每年二个大版本的更新,而 CentOS 更新频率小了很多,主要就是 CentOS 6 和 CentOS 7。在 CentOS 中,CentOS 6/7 主流的地址都是隔离的,那 Ubuntu 呢?

    Ubuntu 官方的源包含的软件都非常丰富,不同操作系统版本使用的源地址也是不一样的,为了升级一个软件,配置较高版本的源(相对操作系统版本来说)是否就行呢?

    从我遇到的情况来看,Ubuntu 14 系统如果配置 Ubuntu 16 系统的源,也不一定能够升级软件,这篇文章以 redis-server 举例。

    sources.list

    当安装一个 Ubuntu 系统后,所有默认的源会配置在 /etc/apt/sources.list 文件中,先了解下 sources.list 文件的内容。

    deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
    

    (1)包含四种类型的软件

    • main:包括 Ubuntu 官方免费、主流的软件。
    • universe:包括 Ubuntu 社区免费、主流的软件。
    • restricted、multiverse:包括非免费的软件。

    (2)特定操作系统版本的源

    • trusty:ubuntu 14
    • xenial:ubuntu 16
    • artful:ubuntu 17
    • bionic:ubuntu 18 04
    • cosmic:ubuntu 18 10

    其中 trusty、trusty-security、trusty-updates 可以同等理解。

    (3)源镜像

    某个源为了加速使用,在各地有多份镜像,比如我的 ECS 使用的镜像就是阿里云提供的(http://mirrors.aliyun.com/ubuntu/),所有的镜像列表地址

    Ubuntu 官方源

    基本上每一个软件都能在 Ubuntu 官方找到,比如搜索redis-server 可以看到多个版本,如下图:

    图1

    现在假设我要将 redis-server 更新到 xenial 系统下的最新版本(2:3.0.6-1)。

    在 /etc/apt/sources.list 文件中加入下一行:

    deb http://mirrors.aliyuncs.com/ubuntu/ xenial main main restricted universe multiverse
    

    注意:添加这个源并不代表只是为了升级 redis-server,是全局配置了一个 xenial 系统源。

    然后更新源:

    $ apt-get update
    

    现在配置了一个 Ubuntu 16 的源,就能够升级 redis-server 了吗?事情并没有那么简单。

    升级 redis-server

    (1)先看系统目前可以安装的 redis-server 版本:

    $ apt-cache policy redis-server
    

    输出如下图:

    图2

    从图中可以看出,在 xenial 版本中,redis-server 可以安装的版本是 2:3.0.6-1。

    (2)输入下列命令升级

    $ apt-get install redis-server=2:3.0.6-1 
    

    输出如下图:

    图3

    但没有升级成功,提示是 redis-tools 版本过低。

    (3)输入下列的命令查看 redis-server 依赖的包

    $ apt-cache depends redis-server=2:3.0.6-1
    

    输出如下图:

    图4

    依赖的包主要是 redis-tools。

    (4)查看 redis-tools 可以安装的版本:

    $ apt-cache  policy redis-tools
    

    输出如下图:

    图5

    可以看出,可能需要升级 redis-tools 到 2:3.0.6-1 版本。

    (5)升级 redis-tools 版本

    $ apt-get install  redis-tools=2:3.0.6-1
    

    输出如下图:

    图6

    从图中可以看出,卸载了已经安装的 redis-server 包。

    (6)再一次升级(安装)redis-server

    $ apt-get install redis-server=2:3.0.6-1
    

    可最终实际上并没有安装,寻找原因,从图4可以猜测是 init-system-helpers 包版本过低,如果升级了 init-system-helpers,是否可以安装 redis-server 呢?

    (7)强制升级 init-system-helpers 包

    $ apt-get install init-system-helpers=1.29ubuntu1
    

    实际上并没有升级,原因就在于这个包被太多的软件依赖,APT 无法强制更新,通过下列命令可以看出:

    $ apt-cache rdepends  init-system-helpers
    

    最终,redis-server 也没有升级到最新版本(xenial)。

    总结:可以看出,一个低版本的 Ubuntu 操作系统即使配置了一个高版本的 Ubuntu 操作系统源,也不一定能够升级,那么如何解决呢?

    • 升级操作系统。
    • 使用 PPA,这是我后面一篇文章要介绍的。

    相关文章

      网友评论

        本文标题:思考一个问题:Ubuntu14能使用Ubuntu16的源升级软件

        本文链接:https://www.haomeiwen.com/subject/seciwftx.html