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

本文介绍了如何在内网环境中下载和管理RPM包的依赖,包括通过`yuminstall--downloadonly`下载依赖、使用`yumdownloader`自动获取依赖、以及搭建私有yum仓库的方法,以解决依赖问题和简化安装过程。
摘要由CSDN通过智能技术生成

概述

某些时候,我们需要下载某个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依赖

方法一:通过downloadonly下载

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

#指定某个目录缓存rpm包
[root@k8s-m1 ~]## yum install --downloadonly --downloaddir=/root/mypackages/ httpd

如果需要再某个服务器安装包,并缓存所有安装的包可以通过修改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

方法二:通过yumdownloader

Yumdownloader是一款简单,但是却十分有用的命令行工具,它可以一次性下载任何 RPM 软件包及其所有依赖包,而且它不用修改任何配置。

#以 root 身份运行如下命令安装 Yumdownloader 工具。
[root-m1 ~]# yum install yum-utils

#安装完成后,可以运行如下命令去下载一个软件包,例如 httpd。
[root-m1 ~]# yumdownloader httpd

#为了根据所有依赖性下载软件包,我们使用 --resolve参数:
[root-m1 ~]# yumdownloader --resolve httpd

#默认情况下,Yumdownloader 将会下载软件包到当前工作目录下。为了将软件下载到一个特定的目录下,我们可以使用 --destdir 参数:
[root-m1 ~]# yumdownloader --resolve nginx --destdir=/tmp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
--> Running transaction check
---> Package nginx.x86_64 1:1.20.1-10.el7 will be installed
--> Processing Dependency: nginx-filesystem = 1:1.20.1-10.el7 for package: 1:nginx-1.20.1-10.el7.x86_64
--> Processing Dependency: libcrypto.so.1.1(OPENSSL_1_1_0)(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64
--> Processing Dependency: libssl.so.1.1(OPENSSL_1_1_0)(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64
--> Processing Dependency: libssl.so.1.1(OPENSSL_1_1_1)(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64
...... 

[root-m1 ~]# ll /tmp/
total 2412
-rw-r--r-- 1 root root  278636 Apr 25  2018 gperftools-libs-2.6.1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root  601657 Nov 11  2022 nginx-1.20.1-10.el7.x86_64.rpm
-rw-r--r-- 1 root root   24229 Nov 11  2022 nginx-filesystem-1.20.1-10.el7.noarch.rpm
-rw-r--r-- 1 root root 1527705 Feb 20 07:20 openssl11-libs-1.1.1k-5.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 /tmp  -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 nginx  --enablerepo=test_yum -y
#实验效果是能正常安装

更多关于Linux的知识请前往博客主页查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

margu_168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值