精通yum配置以及问题解决

作者介绍:幸山,腾讯云助理工程师,目前就职于腾讯,负责腾讯云内容分发网络和动态加速网络的测试工作,全心全意为开发者提供最优质的网络加速服务。

yum简介

yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

yum的命令形式一般是如下:

yum [options] [command] [package ...]

其中的[options]是可选的,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。[command]为所要进行的操作,[package ...]是操作的对象。

可通过命令查看已安装的 yum

# rpm -qa|grep yum

yum的配置文件

yum的配置文件分为两部分,main主配置文件和repository源配置文件:

main主配置文件:yum.conf,通常在路径/etc/下,定义了yum的全局配置,应该只有一个主配置文件。

repository源配置文件:xxx.repo,通常在路径/etc/yum.repos.d/下,定义了源/服务器的地址,顾名思义,就是安装包获取的源路径,可以包含多个,必须是.repo文件后缀,名称可以自定义,yum安装/更新时,根据主配置文件决定获取哪个包来安装。

main主配置文件

打开/etc/yum.conf可以查看配置文件:

cat /etc/yum.conf

[main]
cachedir=/var/cache/yum/$basearch/$releasever
    # yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,默认设置为/var/cache/yum
keepcache=0
    # 安装完成后是否保留软件包,0为不保留(默认为0),1为保留
debuglevel=2
    # Debug 信息输出等级,范围为0-10,缺省为2
logfile=/var/log/yum.log
    # yum 日志文件位置。用户可以到/var/log/yum.log 文件去查询过去所做的更新。
pkgpolicy=newest
    # 包的策略。一共有两个选项,newest 和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository 中同时存在,yum 应该安装哪一个,如果是newest,则yum 会安装最新的那个版本。如果是last,则yum 会将服务器id 以字母表排序,并选择最后的那个服务器上的软件安装。一般都是选newest。
exactarch=1
    # 有1和0两个选项,设置为1,则yum 只会安装和系统架构匹配的软件包,例如,yum 不会将i686的软件包安装在适合i386的系统中。默认为1。
obsoletes=1
    # update 的一个参数,具体请参阅官方文档,简单的说就是相当于upgrade,允许更新陈旧的RPM包。
gpgcheck=1
    # 是否检查GPG(GNU Private Guard),一种密钥方式签名。有1和0两个选择,分别代表是否进行GPG校验,以确定rpm 包的来源是有效和安全的。这个选项如果设置在[main]部分,则对每个repository 都有效。默认值为0。
plugins=1
    # 是否启用插件,默认1为允许,0表示不允许。我们一般会用yum-fastestmirror这个插件。
installonly_limit=5
    # 允许保留多少个内核包。
distroverpkg=rethat-release
    # 指定一个软件包,yum 会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm 包。
retries=6
    # 网络连接发生错误后的重试次数,如果设为0,则会无限重试。默认值为6。
exclude=selinux*
    # 排除某些软件在安装/升级名单之外,可以用通配符,列表中各个项目要用空格隔开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。

repository源配置文件

repository源配置文件定义了软件仓库,yum 安装更新的软件包都是从配置的软件仓库获取的,在目录/etc/yum.repos.d下.repo后缀文件均是可用配置。

repository源配置文件的一般格式如下:

[serverid]
name=Some name for this server
baseurl=url://path/to/repository/
  1. serverid 是用于区别各个不同的repository,必须有一个独一无二的名称;
  2. name 是对repository 的描述,支持像$releasever $basearch这样的变量;
  3. 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 之后可以加上多个选项,如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
enabled=1
    # 决定这个配置是否可用,默认为1,可用,设置为0时该配置无效
gpgcheck=1
    # 有0和1两个值,与main中相同,即是否需要对获取的软件包进行GPG校验
exclude=gaim
    # 同main
failovermethod=priority
    # failovermethode 有两个选项roundrobin 和priority,意思分别是有多个url可供选择时,yum 选择的次序,roundrobin 是随机选择,如果连接失败则使用下一个,依次循环,priority 则根据url 的次序从第一个开始,默认是roundrobin。
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
    # mirrorlist指定一个镜像服务器的地址列表,通俗的讲,baseurl是从后面的url获取资源,而mirrorlist是将多个baseurl放在网上,从多个url中获取最快的链接来获取资源,和baseurl配置最好只开启一个
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
    # 定义用于校验的gpg密钥,就是数位签章的公钥档所在位置!

repository源配置文件还支持$releasever、$arch、$basearch等参数,用于构造URL:

1.$releasever:发行版的版本,去主版本号,即6.2取6.,31取3,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断,查看redhat-release的方法:cat /etc/redhat-release或者rpm -qi centos-release

2.$arch:cpu体系,如i686,athlon等,通过命令“arch” 或者“uname -m”查看

3.$basearch:cpu的基本体系组,例如,i686和i586机器都具有i386的基本架构,AMD64和Intel64机器具有x86_64的基本架构。通过命令“uname -p”查看。

这个地方有个怪异的事情就是,$releasever的值是redhat-release的版本好,在主配置文件中配置为“distroverpkg”,这三个从名称上看根本没有一点联系,完全违背UNIX编程规范。

遇到的问题解决

想在机器上查看php的安装情况,通过命令“yum list php”,提示镜像404:

直接curl镜像url也是不通的:

查看源配置文件可以看到镜像url的构造情况:

对应到url,即$releasever是1.2,$basearch是x86_64,于是手动查看这两个参数的值:

不过通过“rpm -qi centos-release”查看centos-release版本居然提示未安装:

与镜像URL并不一致,即$releasever获取的是错的,于是用刚才命令获取的参数组装url进行curl,成功:

即之前是错误获取了参数$releasever,于是将repo里的$releasever参数全部置换为6,问题解决:

深层次的原因,即为何$releasever获取的是1.2,而不是cat出来的6,就与centos-release未安装有关,既然提示未安装centos-release,那么就尝试安装centos-release:yum install centos-release,得到错误提示:

即,即将安装的centos-release与已经安装的tlinux-release冲突,不能安装,而tlinux-release的版本正好是1.2:

就是说$releasever读的是tlinux-release的版本号,这就是错误根因,即系统运行的是腾讯自身的系统,读取的tlinux-release就出现了错误(另外一个运行良好的系统装的是普通的centos),不过考虑到将tlinux-release删掉,重新安装centos-release可能会出现更多难以预料的问题,因此只将repo配置文件修改就停止了。

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

幸山的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据库新发现

关于shared pool的深入探讨(一)

http://www.eygle.com/internal/shared_pool-1.htm

683
来自专栏郭少华

Linux中inotify+unison实现数据双向(多向)实时同步

612
来自专栏崔庆才的专栏

HTTP基本原理

在本节我们会详细了解 HTTP 的基本原理,了解在浏览器中敲入一个 URL 到获取网页内容发生了一个怎样的过程,了解了这些内容,有助于去进一步了解爬虫的基本原理...

2778
来自专栏枕边书

一键部署进化史

前言 ---- 之前的文章说过 由 PHP 转到 Java 之后,非常不适应的一点就是代码部署过程耗时长,调试不便,虽然可以使用 debug,但有时候还是需要修...

3418
来自专栏Java后端技术

Linux系统基础知识整理

  本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅。

907
来自专栏同步博客

Git服务器搭建

  Git是目前世界使用最广泛的分布式版本控制系统,它是由林纳斯·托瓦兹(Linus Torvalds)创作,最初的目的是为了更好地管理Linux内核开发而设计...

673
来自专栏编程坑太多

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

解决方法:在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入

888
来自专栏java一日一条

单点登录原理与简单实现

web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,...

902
来自专栏散尽浮华

yum源使用的几个报错小总结

服务器上的yum突然不好使用,使用yum时有如下几个保持,解决方案如下: 1)Error: Cannot retrieve repository metadat...

2459
来自专栏龙渊阁测试精英

AutoMagic-开源自动化平台构建思路

最近在github上看到AutoMagic自动化平台开源了,一时手痒,就试着搭了一套环境,现在把思路和大家说一说。

763

扫码关注云+社区