[2020-09-21 13:36:59 最后更新]
[epel-release]yum原理及操作
经常使用 centos ,安装软件大多要过 yum 。但 centos 又以稳定出名,所以常用软件很多是不包含的,这时就要上 epel-release 。
如果不明白其中的原理的话是很容易出现各种吐血情况的。网上解答原理的不多,所以有必要综合一下。
1.yum 是官方的在线软件安装命令系统。
YUM(Yellowdog Updater Modified):是一个基于RPM的软件包管理器,能够从指定服务器自动下载RPM包并且安装,可以处理软件之间的依赖关系,一次性安装所有依赖的软件包,无需一个个下载安装。
2.默认的 yum 源在国外,所以一般会要切换到国内源。所谓的源就是下载软件的网址,即最后要安装的软件包的位置。
3.yum 本质在就是搜索一个软件相关的 rpm, so 文件,然后再安装。
4.epel-release 就是非官方,但权威的第三方源信息。
5.epel-release 安装后会默认禁用掉原来的 yum ,有可能会造成混乱导致以后的 yum 操作失败。
epel-release的卸载重装
1.yum remove epel-release
2.清空epel目录:rm -rf /var/cache/yum/x86_64/6/epel/
3.安装,yum install epel-release
6.安装前可以先搜索。
例如:
centos7安装R语言(epel-release源)
本文介绍在centos7下通过epel-release源安装R语言,此方法简单粗暴,类似于ubuntu下的sudo apt-get install r-base,值得拥有,具体步骤如下:
1、安装epel-release,执行命令
sudo yum install -y epel-release
注意:centos6.4安装完epel-release后,需把/etc/yum.repos.d/epel.repo文件中的所有#baseurl改成baseurl、所有mirrorlist改成#mirrorlist,否则yum不能正常使用。
2、搜索下R-core,执行
yum search R-core
结果如下:
R-core.x86_64 : The minimal R components necessary for a functional runtime
R-core-devel.x86_64 : Core files for development of R packages (no Java)
3、安装R语言,执行
sudo yum install -y R-core.x86_64
sudo yum install -y R-core-devel.x8
7.什么是epel源
EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.
EPEL 本身也是 rpm 包,所以可以用 yum 安装。如果本身 yum 源是无法访问的,也可以手工下载这些 rpm 来安装。
在http://mirrors.sohu.com/fedora-epel/目录下,有对应不同的版本
epel-release-latest-5.noarch.rpm
epel-release-latest-6.noarch.rpm
epel-release-latest-7.noarch.rpm
安装前确认你的CentOS版本
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
这里我是CentOS7的系统,以7为例进行如下操作
下载EPEL的rpm安装包
# wget http://mirrors.sohu.com/fedora-epel/epel-release-latest-7.noarch.rpm
技术分享图片
安装epel的rpm包
# rpm -ivh epel-release-latest-7.noarch.rpm
清除建立缓存,使用yum安装nginx服务测试一下
# yum clean all
# yum makecache
# yum install nginx -y
到此epel源就安装完成了,通过epel源可以安装大部分的软件
8.yum 的原理似乎是访问 https://pkgs.org 里面会有包的下载地址,以及还要再下载的依赖包是哪些。
例如 https://pkgs.org/download/epel-release
https://pkgs.org/search/?q=filezilla
可以看到其中区分了不同 os 版本,不同 cpu 版本的 rpm 包。也可以看到大多是 64 位的 32 位的极少,所以我们安装系统时也尽量要用 64 位的。
另外,它也是有时效性的,稍微过时点的软件也是没有的。所以平时还是要备份自己顺手的软件。
9.yum 是可以同时使用多个源的
例如
https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/
http://mirrors.163.com/centos/7/os/x86_64/repodata/
以及单个软件也是可以的,比如 nginx 官方的
http://nginx.org/packages/centos/7/x86_64/repodata/
最后可以找到
http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.10.0-1.el7.ngx.x86_64.rpm
查找的方法也就是 yum 的原理了:
参考 https://www.cnblogs.com/pfwndsee/p/3968007.html
1.先访问对应的 repodata 网络目录。里面会有个 repomd.xml 文件,记录了以下信息文件在什么地方(一般也就默认在 repodata 中)
格式为 data type="primary"
"filelists" -- filelists.xml里面记录了所有rpm包列表,版本号,配置文件等
"primary" -- primary.xml里面记录描述了rpm包的依赖等信息
"primary_db" -- sqlite 数据库格式
"other_db"
"other"
"filelists"
没看到这几个文件的详细说明,不过格式都很简单,我个人的推理总结为:
最重要的是 primary.xml 记录了 rpm 包的下载地址和依赖的 so 等等。而这个 so 又在哪个 rpm 里呢?就要在 filelists.xml 中找,找到这个文件后会发现没有包名 ...
实际在会给一个包的 id 让你再去 primary.xml 里找,例如:
pkgid="29a52c675bf20c3ff62cf6627b3dc4957fd8ab8636ee3e98db8db22473ce4083"
10.所以实际上是可以不安装 epel-release 的 rpm 自己根据以上知识下载到官方没有的 rpm 和依赖包的。
例如以下安装 filezilla 的跳转过程:
https://fedoraproject.org/wiki/EPEL
>https://fedoraproject.org/wiki/EPEL#Quickstart
>https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/ 默认就是会跳转到国内的 清华大学镜像
>https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/f/ 这下面就会找到 filezilla 了。
>用命令 rpm -ivh 安装会报 "libwx_gtk2u_xrc-2.8.so.0" 不存在,如果不了解相关的库又不懂 yum 原理的话,只能去搜索这是啥意思了,一般还可能折腾半天以放弃告终。
而知道 yum 原理的话就可以去 epel 或者 centos7 的 filelist.xml 或者 primary.xml 中找到这个文件所在的 rpm 包。
找到这个包后安装会再报另外一个包依赖,不过没关系,看一眼就知道是要安装 "wxGTK-2.8.12-20.el7.x86_64.rpm" 和 "wxBase-2.8.12-20.el7.x86_64.rpm"。原因嘛就可以知道 filezilla 在 centos7 下是用 wxWidgets ui 库开发的。
其中还有 epel/7 epel/6 epel/8 的版本区别,尚不知道理是什么区分规则,根据对应 centos7 这样的版本号吧。
另外如果清华上没有的话还可以换其他的,我试过国内镜像的文件还是不太一样的,如果某个软件有点老不妨看看其他站点有没有。