作者介绍:幸山,腾讯云助理工程师,目前就职于腾讯,负责腾讯云内容分发网络和动态加速网络的测试工作,全心全意为开发者提供最优质的网络加速服务。
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的配置文件分为两部分,main主配置文件和repository源配置文件:
main主配置文件:yum.conf
,通常在路径/etc/
下,定义了yum的全局配置,应该只有一个主配置文件。
repository源配置文件:xxx.repo
,通常在路径/etc/yum.repos.d/
下,定义了源/服务器的地址,顾名思义,就是安装包获取的源路径,可以包含多个,必须是.repo文件后缀,名称可以自定义,yum安装/更新时,根据主配置文件决定获取哪个包来安装。
打开/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源配置文件定义了软件仓库,yum 安装更新的软件包都是从配置的软件仓库获取的,在目录/etc/yum.repos.d下.repo后缀文件均是可用配置。
repository源配置文件的一般格式如下:
[serverid]
name=Some name for this server
baseurl=url://path/to/repository/
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配置文件修改就停止了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。