精通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 条评论
登录 后参与评论

相关文章

来自专栏佳爷的后花媛

搭建 LNMP + CodeIgniter 开发环境

搭建 LNMP + CodeIgniter 开发环境 搭建 LNMP 环境 首先搭建 LNMP 的服务器环境 安装 Nginx, MySQL 和 PHP ...

623
来自专栏Laoqi's Linux运维专列

Mysql常用基础指令

一、设置更改mysql的root密码 1.1 初次使用mysql的密码为空 /usr/local/mysql/bin/mysql -uroot 但是这样极度的不...

3385
来自专栏我是攻城师

ElasticSearch的一些删除用法笔记

3407
来自专栏北京马哥教育

5 分钟上手 Tmux

如果你在做的项目需要你打开多个终端,那 Tmux(还有它的好基友 Tmuxinator)将会大大提高你的效率!Tmux 允许你在一个终端运行多个会话,Tmuxi...

3495
来自专栏有趣的Python

18 -Flask构建弹幕微电影网站- 部署上线

Centos7(博主使用的是ubuntu) 数据库: mysql 编程语言: python3.6 队列缓存: redis web反向代理: nginx 依赖环境...

35412
来自专栏Web项目聚集地

Linux养成计划(五)

非必需时尽量少用root用户登陆,因为它是系统的超级管理员,这里的系统管理员root和Windows中的administrator还不一样,Linux中的roo...

911
来自专栏linux系统运维

mysql用户管理,常用sql语句,mysql数据库备份恢复

1617
来自专栏玄魂工作室

Kali Linux系列教程之OpenVas安装

Kali Linux系列教程之OpenVas安装 前言 1、 服务器层组件 2、客户层组件 安装过程 Initial setup 初始管理员密码 从浏览器访问后...

3397
来自专栏大前端开发

使用mpvue开发小程序教程(二)

在上一篇文章中,我们介绍了使用mpvue开发小程序所需要的一些开发环境的搭建,并创建了第一个mpvue小程序代码骨架并将其运行起来。在本文中,我们来研究熟悉一下...

822
来自专栏zhangdd.com

redis官方集群安装升级ruby2.2.7版本

配置redis官方集群,开始使用yum 默认安装ruby到gem install  redis时报错,提示需要ruby>2.2.0

762

扫码关注云+社区