【日常积累】RPM包依赖下载及私有yum仓库搭建

概述

某些时候,我们需要下载某个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包依赖下载及私有yum仓库搭建_第1张图片

通过此种方法下载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的知识请前往博客主页查看。

你可能感兴趣的:(日常积累,linux)