这两天在公司搭建环境时,在yum安装的过程中出现了一些问题,顺带对yum的使用做了一些自己的思考,做个小结。
以安装docker-ce为例进行说明。
先看一下镜像的查找,常用的命令就是 yum list。比如查找可用的docker-ce镜像。
1.下载时软件包的命名规则问题。
yum list docker-ce --showduplicates
这里要注意的是中间的一列,中间的一列显示的为版本号,在下载时候要注意。在查找出软件的版本号之后,安装的时候应该是
软件名跟上版本号。如果只填写版本号,会提示没有该软件软件包。
还有一个地方需要注意,是有的版本号比较特殊,为x:y的形式,这时版本号就不能取整个版本号字符串,而是取冒号后面的一段作为版本号。
2.查找的参数的含义,主要是yum list中含有--showduplicates、available与不带参数的区别。
available 这里的available出现在两个不通的地方,一个是命令中的available参数,一个是输出的列表中的available参数。输出列表中的available参数表示本地含有可用版本的软件包,但是还没有安装的状态,则该版本软件包就是available状态。
命令中的available参数是显示已安装的软件包和本地有安装包但未安装的软件版本。
showduplicates 则是yum源的索引中有对应该版本的软件包索引记录,即可用的软件包。但是本地不一定还有软件包。
yum list docker-ce
list默认available参数。列出的是本地已经安装的软件版本包和本地含有软件包,但是没有安装的软件版本。
yum list docker-ce --showduplicates
带有showduplicates参数则列出的是所有yum源索引中含有的软件版本,但本地不一定有安装包的软件版本包。
3.安装了某个版本的软件包后,发现版本不对,如何再安装另外版本的软件包?
安装了软件包的A版本后,要切换到软件包的B版本,需要
1)卸载A版本软件包;
2)清理残留的A版本依赖包;
3)安装B版本的软件包。
比如安装了docker-ce-18.09.0-3.el7(A)高版本的docker-ce,现在要切换到低版本的docker-ce-18.06.0.ce-3.el7(B),该如何操作?
如果不卸载A这个高本版,直接安装B低版本,一般提示相关的软件包冲突,所以需要先卸载A版本。
先卸载
yum remove docker-ce-18.09.0-3.el7
卸载后,不清理A残留依赖包,这个时候如果直接安装低版本B的会提示冲突。
yum install docker-ce-18.06.0.ce-3.el7
需要先找出A版本的相关包,然后逐个清理掉。
yum list installed | grep docker-ce
yum remove containerd.io.x86_64
yum remove docker-ce-cli.x86_64
清理后,再次检查,发现已经没有A相关的包。
这个时候再安装B版本,可以正常安装。
yum install docker-ce-18.06.0.ce-3.el7
4.如何在联网的环境下,模拟离线安装的过程?
比如初始状态配置了一个docker-ce的在线的yum源,PC上没有安装docker-ce。
在线的yum源。
PC上没有安装docker-ce。
这个时候可以只现在docker-ce需要的所有的依赖包到本地一个指定的目录下,比如/rpms/docker-ce/下。
yum install --downloadonly --downloaddir=/rpms/docker-ce/ docker-ce-18.06.0.ce-3.el7
可以看到所需要的包已经下载到对应的目录下。
这时需要做两件事情
1)在对应的下载目录下生成本地yum仓库的repodata/repomd.xml的索引文件。前提是安装了createrepo工具包,否则需要先行安装createrepo。
createrepo /rpms/docker-ce/ #创建索引文件
2)将在线的yum源删除,然后添加指向下载目录的本地yum源文件local.repo。
使用本地的local源安装,安装成功。