前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >精通yum配置以及问题解决

精通yum配置以及问题解决

原创
作者头像
幸山
修改2017-06-19 19:10:40
2.9K0
修改2017-06-19 19:10:40
举报
文章被收录于专栏:幸山的专栏幸山的专栏

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

yum简介

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

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

代码语言:javascript
复制
yum [options] [command] [package ...]

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

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

代码语言:javascript
复制
# 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可以查看配置文件:

代码语言:javascript
复制
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源配置文件的一般格式如下:

代码语言:javascript
复制
[serverid]
name=Some name for this server
baseurl=url://path/to/repository/
  1. serverid 是用于区别各个不同的repository,必须有一个独一无二的名称;
  2. name 是对repository 的描述,支持像$releasever $basearch这样的变量;
  3. baseurl 是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。它的格式是:
代码语言:javascript
复制
baseurl=url://server1/path/to/repository/
     url://server2/path/to/repository/
     url://server3/path/to/repository/

其中url 支持的协议有 http:// ftp:// file:// 三种。baseurl 后可以跟多个url,你可以自己改为速度比较快的镜像站,但baseurl 只能有一个,也就是说不能像如下格式:

代码语言:javascript
复制
baseurl=url://server1/path/to/repository/
baseurl=url://server2/path/to/repository/
baseurl=url://server3/path/to/repository/

url 之后可以加上多个选项,如gpgcheck、exclude、failovermethod 等,比如:

代码语言:javascript
复制
[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配置文件修改就停止了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • yum简介
  • yum的配置文件
  • main主配置文件
  • repository源配置文件
  • 遇到的问题解决
相关产品与服务
TencentOS Server
TencentOS Server 是腾讯云推出的 Linux 操作系统,它旨在为云上运行的应用程序提供稳定、安全和高性能的执行环境。它可以运行在腾讯云 CVM 全规格实例上,包括黑石物理服务器2.0。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com