本帖最后由 qxyokok 于 2020-3-19 11:25 编辑
如果你的linux版本与当前源的版本差距过大,或者你的软件建构在旧版本的软件包上,无法确认新版本能否同样支持的情况下,尤其是生产环境:
千万慎用yum update!!!
之前为了学习Linux,我安装了centos和rhel。在升级过程中,我有了一个很重要的发现。
一开始我的centos是7.0版本,下载的rhel也是7.0版本,内核均为3.10.0-123.el7。
用旧版本是因为,我centos7刚出时候下载了镜像,我懒得下直接安装的。升级到7.7的话,只需要下载945MB的升级就行了,不用重新下载。
rhel7.0是我在网上找到的版本,对应着教学参考书下载的。
centos我无脑升级7.7后,无法开机了,并且出现了很多的故障。我在不断的排除故障后,发现了这个故障可能真的无法修复。我以为毕竟是社区版,如果用rhel会不会稳定一些?
我的rhel7.0是连接的红帽官方源下载的,出现了同样的问题!具体情况如下。
在使用了YUM -Y UPDATE后,经过检查发现了1975个升级包。升级完成后系统版本会从7.0直接到7.7。这些升级包几乎包含了所有的软件同时也包含了内核(版本为3.10.0-1062.el7)。熟悉linux的同学可能知道,软件包之间的依赖关系是很复杂的。
YUM可以帮助我们处理这些复杂的软件包依赖关系,但是不能过分的相信YUM是多么的智能化。在版本差距过大的情况下,YUM也救不了你……
当时我的系统升级包在下载完成后,
(吐槽rhel的源是真的慢,慢到我整整下载了一天,centos的一小会儿就下载完了,有镜像源真是爽)
开始了自动安装的过程。YUM一开始还是做的挺不错的。到了后面当一个包关联好几个包,这好几个包又关联好几个包,有的包出现了分版本的情况等诸多情况之后,开始频繁的出现ERROR报错,报错的原因主要都是因为依赖安装的先后没有自动识别好,导致有的前置包没更新,后包为了另一些包已经更新,前后无法匹配,导致后续依赖前两个包的程序又无法安装。(有点绕,大意就是,YUM自己把自己绕晕了)
之后不断的提示安装的新包出现了重复。(有需要处理重复包问题的同学,可以参考这里的解决方法)
1、首先我通过yum install yum-utils -y安装了管理重复包的利器2、然后清除了YUM的缓存yum clean all 3、列出所有重复的包package-cleanup --dupes看一下,重复的太多了……一屏幕都放不下,用more看了下有好几屏幕 4、接下来解决他们!package-cleanup --cleandupes --removenewestdupes 5、清除掉了那些不断提示重复的包,然后又把损坏的包剃掉package-cleanup --problems 6、我以为万事大吉了(通常情况下,到了这一步就解决问题了),重新开始yum -y update
结果仍然提示有重复包(OMG……) 我看了一下,用package-cleanup --cleandupes重新清理,提示无法清理 在仔细阅读后,看明白了…… 大意说的是,包被依赖关系连起来了,装第一个必须升级第二个,升级第二个需要停止第三个,然而第三个正在使用中无法停止,重启后可停止…… 太麻烦了…… 敲入reboot! 就此无法开机…… 开机的情况瘫痪的厉害,连报错都看不见,在GURB选择内核之后就黑屏,或者偶尔会显示一两行字。 GURB显示当前内核仍然为3.0.10-123.el7,但是里面的各种软件包已经升级了95%。
到目前为止,仍然在尝试解决。
这是我在实验环境出现的问题,如果是生产环境无脑YUM UPDATE,很可能让你吃个大亏!切记升级前慎重!
Tips:这里提一个小技巧,我在gnome桌面升级的时候黑屏了(桌面自己升级肯定是没办法显示的)。这时候可以按下Ctrl+Alt+F2切换成命令行模式,接着用。
愿正在学习linux路上的你,我的经验可以让你省一些力气。一直查国内外的各种资料确实很累啊~
更新:已经修好啦~~哈哈~
经过一系列的研究后发现,系统确实拆的七零八落无法独自修复,靠系统自己是肯定靠不住了。正在惆怅之时,电脑“叮”的一声,我的rhel8.1下载好了。这个镜像一直断,我可是折腾下载了一个星期啊!!!我在网上只找到了RHEL8.0的镜像,各种渠道里都没有RHEL8.1的镜像,我估计我要成为全网首发了哈哈~~
下载地址在我传到云上后分享给大家。
言归正传,我在安装rhel8.1的时候忽然看到了修复模式。
我怎么把这么重要的功能忘却了??!!
打开修复模式,挂载root,配置临时网络,然后按照我上面的流程再次操作一遍。
不就是系统里的包因为正在运行的原因,导致依赖包乱了么。在我大救援模式下,我不用你的系统好不好嘞~
果然,非常顺利的清除掉重复包和故障损坏包,然后yum -y update,全部重新下载,依次配对依赖包,修复完成~~~
这里我要更正一下上面我写的有误的内容。不是YUM本身太蠢,蠢的地方是在YUM分不清哪些先装,哪些后装,哪些包在什么时候重启,重启后接着怎么装。这些情况目前似乎也没有什么好的解决方法。如果您有什么好的方法,欢迎留言,我也学习一下。
发生这次崩溃事故的本质原因,是YUM无法正常处理正在使用且不重启没有办法停止的系统关键服务包。
对于这种包,多半还是因为系统版本跨度太大,才会出现这种情况。应用包+底层包+内核一起更新,无脑用YUM肯定还是要完蛋的。
最终结论还是和开头一样:
如果你的linux版本与当前源的版本差距过大,或者你的软件建构在旧版本的软件包上,无法确认新版本能否同样支持的情况下,尤其是生产环境:
千万慎用yum update!!! 更新: 最新红帽系统镜像我上传完了,下面是下载链接,里面包含RHEL7.0 7.7 8.1三个版本。想尝试8.1的,下载就好~ 链接:https点//pan点baidu点com/s/1dNlL6FMp_w7H0VoTG4d0yw
提取码:27fk
SHA-256 Checksum: 2323ad44d75df1a1e83048a34e196ddfedcd6c0f6c49ea59bf08095e3bb9ef65
红帽8.1 RHEL8.1下载 rhel8.1下载 Download Red Hat Enterprise Linux 8.1 RHEL8.1.ISO rhel8.1.iso RHEL8.1 rhel8.1
欢迎评分~~
|