暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CentOS下如何优雅地解决安装包依赖问题

背景

一台 CentOS7.5 环境需要安装 xtrabackup,但安装时遇到依赖问题,本文讲解如何优雅地解决依赖问题。

现象如下:

#下载xtrabackup rpm安装包
[root@192-168-199-131 ~]# wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.26/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

#安装时发现缺少依赖
[root@192-168-199-131 ~]# rpm -ivh percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm 
warning: percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 8507efa5: NOKEY
error: Failed dependencies:
 libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.26-1.el7.x86_64
 perl(DBD::mysql) is needed by percona-xtrabackup-24-2.4.26-1.el7.x86_64
 perl(Digest::MD5) is needed by percona-xtrabackup-24-2.4.26-1.el7.x86_64
 rsync is needed by percona-xtrabackup-24-2.4.26-1.el7.x86_64


错误做法1——百度

网上不可能有所有软件安装包的依赖解决方法,而且版本不一样,依赖项的解决可能也不一样,百度只会浪费时间。

错误做法2——一个一个解决依赖

在 6 年前,我会使用yum search
命令一个一个找到依赖包来解决,例如:

yum search perl |grep -i DBD |grep -i mysql
#此时可以找到可用的依赖包 perl-DBD-MySQL.x86_64
yum install perl-DBD-MySQL.x86_64

使用上述办法,把所有的四个依赖包名称都找出来,如图然后,yum install 就可以解决了。

yum install libev.x86_64 perl-DBD-MySQL.x86_64 perl-Digest-MD5.x86_64 rsync.x86_64 -y

...(安装过程略)

[root@192-168-199-131 ~]# rpm -ivh percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm 
warning: percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 8507efa5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:percona-xtrabackup-24-2.4.26-1.el################################# [100%]

这是一个方法,但不优雅。

正确做法——直接yum install/localinstall这个rpm包

因为 yum install rpm 包会自动到 yum 仓库尝试解决依赖问题,无需人为干预。

如果服务器可以联网,则

#直接yum install远程rpm包地址
yum install https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.26/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm -y

如果服务器不能联网,但有内部 yum 源,则

# 用其他机器先下载rpm包,然后上传到服务器后,yum localinstall,本地安装。
yum localinstall percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm -y

扩展——新的问题:网络受限,需要离线安装

如果我的环境是内网环境,并且没有内部yum源怎么办?

方法一——搭建本地或内网yum源

  • 本地搭建 yum 源
  • 找台内网网络通的服务器搭建内网 yum 源

搭建本地/内网 yum 源需要 CentOS7.5 的 IOS 镜像,比较耗时耗力,我主要是介绍下面这种更通用的方法。

方法二——拷贝yum缓存

  1. 找一台可以 yum 的服务器,例如自己笔记本上起个 CentOS7.5 的 vmware
  2. 修改 yum 配置文件,使 yum 安装后保留 rpm 包
vi /etc/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=1

#将 keepcache=0 修改为 keepcache=1
#保留的rpm安装包在 /var/cache/yum

  1. 执行 yum install https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.26/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm -y
    安装 rpm 包。
  2. 依赖默认 rpm 包保留在 var/cache/yum下,要安装的包默认在 var/tmp/yum-root-xxx 里,找出来并拷贝上传到需要安装的服务器上。
tar zcvf 7.tar.gz /var/cache/yum/x86_64/7
ll /var/tmp/yum-root-ouhT6O/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

  1. 需要安装的服务器里,把 7.tar.gz 解压到 var/cache/yum/x86_64/7,把 percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm 上传到 tmp,执行以下命令安装
cd /tmp
yum -C install percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm -y

-C 参数为强制走 yum 缓存安装。

方法三——最佳方法: 只下载依赖包

使用 yum install --downloadonly
下载包的依赖

笔记本的 vmware CentOS7.5 上执行以下

mkdir -p /tmp/xtrabackup

wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.26/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

yum install --downloadonly \
--downloaddir=/tmp/xtrabackup/ \
percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

tar zxvf /tmp/xtrabackup.tar.gz /tmp/xtrabackup

  • --downloadonly 只下载
  • --downloaddir 下载保存的目录

传输到要安装软件的服务器上后,执行以下,就可以成功解压安装软件了。

tar zxvf /tmp/xtrabackup.tar.gz -C /
cd /tmp/xtrabackup
yum localinstall *.rpm -y

---分割线---

同样的替代方案也可以选择用 yumdownloader,两者实际一样的。

只是 yum install --downloadonly
默认会把依赖包全下载下来,而 yumdownloader 默认不下载依赖包,他提供参数--resolve
来选择是否下载依赖包,例如 yumdownloader numactl
表示在 yum 源上下载 numactl 包 "numactl-2.0.12-5.el7.x86_64.rpm" 而不下载他的依赖包。

用法如下:

# 安装 yumdownloader
yum install yum-utils -y

yumdownloader --destdir=/tmp/xtrabackup --resolve percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

  • --destdir 下载保存的目录
  • --resolve 解决依赖

结论

"方法三——最佳方法: 只下载依赖包" 是解决安装包依赖问题最优雅的方法,这也是我做 ansible playbook 实现软件离线部署时,常用的收集软件依赖包的办法。


最后修改时间:2023-05-26 16:27:53
文章转载自芬达的数据库学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论