在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脚本写成一行,用;分割是关键