CentOS / RHEL 配置yum源
Table of Contents
1 前言
本文内容过长。可以通过页面右上角的目录选择章节进行快速跳转。
由于 redhat的yum在线更新,没有注册的情况下不能使用。但是好在有CentOS这一开源项 目,让我们可以通过配置公开源来方便的安装和更新软件包。
对于安装RHEL版本的Linux,想要使用yum源,需要先将原本的yum卸载掉,然后重新安装.
CentOS版的Linux因其本身是开源项目,其ISO中自带的yum是可用的,不需要重新安装。
本文包括配置本地源及第三方源。第三方源包括:阿里、网易, epel,repoforge, rpmfusion.
其实整个配置过程,相当于把RHEL的源更换为CentOS的源以及其他开源项目的源。
以下为详细过程.
2 关于yum
2.1 YUM是什么
YUM = Yellow dog Updater, Modified 主要功能是更方便的添加/删除/更新RPM包. 它能自动解决包的倚赖性问题. 它能便于管理大量系统的更新问题
2.2 YUM特点
*可以同时配置多个资源库(Repository) *简洁的配置文件(/etc/YUM.conf,/etc/YUM.repos.d 下的文件) *自动解决增加或删除rpm包时遇到的倚赖性问题 *使用方便 *保持与RPM数据库的一致性
2.3 安装yum
参见 重新安装yum.
2.4 YUM配置
YUM的一切配置信息都储存在一个叫YUM.conf的配置文件中,通常位于/etc目 录下,这是整 个YUM系统的重中之重,所以有必要详细介绍。下面是一个从网上找来的YUM.con文件,让我 们以此为例,进行说明。
[main] cachedir=/var/cache/yum debuglevel=2 logfile=/var/log/yum.log pkgpolicy=newest distroverpkg=redhat-release tolerant=1 exactarch=1 retries=1 [base] name=Fedora Core $releasever - $basearch - Base baseurl=http://download.atrpms.net/mirrors/fedoracore/$releasever/$basearch/os http://rpmfind.net/linux/fedora/cor...er/$basearch/os http://mirror.clarkson.edu/pub/dist...er/$basearch/os [updates-released] name=Fedora Core $releasever - $basearch - Released Updates baseurl=http://download.atrpms.net/mirrors/fedoracore/updates/$releasever/$basearch http://redhat.linux.ee/pub/fedora/l...sever/$basearch http://fr2.rpmfind.net/linux/fedora...sever/$basearch [Fedora.us] name=Fedora.us - $basearch - Extras baseurl=http://fedora.linux.duke.edu/fedorax86_64/fedora.us/$releasever/$basearch/RPMS.stable [Dag Wieers] name=Dag RPM Repository for Fedora Core baseurl=http://apt.sw.be/fedora/$releasever/en/$basearch/dag [Livna] Name=Livna RPM, Fedora Core $releasever - $basearch baseurl=http://rpm.livna.org/fedora/$releasever/$basearch/RPMS.stable [freshrpms] name=FreshRPMs baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms/ http://ftp.us2.freshrpms.net/linux/...arch/freshrpms/
MAIN 部分
这是YUM的全局性设置。默认一般不必改动。根据以上示例及其他内容整理如下
#+name : tbl:yum 配置 [main] 部分选项详解
参数 说明 cachedir YUM缓存的目录,YUM在此存储下载的rpm包和数据库,一般是/var/cache debuglevel 除错级别,0-10,默认是2。 logfile YUM的日志文件,默认是/var/log/YUM.log。 pkgpolicy 包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多 repository,而同一软件在不同的repository中同时存在,YUM应该安装 一个,如果是newest,则YUM会安装最新的那个版本。如果是last,则YU 会将服务器id以字母表排序,并选择最后的那个服务器上的软件安装。一 是选newest。 distroverpkg 指定一个软件包,YUM会根据这个包判断你的发行版本,默认是 redhat-release,也可以是安装的任何针对自己发行版的rpm包。 exactarch 有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果 为1,则如你安装了一个i386的rpm,则YUM不会用1686的包来升级。 retries 网络连接发生错误后的重试次数,如果设为0,则会无限重试。 tolerent 也有1和0两个选项,表示YUM是否容忍命令行发生与软件包有关的错误, 要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则YUM不会 错误信息。默认是0。 exclude= 排除某些软件在升级名单之外,可以用通配符,列表中各个项目要用空格隔 开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。 gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认 是检查的。 0 代表不检查,1代表检查。 服务器信息 配置repository服务器了,这是最令人激动的,有了好的repository,就如家门口开了大卖场,要什么东西稍微跑跑腿就行,对了这还是个免费的大卖场。 所有服务器设置都应该遵循如下格式:
[serverid] name=Some name for this server baseurl=url://path/to/repository/
其中serverid是用于区别各个不同的repository,必须有一个独一无二的名称。 name,是对repository的描述,支持像$releasever $basearch这样的变量; baseurl是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。它的格式是:
- baseurl=url://server1/path/to/repository/
- url://server2/path/to/repository/
- url://server3/path/to/repository/
其中url支持的协议有 http:// ftp:// file://三种。baseurl后可以跟多个url,你可以自己改为速度比较快的镜像站,但baseurl只能有一个,也就是说不能像如下格式:
- baseurl=url://server1/path/to/repository/
- baseurl=url://server2/path/to/repository/
- baseurl=url://server3/path/to/repository/
其中url指向的目录必须是这个repository header目录的上一级,它也支持$releasever $basearch这样的变量。 url之后可以加上多个选项,如gpgcheck、exclude、failovermethod等,比如:
- [updates-released]
- name=Fedora Core $releasever - $basearch - Released Updates
- baseurl=http://download.atrpms.net/mirrors/fedoracore/updates/$releasever/$basearch
- http://redhat.linux.ee/pub/fedora/linux/core/updates/$releasever/$basearch
- http://fr2.rpmfind.net/linux/fedora/core/updates/$releasever/$basearch
- gpgcheck=1
- exclude=gaim
- failovermethod=priority
其中gpgcheck,exclude的含义和[main]部分相同,但只对此服务器起作用,failovermethode 有两个选项roundrobin和priority,意思分别是有多个url可供选择时,YUM选择的次序,roundrobin是随机选择,如果连接失 败则使用下一个,依次循环,priority则根据url的次序从第一个开始。如果不指明,默认是roundrobin。
几个变量
$releasever,发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。 $arch,cpu体系,如i686,athlon等 $basearch,cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。
对YUM.conf设定完成,我们就可以好好体验YUM带来的方便了。
2.5 软件源
yum可以在线安装软件,依赖的就是软件源。软件源可以为网络源也可以为本地源。
yum在操作之前会读取配置文件,查找源指向的信息,根据信息查找rpm包、解决包之间的依赖关系以及rpm包的版本兼容性问题。
软件源默认存储在/etc/yum.repos.d/路径中。这里对源配置的基本格式加以说明。以网易源为例:
[base] name=CentOS-$releasever - Base - 163.com baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/ enabled=1 gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
参数 | 说明 |
---|---|
[base] | 这个是软件源的名字,且 [ ] 里面不能为空。 |
name | 这个只是软件源的一个描述,也可以随意些,但要有意义。 |
baseurl | 指定路径,可以用 file,ftp,http 如果用后面的两个必须开启相应的服务, |
file 可以用来做本地软件源(如:将本地 DVD 设置为软件源),一定要保证路 | |
enabled | 有 1 和 0 两个选项,1 代表开启,0 代表关闭,开启是指激活这个软件源, |
关闭则不激活这个软件源。 | |
gpgcheck | 指下载软件包的时候是否检查数字签名,用来检查软件包的完整性。开启 gpgcheck |
后,通过 gpgkey 来指定,相应的 rpm-gpg 文件,如果不指定 gpgkey 文件,那么就必须 | |
手动的导入相应的 rpm-gpg 文件. |
2.6 YUM使用
注:当第一次使用YUM或YUM资源库有更新时,YUM会自动下载所有所需的headers放置于/var/cache/YUM目录下,所需时间可能较长.
2.7 YUM常用问题解决
2.7.1 超时退出
如果网速慢的话可以通过增加YUM的超时时间,这样就不会总是因为超时而退出。
在 /etc/yum.conf中 #加上这么一句
timeout=120
2.7.2 YUM Existing lock
如果系统启动的时候, YUM出现Existing lock /var/run/YUM.pid: another copy is running as pid 6908. Aborting.可以用下面的办法解决:
方法一
/etc/init.d/YUM-updatesd stop
方法二
rm -f /var/run/YUM.pid
主要原因就是YUM在自动更新,只要关掉它就可以了。
3 重新安装yum
这一部分适用于RHEL版本的Linux,CentOS的Linux可忽略。
3.1 卸载yum
rpm -aq|grep yum|xargs rpm -e --nodeps
3.2 确定下载文件
在下载之前,首先我们要知道,我们在哪里下载,需要下载什么。
确定下载地址 首先要确定下载地址。我一般使用阿里源,因为速度比较快。阿里的下载地址格式是这样的:
https://mirrors.aliyun.com/centos/$release/os/$basearch/Packages/
其中$release,是操作系统版本。 $basearch 是操作系统位数(32或者64位对应的 i386 和 x86_64).
查看操作系统的版本
cat /etc/redhat-release
示例:
Red Hat Enterprise Linux Server release 7.6 (Maipo)
从示例中,可以看出版本号是7.6。 在yum 源中一般不配置小版本号,只配置大版本号,也就是7.
查看操作系统位数
getconf LONG_BIT
示例:
[root@test1 data]# getconf LONG_BIT 64 [root@test1 data]#
结果为64,表明是64位操作系统,对应的$basearch 为 x86_64,如果是32位操作系统则结果为32,对应$basearch为i386. 一般来说,服务器现在没有人再安装32位操作系统了。阿里也不再提供i386的yum源。
经过以上的查看,我们yum相关安装包的下载页面就是: https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/
通过这一步,基本了解了下载地址的规律。针对不同的版本可以自行调整.
确定下载文件 在上一步中的页面查找以下文件
- yum-<version>-<fixed-version>.el7.centos.noarch.rpm
- yum-metadata-parser.<version>-<fixed-version>.el7.x86_64.rpm
- yum-plugin-fastestmirror-<version>-<fixed-version>.el7.noarch.rpm
- python-iniparse-<version>-<fixed-version>.el7.noarch.prm
可以直接通过关键词 yum yum-metadata-parser yum-plugin-fastestmirro python-iniparse 直接在页面进行搜索,然后点击下载,也可以使用下面命令直接在Linux操作系统中进行下载。
wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-3.4.3-161.el7.centos.noarch.rpm wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/python-iniparse-0.4-9.el7.noarch.rpm
3.3 安装
- note
- 基本上操作都需要root用户权限,如果不能直接以root用户登录,可以su 进行切换。
rpm -ivh python-iniparse-0.4-9.el7.noarch.rpm rpm -ivh yum-metadata-parser-1.1.4-10.el7.x86_64.rpm rpm -ivh yum-3.4.3-161.el7.centos.noarch.rpm yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm
- NOTE
- 最后一条命令中的两个安装包一定要一起安装,否则会出现依赖问题。
4 配置网络YUM源
一般来讲, base 源就已经足够用,有找不到的包的话,可以考虑配置epel源,再找不到的话,再配置rpmfusion源。
4.1 配置阿里云源
备份原repo文件 备份文件,是为了防止修改repo文件时出现问题时,我们还有备份文件可以还原。
cd /etc/yum.repos.d mkdir backup mv *.repo backup/
配置阿里云源 CentOS yum源的配置文件,包含几个部分: base updates extras centosplus 四个部分。 我们分别需要对其进行配置,当然只配置一个base也没有问题。
配置过程的最关键的就是确认mirrorlist的地址。先下载阿里云的repo文件:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
可以直接打开 http://mirrors.aliyun.com/repo 查找自己需要的版本的repo文件。
下载完成后,打开文件CentOS-Base.repo,将"$release"和"$basearch"替换成实际值。 对于使用RHEL安装包安装的操作系统,release 保留大版本号,本文章示例为 7, 而对于CentOS版的操作系统,可以直接替换成全版本号比如: 7.6.1810; 将$basearch 为 x86_64, 再将enabled=0 改为 enabled=1. 至于用什么方法替换,你开心就好。
为了方便朋友,现在将我已经将针对CentOS 7.6.1810版操作系统的repo内容整理成脚本,可以直接复制粘贴执行, 不用先下载文件再修改了。
cat >> /etc/yum.repos.d/CentOS-Base.repo <<EOF [base] name=CentOS-7.6.1810 - Base - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/ http://mirrors.aliyuncs.com/centos/7.6.1810/os/x86_64/ http://mirrors.cloud.aliyuncs.com/centos/7.6.1810/os/x86_64/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-7.6.1810 - Updates - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/7.6.1810/updates/x86_64/ http://mirrors.aliyuncs.com/centos/7.6.1810/updates/x86_64/ http://mirrors.cloud.aliyuncs.com/centos/7.6.1810/updates/x86_64/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [extras] name=CentOS-7.6.1810 - Extras - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/7.6.1810/extras/x86_64/ http://mirrors.aliyuncs.com/centos/7.6.1810/extras/x86_64/ http://mirrors.cloud.aliyuncs.com/centos/7.6.1810/extras/x86_64/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-7.6.1810 - Plus - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/7.6.1810/centosplus/x86_64/ http://mirrors.aliyuncs.com/centos/7.6.1810/centosplus/x86_64/ http://mirrors.cloud.aliyuncs.com/centos/7.6.1810/centosplus/x86_64/ gpgcheck=1 enabled=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 #contrib - packages by Centos Users [contrib] name=CentOS-7.6.1810 - Contrib - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/7.6.1810/contrib/x86_64/ http://mirrors.aliyuncs.com/centos/7.6.1810/contrib/x86_64/ http://mirrors.cloud.aliyuncs.com/centos/7.6.1810/contrib/x86_64/ gpgcheck=1 enabled=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 EOF
4.2 配置epel源
阿里云epel
阿里云同时提供了epel源。与上一步中的操作过程完全一样。如下:
#下载repo文件 wget -O /etc/yum.repos.d/CentOS-epel.repo http://mirrors.aliyun.com/repo/epel-7.repo # 修改文件CentOS-epel.repo , 将$basearch替换成x86_64 ; enabled=0 改为enabled=1
脚本也准备好,朋友们可以直接复制粘贴,不用再从网上下载文件:
cat >> /etc/yum.repos.d/CentOS-epel.repo <<EOF [epel] name=Extra Packages for Enterprise Linux 7 - x86_64 baseurl=http://mirrors.aliyun.com/epel/7/x86_64 failovermethod=priority enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 [epel-debuginfo] name=Extra Packages for Enterprise Linux 7 - x86_64 - Debug baseurl=http://mirrors.aliyun.com/epel/7/x86_64/debug failovermethod=priority enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=0 [epel-source] name=Extra Packages for Enterprise Linux 7 - x86_64 - Source baseurl=http://mirrors.aliyun.com/epel/7/SRPMS failovermethod=priority enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=0 EOF
fedora epel
Fedora EPEL 下载:http://mirrors.fedoraproject.org/publiclist/EPEL/
EPEL 下载地址:http://download.fedora.redhat.com/pub/epel/
以上网直可能不 可用,此时,登录到下面的地址:
https://fedoraproject.org/wiki/EPEL
查找:“How can I use these extra packages?”
在该条目内可以找到: The newest version of 'epel-release' for (版本)
下载epel包。再执行安装。
请针对不同的版本下载相应的包。
4.3 配置repoforge源
rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm yum makecache
4.4 配置rpmfusion源
RPMFusion官网:http://rpmfusion.org/
RHEL 6/CentOS 6
yum -Uvh http://download1.rpmfusion.org/free/el/rpmfusion-free-release-6.noarch.rpm
RHEL 7/CentOS 7
yum -Uvh http://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
RHEL 8 / CentOS8
yum -Uvh http://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm
5 配置本地yum源
对于一些环境,我们并不能联网。因此需要配置一个本地源。
配置本地源的前提是下载一个完整的ISO镜像文件,推荐下载everything版本的ISO。比如:
http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1810.iso
这个版本比基础安装版多了一个GB 的rpm包,常用的包在这里面都能找到。
关于iso文件的挂载,参考: 开机自动挂载ISO文件.
对于虚拟机来讲, ISO文件可以配置成开机自动连接,此时 /dev/cdrom 代表了ISO文件。 挂载本地源的过程如下:
- 1) 创建挂载路径
- mkdir /mnt/iso
- 2) 挂载ISO镜像
- 虚拟机 : mount /dev/cdrom /mnt/iso
- ISO镜像 : mount /CentOS-7-x86_64-Everything-1810.iso /mnt/iso
- 3) 编辑repo文件
vi /etc/yum.repos.d/CentOS-Media.repo 内容如下:
[local_iso] name=local iso baseurl=file:///mnt/iso gpgcheck=1 enabled=1 gpgkey=file:///mnt/iso/RPM-GPG-KEY-CentOS-7
Created: 2019-08-10 Sat 01:46