博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

安装epel源产生的报错:Cannot retrieve metalink for repository: epel. Please verify its path and try again解决方法与产生原因

 

 

 直接上图,如图修改,注释mirrorlist使用baseurl的

原理如下:

找到yum.repo.d文件夹下的文件,随便打开一个,找到mirrorlist的url,比如:

https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch

可以在/etc/yum.conf文件中看到如下url:

cachedir=/var/cache/yum/$basearch/$releasever

找到该文件夹下,发现 $basearch 其实就是 x86_64

这类yum变量也可以在5.3.3. Using YumVariables这里查看:

$releasever

您可以使用此变量引用Red Hat Enterprise Linux的发行版本。yumob从/etc/yum.conf配置文件中的distrovepkg=value行获得$releasever的值。如果/etc/yum.conf中没有这样的行,那么通过从redhat发布包中派生版本号,yum可以推断出正确的值。

$basearch

 您可以使用$basearch来引用系统的基本架构。例如,i686和i586机器的基本架构都是i386,而AMD64和Intel64机器的基本架构是x86_64。

这里有一个$releaserver的骚操作,具体如下:

 在 /etc/yum.repos.d/ 目录下的软件库定义文件中,常常会在 baseurl 的路径中提到$releasever 这个变量,表示当前发行版的大版本号,但大家知道这个变量是在哪设置的吗?我 grep 了整个 etc目录都没找到,还是看了 yum.conf 才知道的,是在 yum.conf 文件里 distroverpkg选项定义的。但这个选项就很有问题:
 distroverpkg 和 releasever 名字不同,且看不出什么联系
distroverpkg的值,并不是明文,而是“redhat-release”。不知道大家看到这个会有什么想法,反正我是首先想到了/etc/redhat-release 文件,但我错了。实际上指的是 redhat-release这个RPM包。所谓“distroverpkg=redhat-release”的意思,其实是将 $releasever 设置为redhat-release 这个RPM包的版本号

然后打开https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=x86_64连接

发现就是一堆容器url,所以mirrorlist指向的就是一堆baseurl(Specifies a URL to a file containing a list of baseurls. )

而baseUrl必须指向 yum服务器上的repository的repodata文件夹,因为这个文件夹上保存着rpm文件安装时需要的依赖信息(Must be a URL to the directory where the yum repository’s ‘repodata’ directory lives.)

我们在日常使用中,配置的阿里yum源其实就是centos对应的原厂的软件更新服务,所以我们一般在baseurl里面进行配置,如:
http://mirrors.aliyun.com/centos/6/os/x86_64
该url指向一个repodata目录的容器地址
这个容器里面是由原厂替我们维护的一系列软件,我们可以高效的安装、卸载、更新软件

但是如果我们需要的第三方软件原厂的提供的容器没有替我们维护,就需要我们自己找到相应的容器地址了,比如docker-engine的容器地址可以如下:
http://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/6
这种就需要我们另外用一个repo文件进行标注,一个单独属于docker-engine的容器。有了容器地址我们又可以使用yum轻松的进行软件的维护

posted @ 2020-03-16 16:25  【Abel】  阅读(550)  评论(0编辑  收藏  举报