概述
某些时候,我们需要下载某个RPM包依赖的依赖。如某些内网环境,就需要自行准备rpm包。可以通过能上互联网的服务器进行相应的rpm包下载,然后在拷贝到相应的服务器安装,或者搭建自己的内容rpm包仓库。
查看*.rpm 包依赖:
#可以任意找一个rpm包测试
[root@k8s-m1 ~]# find / -name *.rpm
/root/kernel-lt-5.4.186-1.el7.elrepo.x86_64.rpm
[root@k8s-m1 ~]# rpm -qpR /root/kernel-lt-5.4.186-1.el7.elrepo.x86_64.rpm
warning: /root/kernel-lt-5.4.186-1.el7.elrepo.x86_64.rpm: Header V4 DSA/SHA256 Signature, key ID baadae52: NOKEY
fileutils
module-init-tools >= 3.16-2
initscripts >= 8.11.1-1
grubby >= 8.28-2
dracut >= 001-7
linux-firmware >= 20100806-2
/usr/sbin/new-kernel-pkg
/usr/sbin/new-kernel-pkg
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1
查找RPM依赖
安装*.rpm 包时,如果缺少依赖,报错信息中会打印出缺少的依赖:
rpm -ivh [package]
然后通过查询 https://pkgs.org/
来查询包的依赖关系。如查找centos7下net-tools所需的依赖
通过此种方法下载rpm包的依赖有时候很麻烦,因为很可能包的依赖是连锁的,适合依赖包比较少的环境。如果所依赖的rpm包很复杂,推荐以下方法。
下载RPM依赖
centos7为例:
通过yum install --downloadonly --downloaddir=[download_dir] [package] 来只下载包不安装包,然后通过缓存来在不能连接互联网的服务器上安装。下载时,最好服务器的系统类型和版本一致,避免版本不兼容的情况发生。
#下载某个rpm包的缓存
[root@k8s-m1 ~]# rpm -qpR /tmp/docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm |xargs yum install --downloadonly#缓存已有rpm包的依赖
[root@k8s-m1 ~]# rpm -qpR /var/cache/yum/x86_64/7/*/packages/*.rpm |xargs yum install --downloadonly[root@k8s-m1 ~]# cd /var/cache/yum/x86_64/7
[root@k8s-m1 ~]# rpm -qpR */packages/*|egrep "<|>=" |egrep -v "\(|\)"|awk -F " >= " '{print $1}'|xargs yum install --downloadonly
或者修改yum的配置文件/etc/yum.conf,如下,需要在本服务器下载并安装:
#修改配置
[root@k8s-m1 ~]# vim /etc/yum.conf
cachedir=/var/cache/yum/$basearch/$releasever #缓存下载目录,这是默认位置
keepcache=1 #keepcache为0表示不缓存,为1 表示缓存
......#安装所需yum包
[root@k8s-m1 ~]# yum install docker-ce-18.06.0.ce-3.el7 -y
....
然后到相应的目录查看并拷贝所依赖的rpm包,centos7 目录如下:
[root@k8s-m1 ~]# ll /var/cache/yum/x86_64/7/*/packages/*.rpm
-rw-r--r-- 1 root root 42643244 Jul 28 2020 /var/cache/yum/x86_64/7/docker-ce-stable/packages/docker-ce-18.06.0.ce-3.el7.x86_64.rpm
-rw-r--r-- 1 root root 40816 Jul 6 2020 /var/cache/yum/x86_64/7/extras/packages/container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
-rw-r--r-- 1 root root 78256 Aug 23 2019 /var/cache/yum/x86_64/7/os/packages/audit-libs-python-2.8.5-4.el7.x86_64.rpm
-rw-r--r-- 1 root root 302068 Nov 12 2018 /var/cache/yum/x86_64/7/os/packages/checkpolicy-2.5-8.el7.x86_64.rpm
-rw-r--r-- 1 root root 67720 Aug 23 2019 /var/cache/yum/x86_64/7/os/packages/libcgroup-0.41-21.el7.x86_64.rpm
-rw-r--r-- 1 root root 115284 Nov 12 2018 /var/cache/yum/x86_64/7/os/packages/libsemanage-python-2.5-14.el7.x86_64.rpm
-rw-r--r-- 1 root root 50076 Apr 13 2017 /var/cache/yum/x86_64/7/os/packages/libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm
-rw-r--r-- 1 root root 468316 Apr 4 2020 /var/cache/yum/x86_64/7/os/packages/policycoreutils-python-2.5-34.el7.x86_64.rpm
-rw-r--r-- 1 root root 32880 Jul 4 2014 /var/cache/yum/x86_64/7/os/packages/python-IPy-0.75-6.el7.noarch.rpm
-rw-r--r-- 1 root root 635184 Nov 12 2018 /var/cache/yum/x86_64/7/os/packages/setools-libs-3.3.8-4.el7.x86_64.rpm
私有yum仓库搭建
使用了http服务作为访问方式。
[root@k8s-m1 ~]# cat create_repo.sh
#注意baseurl中的IP地址
#!/bin/bash
yum install -y httpd createrepo
mkdir -p /var/www/html/data/yum
createrepo -pdo /var/www/html/data/yum /var/www/html/data/yum
find /var/cache/yum/ -name *.rpm -exec cp {} /var/www/html/data/yum \;
createrepo --update /var/www/html/data/yum
systemctl start httpd
cat >>/etc/yum.repos.d/test.repo <<EOF
[test_yum]
name= test_yum
baseurl=http://192.168.2.140/data/yum
gpgcheck=0
EOF
#yum clean all
#yum makecache
#yum repolist all
通过指定yum仓库进行安装,为验证效果,可以先将其他repo源进行重命名或者移至其他文件夹。
[root@k8s-m1 ~]# cd /etc/yum.repos.d/
[root@k8s-m1 ~]# mkdir repo
[root@k8s-m1 ~]# mv CentOS-* docker-ce.repo repo/
[root@k8s-m1 ~]# yum install docker-ce-18.06.0.ce-3.el7 --enablerepo=test_yum -y
#实验效果是能正常安装
更多关于Linux的知识请前往博客主页查看。