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

举报
Tom forever 发表于 2019/10/11 12:01:30 2019/10/11
【摘要】 最近在 CentOS 系统中折腾了 LAMP 相关软件的升级,写了两篇文章。就顺带研究 Ubuntu 操作系统升级软件的相关细节,并和 CentOS 软件升级做了一些比较。我平时学习、测试、写一些代码都是在 Ubuntu 14 系统中运行的(阿里云 ECS),每天到公司第一件事情就是 ssh 连接 ECS。Ubuntu 升级是比较频繁的,每年二个大版本的更新,而 CentOS 更新频率小了很...

最近在 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 可以看到多个版本,如下图:


8-25-ubuntuck-list.png

现在假设我要将 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

输出如下图:


8-25-ubuntuck-policy-redis-server.png

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

(2)输入下列命令升级

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

输出如下图:


8-25-ubuntuck-install-redis-server.png

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

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

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

输出如下图:


8-25-ubuntuck-depends-redis-server.png

依赖的包主要是 redis-tools。

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

$ apt-cache  policy redis-tools

输出如下图:


8-25-ubuntuck-policy-redis-tools.png

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

(5)升级 redis-tools 版本

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

输出如下图:


8-25-ubuntuck-install-redis-tools.png

从图中可以看出,卸载了已经安装的 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,这是我后面一篇文章要介绍的。


本文发表于【2018-09-03】,地址是https://mp.weixin.qq.com/s/pSxFsNc0-2sBtOk4AfoNQg,欢迎大家关注,我的公众号(ID:yudadanwx,虞大胆的叽叽喳喳)


本文转载自异步社区。

文链接:https://www.epubit.com/articleDetails?id=N2281fdb7-19d8-4959-bb96-9bf30a1c1de0


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。