背景
rpm安装包是存在依赖关系的。通常在离线安装的时候,没有下全依赖包,安装就会失败。
分析
1.首先我们要使用yumdownloader来下载指定的包。
yumdownloader --disablerepo=* --enablerepo=base,epel,extras --releasever=7 --arch=x86_64 --downloaddir=. sqlite sqlite-devel sqlite-tcl
如果提示yumdownloader命令不存在,需要手动安装yumdownloader:
yum install yum-plugin-downloadonly
--disablerepo用于禁用下载的仓库名,--enablerepo用于指定下载的仓库名,--releasever用于指定centos的版本,--arch用于指定系统的硬件型号,--downloaddir用于指定下载rpm包存放的路径。随后跟着rpm包的包名。
rpm包一般都由一系列组成:基础包、基础包-devel、基础包-其他工具等。
查看rpm包包含哪些包的方法如下(例如sqlite包):
yum list | grep ^sqlite-
结果:
grep ^sqlite-的^表示过滤的结果以sqlite开头,在后面加一个-用于过滤sqlite相关的包,这样就可以过滤出来除基础包以外的包,然后就得到了完整的包。
如果最右一列有installed,表示系统已经安装,否则就是显示的仓库名,表示可以从这个仓库下载和安装。
当然,我们可以给yumdownloader加一个--resolve参数,这样可以自动解析rpm包依赖的包。
2.删除硬件型号不一致的包
假如我们的机器是x86_64的机器,那么就只需要x86_64结尾的,i686结尾的就不是我们需要的,可以删掉。noarch表示和硬件架构无关的,通用的。
rm -f *i686*
3.下载到我们要安装的rpm包,然后下载相关的依赖包
yum install *.rpm --downloadonly --downloaddir=.
这个命令是将当前下载的rpm包进行安装检测,并下载需要的依赖包。后面两个参数不要,则是安装所有的rpm包。 --downloadonly用于说明只下载rpm包,不安装。--downloaddir用于指定下载rpm包存放的路径
4.删除硬件架构不一致的包
和第2步一样,下载的依赖包因为是没有区分系统架构的,所以都下载下来了。根据我们的系统硬件架构,删掉不需要的。
rm -f *i686*
到此,我们就下载完了我们需要的rpm包以及依赖的rpm包。
如果需要安装,只需要:
yum install *.rpm
或
rpm -ivh *.rpm
上述两个命令都可以安装所有的rpm包,且都可以离线把这些rpm包安装上。
总结
yumdownloader只能下载指定的包,不指定版本号则下载最新的版本的包。加上--resolve可以下载依赖包。
yum下载包则可以指定*.rpm来下载所有依赖的包。所以这个可以用于最终检测所有的rpm包的依赖包,防止缺失。
来源: http://www.yu7s.com/article/20230519143422246.html