概述
某些時候,我們需要下載某個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的知識請前往博客主頁查看。