Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装 yum相关的配置文件主要有两个: 1.etc/yum.conf配置文件 2.etc/yum.repos.d/目录下的众多.repo文件 一、简介 什么是yum.conf文件 yum.conf文件是用来存储yum配置信息的文件,虽然yum.conf文件通常都比较简洁,却是yum软件管理器的重要组成部分。 什么是repo文件? repo文件是yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用。 yum功能简介 yum是一款shell前端软件包管理工具,用其安装软件时,该工具以rpm包的包头(header)写入的依赖信息为依据,列出需要安装以满足欲装软件正常运行的所有依赖包,并在用户确认后进行自动化安装。 yum工作原理 执行yum命令时,会首先从”/etc/yum.repo.d”目录下的众多repo文件中取得软件仓库的地址并下载“元数据”,“元数据”包含注册于该软件仓库内所有软件包的包名及其所需的依赖环境等信息,yum得到这些信息后会和本地以后环境做对比,进而列出确认需要安装哪些包,并在用户确认后开始安装。 “元数据”由位于yum源服务器相关路径的repodata目录下的repomd.xml做索引。 yum工作流程 yum的基本工作流程如下: 服务器端:在服务器上面存放了所有的rpm软件包,然后以相关的功能去分析每个rpm文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内。 客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过WWW或FTP方式),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装 二、yum.conf文件 yum.conf文件位于/etc目录下 [main] #cachedir:yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum/$basearch/$releasever。 cachedir=/var/cache/yum/$basearch/$releasever #keepcache:是否保留缓存内容,0:表示安装后删除软件包,1表示安装后保留软件包 keepcache=1 #debuglevel:除错级别,0──10,默认是2 貌似只记录安装和删除记录 debuglevel=2 #logfile:存放系统更新软件的日志的目录。用户可以到/var/log/yum.log文件去查询自己在过去的日子里都做了哪些更新。 logfile=/var/log/yum.log #pkgpolicy: 包的策略。一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository中同时存 在,yum应该安装哪一个,如果是newest,则yum会安装最新的那个版本。如果是last,则yum会将服务器id以字母表排序,并选择最后的那个 服务器上的软件安装。一般都是选newest。 pkgpolicy=newest #指定一个软件包,yum会根据这个包判断你的发行版本,默认是RedHat-release,也可以是安装的任何针对自己发行版的rpm包。 distroverpkg=CentOS-release #tolerent,也有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum不会出现错误信息。默认是0。 tolerant=1 #exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用1686的包来升级。 exactarch=1 #retries,网络连接发生错误后的重试次数,如果设为0,则会无限重试。 retries=20 #此选项在进行发行版跨版本升级的时候会用到。 obsoletes=1 #gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。 gpgcheck=1 #默认都会被include 进来 也就是说 /etc/yum.repos.d/xx.repo 无论配置文件有多少个 每个里面有多少个[name] 最后其实都被整合到 一个里面看就是了 重复的[name]后面的覆盖前面的 reposdir=/etc/yy.rm #默认是 /etc/yum.repos.d/ 低下的 xx.repo后缀文件 #exclude 排除某些软件在升级名单之外,可以用通配符,列表中各个项目要用空格隔开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。 exclude=xxx #该选项用户指定 .repo 文件的绝对路径。.repo 文件包含软件仓库的信息 (作用与 /etc/yum.conf 文件中的 [repository] 片段相同)。 reposdir=[包含 .repo 文件的目录的绝对路径] 三、.repo文件 /etc/yum.repo.d/目录下有很多 .repo文件 #serverid是用于区别各个不同的repository,必须有一个独一无二的名称。若重复了,是前面覆盖后面--还是反过来呢???用enabled 测试是后面覆盖前面 [serverid] #name,是对repository的描述,支持像$releasever $basearch这样的变量; name=Fedora Core $releasever - $basearch - Released Updates name=Some name for this server #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这样的变量。 baseurl=url://path/to/repository/ #指定一个镜像服务器的地址列表,通常是开启的,本例中加了注释符号禁用了,我们可以试试,将$releasever和$basearch替换 #成自己对应的版本和架构,例如10和i386,在浏览器中打开,我们就能看到一长串镜可用的镜像服务器地址列表。 #解释下几个变量 #$releasever 发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。 #$arch cpu体系,如i686,athlon等 #$basearch cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。 # #url之后可以加上多个选项,如gpgcheck、exclude、failovermethod等,比如: #gpgcheck=1 #exclude=gaim #其中gpgcheck,exclude的含义和[main]部分相同,但只对此服务器起作用 #mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch #failovermethode 有两个选项roundrobin和priority,意思分别是有多个url可供选择时,yum选择的次序,roundrobin是随机选择,如果连接失 败则使用下一个,依次循环,priority则根据url的次序从第一个开始。如果不指明,默认是roundrobin。 failovermethod=priority #当某个软件仓库被配置成 enabled=0 时,yum 在安装或升级软件包时不会将该仓库做为软件包提供源。使用这个选项,可以启用或禁用软件仓库。 #通过 yum 的 --enablerepo=[repo_name] 和 --disablerepo=[repo_name] 选项,或者通过 PackageKit 的"添加/删除软件"工具,也能够方便地启用和禁用指定的软件仓库 enabled=[1 or 0] There are unfinished transactions remaining解决方法 今天在服务器用yum安装东西的时候,老是报:There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.意思是:有未完成的yum事务,建议先运行yum-complete-transaction命令清除.问了下开发,原来有强制结束yum过,好吧,对于我这样有点轻微强迫症的人来说,不允许服务器出现这些信息的. 解决办法: 代码如下: # 安装 yum-complete-transaction(这是一个能发现未完成或被中断的yum事务的程序) yum -y install yum-utils # 清除yum缓存 yum clean all # 运行 yum-complete-transaction,清理未完成事务 yum-complete-transaction --cleanup-only ps: yum会把下载的软件包和header存储在cache中,而不会自动删除.可用yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all全清. 生成yum源的几种方法 https://blog.51cto.com/qiuyue/1911297 https://blog.csdn.net/lpl_lpl_lpl/article/details/85621740 CentOS下yum命令详解 Yum: 即Yellowdog Update Modifier,是一种基于rpm的包管理工具 yum命令使用示例 使用yum-config-manager工具建立新配置文件 # yum-config-manager --add-repo http://content.example.com/rhel7.0/x86_64/dvd 显示yum仓库 显示所有仓库 yum repolist all 显示可用的仓库 yun repolist enabled 显示不可用的仓库 yum repolist disabled 显示应用程序包 显示所有的程序包 yum list 或 yum list all [vathe@localhost ~]# yum list tre? Installed Packages tree.x86_64 1.6.0-10.el7 @base 还支持通配符格式的查询 显示可安装的程序包 yum list available [vathe@localhost ~]# yum list available php Available Packages php.x86_64 5.4.16-42.el7 base 显示可更新或已安装的程序包 yum list updates yum list installed 显示仓库中最近增加的程序包 yum list recent 安装程序包 #安装 tree 程序 yum install tree 升级程序包 yum update tree 卸载程序包 yum remove tree 或 yum erase tree 查看程序包信息 yum info tree 查看文件的来源 查看某一文件来自于那个程序包 [vathe@localhost ~]$yum provides /bin/mv coreutils-8.22-18.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts Repo : base Matched from: Filename : /bin/mv #表示/bin/mv文件来自于coreutils-8.22-18.el7.x86_64程序包 清理本地缓存 yum clean all #清楚插件缓存 yum clean plugins 构建缓存 yum makecache 搜索 [vathe@localhost ~]$yum search php ============================================== N/S matched: php =============================================== graphviz-php.x86_64 : PHP extension for graphviz php.x86_64 : PHP scripting language for creating dynamic web sites php-bcmath.x86_64 : A module for PHP applications for using the bcmath library ... 查看指定包所依赖的capabilities [vathe@localhost ~]$yum deplist php package: php.x86_64 5.4.16-42.el7 dependency: httpd provider: httpd.x86_64 2.4.6-45.el7.centos ... 查看yum事务历史 [root@localhost ~]# yum history Repository 'base' is missing name in configuration, using id ID | Login user | Date and time | Action(s) | Altered ------------------------------------------------------------------------------- 2 | Vathe Su | 2017-04-17 17:07 | Install | 1 1 | System | 2017-03-23 22:19 | Install | 1405 history list 包组相关的命令 yum groupinstall # 安装包组 yum groupupdate #更新包组 yum grouplist #显示包组 yum groupremove #移除包组 yum groupinfo #查看包组信息 这些命令和上面的命令用法类似,只是针对于包组而言