rpm,yum与相关源配置相关总结

时间:2022-04-18 15:21:26

  以前在学校一直使用的都是Ubuntu16.04,平时作为Linux的初学者倒也觉得好用,几个常见的软件相关指令倒也还记得,“apt install”之类的。

  工作两个月了,公司使用的基本都是基于CentOS的服务器,就算是在AWS上面运行的AMI也基本上是基于CentOS的。CentOS和Ubuntu之间我能体验到的最大的差别大概就是软件包管理系统的不同了,centos上的yum/rpm和apt/deb还是有些不同的(虽然两种发行版在内核版本方面的理念也挺大的=,=)。

  平时网上看一些教程,经常能看见一些配置yum软件包的骚操作,这些操作往往看起来简单但实际需要的时候又往往需要花点时间从Google上找答案,今天正好来了兴致,把yum/rpm以及源配置着重了解了一下,下面记录的权当备忘,希望下次有相关问题能快速解决。

 

0.rpm

  经历过从源码编译安装软件的同学就会对这一麻烦复杂的方式有深刻映象,从而怀念Windows软件安装的时候一键的快捷感,rpm就是为了能够这么快捷安装软件而设计的。

具体的细节本文就不展开了,只要知道rpm是一种软件包组织方式就行,而且在rpm包里面一般还会有相关所依赖包的信息。但rpm没有解决一个问题,那就是软件包依赖之间的管理问题,可以说rpm只是解决了单个软件的组织,而yum才是包管理,特别是相互依赖之间的包管理的工具。

 

1.yum

  yum所解决的就是rpm软件所需要的依赖之间管理的一种工具。所以我们才会看到在CentOS上面安装时使用的是:yum install XXX,但下载下来的是XXX.rpm。

rpm作为一个包管理工具有其在客户端和服务器端(软件仓库)两种组织形态。我们常见的yum命令基本在本地起作用,和仓库打交道往往是在yum install的时候。

yum仓库(repository)说的简单点其实就是一个URL,通过这个URL本地yum client能够从服务器端找到相应的软件信息。CentOS的所有repository信息都被存放在/etc/yum.repos.d目录下面,里面每个以repo结尾的文件都定义着若干repo地址,其格式往往是这样的:

[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6

其中

[base]作为仓库serverid。 

name,是对repository的描述,支持像$releasever $basearch这样的变量。

failovermethode 有两个选项roundrobin和priority,意思分别是有多个url可供选择时,yum选择的次序,roundrobin是随机选择,如果连接失 败则使用下一个,依次循环,priority则根据url的次序从第一个开始。如果不指明,默认是roundrobin。

enabled=[1 or 0]
当某个软件仓库被配置成 enabled=0 时,yum 在安装或升级软件包时不会将该仓库做为软件包提供源。使用这个选项,可以启用或禁用软件仓库。通过 yum 的 --enablerepo=[repo_name] 和 --disablerepo=[repo_name] 选项,或者通过 PackageKit 的"添加/删除软件"工具,也能够方便地启用和禁用指定的软件仓库

gpgcheck和gpgkey与软件包的验证相关,gpgcheck是开关,gpgkey则是gpg公匙的地址,具体请参阅相关gpg的知识。

几个变量
$releasever,发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。
$arch,cpu体系,如i686,athlon等
$basearch,cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。

可以看到这个目录下面的repo文件有多个,其中被enable的repository则往往不会很多,一般为常见的Base,updates,extras。

本地yum的配置文件是/etc/yum.conf,在/etc/yum/目录下面还有一些配置文件,有一些是yum插件的配置,比如/etc/yum/pluginconf.d/fastestmirror.conf。该插件能够帮你自动选择速度最快的repo。

 

2.源配置

  国内有不少源可以提升我们对yum软件包访问的速度,相关平台一般也都提供了换源的相关操作指南,比如清华的源:https://mirror.tuna.tsinghua.edu.cn/help/centos/,可以说换个国内的源还是很简单的。

  但我们有时候并不一定满足于官方源所提供的支持,一些第三方软件也会提供repo支持,这时候就需要我们手动配置源:

以kubernetes为例,aliyun的mirror中就提供了kubernetes官方的软件仓库,https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/,从这个url就能访问到他的repo源,但具体的repo文件里面的base url该如何确定呢?其实只要一直深入到看见repodata这个文件夹就行了,此时的URL就是所在repository的base URL。把这个url写入repo文件就能定位一个yum可用的仓库,开启enable之后使用yum repolist命令就能看到仓库的相关信息,也就能够安装相应仓库里面的软件了。

 

3.感想

  知其然而不知其所以然的东西又少了一样还是很不错的,对于Linux相关平台上的软件分发流程也有了更加深入的了解,感觉有触类旁通的效果,愉快的学习过程。