在CentOS在线环境上下载所有RPM包依赖,然后在离线环境上安装,网上的资料不少。但实践了下,觉得网上的资料雷同的比较多,也陈旧了点,或其建议方法不能解决所有场景问题。

网上建议大概都是两种操作方法,使用一句命令就可以搞定,假设,以安装VirutalBo为例:

#方法1

yum install --downloadonly --downloaddir=. VirtualBox-5.2-5.2.34_133893_el6

#方法2,需要特殊yum安装yum-utils组件

yumdownloader --resolve --destdir=. VirtualBox-5.2-5.2.34_133893_el6

 

今天试了下,建议操作命令存在适应性问题,它们并不能下载所有的依赖包!

两条命令均是根据本机环境,选择性地做一些下载,所以,除非是对等的环境,不然,在离线环境安装,很有可能还是会出现RPM包依赖问题。

因为个人还是很想完全下载完所有的VirtualBox依赖包,所以,就使用yum deplist的命令查看包依赖关系。最开始,先是自己通过手工一条条进行选择拷贝、粘贴,记载下载组件日志,下载组件,然后再次利用yum deplist的命令输出,作正确性的校验,对比是否下载完整了。

好在Linux上gedit记事本,一个非常友好的功能,就是“以当前行内容进行搜索”的时间,搜索框里面可以看出来此行是第几个出现,加快了不少速度。

假设,我把我下载过的组件日志记录在文件顶部,yum deplist二次输出的内容放在文件下面。然后,从下面最完整的yum deplist输出内容开始,一个个对依赖进行搜索。如果,搜索功能说当前搜索行是出现在大于1的位置,那么就可以证明,前面手工下载组件时,确实下载过(为了避免一些重复内容,在搜索比较时,进行些删除也是非常建议的,因为重复行,也都已经被gedit高亮显示)!

真佩服自己的耐心!!!

沉下心来,发现yum deplist的输出非常格式化,而且为了避免让其他人不再麻烦,那么为什么不用Shell脚本去分析、去下载呢?而且脚本代码量粗略估算不大,用一行Shell脚本应该可以完事。

说干、就干,根据以前的Shell编程经验和网上搜备忘资料(记得有这个功能,但是不知道怎么去写了,与提笔忘字一样),后来测试通过用一行Shell脚本自动下载RPM依赖包的代码:

yum deplist VirtualBox-5.2-5.2.34_133893_el6-1.x86_64 |grep provider|cut -d ':' -f 2 > pkgs.txt ;while read line ; do yumdownloader --resolve --destdir=. $line ; done < pkgs.txt

 

注:

   1、本来想仅利用yum自身downloadonly的下载方法;但是,在环境中,它的适应性还是比较明显,就不得不引入yumdownloader

2、Shell脚本写成一行,用;分割是关键