Linux系统之前端程序包管理器-yum

【前言】

当我们使用rpm命令安装程序时,时常会因为程序包之间的依赖关系而焦头烂额,使得很多程序的安装过程复杂而费力,那有没有一种工具可以帮我们解决这个问题呢?当然有啦!这就是我们今天的重点yum,让我们一块来学习总结下吧!

【什么是yum】

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

【yum的工作机制】

yum 的关键之处是要有可靠的yum仓库(yum repository),它可以是http 或ftp 站点,也可以是本地软件池,其必须包含两类数据:

1、数据:也就是各个rpm包;

2、元数据:其包含了rpm 包的各种信息,包括包名、描述,功能,提供的文件,依赖关系、包分组信息等。正是通过收集汇总这些元数据 并加以分析,才能自动化地完成余下的任务。在各版本系统下其的存储格式为:centos5: *.xml; centos6,7: *.sqlite

其实从架构的角度来看,yum的工作机制为C/S架构,如下图所示:

【yum的使用机制】

1、确保有yum repo(yum仓库的配置文件)可用;rpm包的文件服务器,repodata目录所在父目录就是一个可用仓库。

2、yum客户端需要指供repo配置文件,指明yum仓库访问路径及各种属性信息。有两种配置方法:

法一:修改主配置文件(中心配置文件):/etc/yum.conf;

法二:在/etc/yum.repos.d/下创建或修改*.repo文件(存储一个或几个相关仓库的配置信息)。

在.repo文件定义一个yum repo指向的格式:

[REPOID]  #定义软件源的名称,该名称是可以自定义,同时在该服务器上所有repo文件中是唯一的。注意[]中不能有空格;

name=Some name for this repository   #定义软件仓库的名称,支持像$releasever 、$basearch这样的变量;注意=两边不能有空格;

baseurl=url://server/path/to/repository   #指定真正的仓库所在地,可以给定多个,下面的URL不能顶格书写,URL中也支持$releasever 、$basearch这样的变量;

http://mirrors.sohu.com/centos/$releasever/os/$basearch

enabled={0|1}   #配置此仓库是否启用,默认为1生效;

gpgcheck={0|1}  #配置是否验证安装包,0为不进行验证,1为进行验证;

gpgkey=URL  #指定用于验证的秘钥文件

cost={1..n}   #默认为1000,指定访问此仓库的开销(在客户端指定)

补充说明:

            1、$basearch: 系统基本架构,如i686,i586等的基本架构为i386;

$releasever: 程序的版本,对yum而言指的是redhat-release版本;只替换为主版本号,如RedHat 6.5,则替换为6;

2 、baseurl种url支持的协议有:http://、ftp://、nfs://、file://、 rsync://;当需要指定多个URL且不想通过baseurl来指定时,                   我们可以把多个URL存放在一个文件里,通过mirrorlist=存放URL的文件来指定yum仓库。

3、一个.repo文件可以定义多个yum仓库。

[[email protected] yum.repos.d]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo  CentOS-Vault.repo
[[email protected] mnt]# cat /etc/yum.repos.d/CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[[email protected] yum.repos.d]#

【yum客户端命令的使用】

1、列出所有可用repo

yum repolist {enabled|disabled|all}   enabled:可用的;disabled:不可用的;all:所有的 ,不带参数默认为列出可用的

[[email protected] yum.repos.d]# yum repolist enabled
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
repo id                  repo name              status
c6-cd                   CentOS-6 - cd           4,802
repolist: 4,802
[[email protected] yum.repos.d]# yum repolist disabled
Loaded plugins: fastestmirror, refresh-packagekit, security
repo id                   repo name                                             
c6-media                  CentOS-6 - Media                                      
repolist: 0
[[email protected] yum.repos.d]# yum repolist all
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
repo id                repo name                   status
c6-cd                  CentOS-6 - cd               enabled: 4,802
c6-media               CentOS-6 - Media            disabled
repolist: 4,802
[[email protected] yum.repos.d]#

2、列出rpm包

yum list {all|installed|available}   all:所有的;installed: 已安装的;available:可以安装的;默认为列出所有的

yum list KEYWORD*  支持使用文件名通配,来获取含有关键字的rpm包

[[email protected] yum.repos.d]# yum list http*  #列出所有以http开头的rpm包
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Installed Packages  #下面为已经安装的包
httpd-tools.i686      2.2.15-29.el6.centos    @anaconda-CentOS-201311271240.i386/6.5
Available Packages  #下面为可以安装的包
httpd.i686            2.2.15-29.el6.centos    c6-cd                                 
httpd-devel.i686      2.2.15-29.el6.centos    c6-cd                                 
httpd-manual.noarch   2.2.15-29.el6.centos    c6-cd

3、列出包的描述信息(无论包有没有安装都可以列出)

yum info package_name

[[email protected] yum.repos.d]# yum info httpd #列出http包的描述信息
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Available Packages
Name        : httpd
Arch        : i686
Version     : 2.2.15
Release     : 29.el6.centos
Size        : 828 k
Repo        : c6-cd
Summary     : Apache HTTP Server
URL         : http://httpd.apache.org/
License     : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
            : web server.

 4、列出所有的包组信息

yum grouplist

[[email protected] yum.repos.d]# yum grouplist
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Group Process
Loading mirror speeds from cached hostfile
c6-cd/group_gz                                                         | 212 kB     00:00 ... 
Installed Groups: #已安装的包组
   Additional Development
   Base
   ... 
Installed Language Groups:   #已安装的语言包组
   Arabic Support [ar]
   ... 
Available Groups: #可安装的包组
   Backup Client
   ... 
Available Language Groups: #可安装的语言包组
   Afrikaans Support [af]
   ... 
Done

 5、显示包组的信息:列出组中包含的程序包列表(如果包组名中含有空格必须用“”引起来)

yum groupinfo "GROUP NAME"

[[email protected] yum.repos.d]# yum groupinfo "Development Tools" #显示开发工具包组的信息
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Group Process
Loading mirror speeds from cached hostfile
Group: Development tools
 Description: A basic development environment.
 Mandatory Packages:
   autoconf
   ...
 Default Packages:
   byacc
   ...
 Optional Packages:
   ElectricFence
   ...

CentOS6 跟开发相关的包组有: Development Tools、Server Platform Development、 Desktop Platform Development

 6、清理缓存

yum clean {all|packages|metadata|expire-cache|rpmdb|plugins}

yum clean all 清除缓存目录(/var/cache/yum)下的软件包以及旧的元数据

[[email protected] yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, refresh-packagekit, security
Cleaning repos: c6-cd
Cleaning up Everything
Cleaning up list of fastest mirrors

  7、安装程序包

yum install package_name {-y}    -y:自动回答为yes,执行过程中无需等待用户再次输入

[[email protected] yum.repos.d]# yum install httpd
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
c6-cd                                                                  | 4.0 kB     00:00 ... 
c6-cd/primary_db                                                       | 3.4 MB     00:00 ... 
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.i686 0:2.2.15-29.el6.centos will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=================================================================================
 Package           Arch       Version                Repository        Size
=================================================================================
Installing:
 httpd             i686     2.2.15-29.el6.centos     c6-cd             828 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 828 k
Installed size: 2.8 M
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
** Found 1 pre-existing rpmdb problem(s), ‘yum check‘ output follows:
gnome-user-share-2.28.2-3.el6.i686 has missing requires of httpd >= (‘0‘, ‘2.2.0‘, None)
  Installing : httpd-2.2.15-29.el6.centos.i686                                            1/1 
  Verifying  : httpd-2.2.15-29.el6.centos.i686                                            1/1 

Installed:
  httpd.i686 0:2.2.15-29.el6.centos                                                           
Complete!

重新安装:

yum reinstall package_name

    8、升级

yum check-update: 检查可用的升级包

yum update package_name  升级,当不指定版本时,默认升级到最新版本

yum downgrade package_name 降价到指定版本

    9、卸载(卸载时为解决该包安装的依赖关系而安装的包也会一同卸载)

yum remove|erase package_name {-y}    -y:自动回答为yes,执行过程中无需等待用户再次输入

 10、查询某文件是由哪个包安装生成的

yum whatprovides|provides /path/to/somefile

[[email protected] yum.repos.d]# yum provides /usr/bin/zip #查询出zip文件是由那个包安装生成;
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
zip-3.0-1.el6.i686 : A file compression and packaging utility compatible with PKZIP
Repo        : c6-cd
Matched from:
Filename    : /usr/bin/zip
zip-3.0-1.el6.i686 : A file compression and packaging utility compatible with PKZIP
Repo        : installed
Matched from:
Other       : Provides-match: /usr/bin/zip

 11、安装包组

yum groupinstall "GROUP NAME"

 12、卸载包组

yum groupremove "GROUP NAME"

 【自建yum仓库】

        下面通过自建一个http服务器的yum仓库为例说明:

           第一步:安装httpd程序并启动服务;

yum -y install httpd

service httpd start

chkconfig httpd on

[[email protected] yum.repos.d]# yum -y install httpd
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.i686 0:2.2.15-29.el6.centos will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch        Version              Repository         Size
================================================================================
Installing:
 httpd           i686      2.2.15-29.el6.centos    c6-cd             828 k

Transaction Summary
================================================================================
Install       1 Package(s)
Total download size: 828 k
Installed size: 2.8 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : httpd-2.2.15-29.el6.centos.i686                                            1/1 
  Verifying  : httpd-2.2.15-29.el6.centos.i686                                            1/1 
Installed:
  httpd.i686 0:2.2.15-29.el6.centos                                                           
Complete!
[[email protected] yum.repos.d]# service httpd start
Starting httpd:                                            [  OK  ]
[[email protected] yum.repos.d]# chkconfig httpd on
[[email protected] yum.repos.d]# chkconfig |grep httpd 
httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off

           第二步:创建子目录,存放某相关的所有rpm包,httpd的文档根目录为/var/www/html;为仓库生成元数据文件(使用createrepo),以使能够作为仓库使用。

[[email protected] html]# cd /var/www/html 
[[email protected] html]# mkdir test  #创建test目录用来测试;
[[email protected] html]# cp /mnt/cd/Packages/zsh-4.3.10-7.el6.i686.rpm  ./test #复制zsh这个安装包到test目录;
[[email protected] Packages]# yum install createrepo #安装createrepo,如提前已安装则不用再装;
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package createrepo.noarch 0:0.9.9-18.el6 will be installed
--> Processing Dependency: python-deltarpm for package: createrepo-0.9.9-18.el6.noarch
--> Running transaction check
---> Package python-deltarpm.i686 0:3.5-0.5.20090913git.el6 will be installed
--> Processing Dependency: deltarpm = 3.5-0.5.20090913git.el6 for package: python-deltarpm-3.5-0.5.20090913git.el6.i686
--> Running transaction check
---> Package deltarpm.i686 0:3.5-0.5.20090913git.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================
 Package        Arch   Version               Repository          Size
======================================================================
Installing:
 createrepo    noarch  0.9.9-18.el6             c6-cd             94 k
Installing for dependencies:
 deltarpm      i686    3.5-0.5.20090913git.el6  c6-cd             73 k
 python-deltarpm  i686 3.5-0.5.20090913git.el6  c6-cd             27 k
Transaction Summary
==========================================================================
Install       3 Package(s)

Total download size: 195 k
Installed size: 522 k
Is this ok [y/N]: y
Downloading Packages:
-----------------------------------------------------------------------------------------
Total                                                                                                                                  3.3 MB/s | 195 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : deltarpm-3.5-0.5.20090913git.el6.i686                                                                                                               1/3 
  Installing : python-deltarpm-3.5-0.5.20090913git.el6.i686                                                                                                        2/3 
  Installing : createrepo-0.9.9-18.el6.noarch                                                                                                                      3/3 
  Verifying  : createrepo-0.9.9-18.el6.noarch                                                                                                                      1/3 
  Verifying  : python-deltarpm-3.5-0.5.20090913git.el6.i686                                                                                                        2/3 
  Verifying  : deltarpm-3.5-0.5.20090913git.el6.i686                                                                                                               3/3 
Installed:
  createrepo.noarch 0:0.9.9-18.el6                                                       
Dependency Installed:
  deltarpm.i686 0:3.5-0.5.20090913git.el6                                        
  python-deltarpm.i686 0:3.5-0.5.20090913git.el6                                       
Complete! #createrepo安装完成
[[email protected] Packages]# createrepo /var/www/html/test/ #创建元数据文件;
Spawning worker 0 with 1 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[[email protected] Packages]# ls /var/www/html/test/ 
repodata  zsh-4.3.10-7.el6.i686.rpm   #repodata即为刚刚创建出来存放元数据文件的目录;
[[email protected] test]# ls /var/www/html/test/repodata/  #查看repodata下的元数据文件;
105b962a2624ebddd589ec03c1e4fdcd7a3511ea1e47fd80eeda364b41d48cdd-primary.sqlite.bz2
7762e79a7341d1b6a929e893fd732302dd27499742abf4549130601465760426-filelists.xml.gz
78f72a947bd046641a5ea0574872212cfe829f1525ff74f1d13f4da3c4d73cde-filelists.sqlite.bz2
7e8d7b7938dbd28a823ebe27420f3c2d088f9a1933f37319e925295e24417009-other.sqlite.bz2
885867e505b55bc3f09fb4eec3bc7cf8a5352cce29c307e7b37afaa38e3d33cc-primary.xml.gz
e0eb2191ed5de3b3975bbb005a00e07a044d5724b87373d4a6cdf399ff99bf3f-other.xml.gz 
#通过以上几步一个简单的yum仓库就搭建好了!

      

     第三步:配置yum客户端使用此仓库即可;

[[email protected] yum.repos.d]# vim test.repo #编辑指向yum库的repo文件
[c6-test]
name=CentOS-$releasever - test
baseurl=file:///var/www/html/test
gpgcheck=0  #此处只为实验,没有复制密钥,到yum库中,所以不启用校验;
enabled=1  #启用
[[email protected] yum.repos.d]# yum clean all #清除缓存;
Loaded plugins: fastestmirror, refresh-packagekit, security
Cleaning repos: c6-test
Cleaning up Everything
Cleaning up list of fastest mirrors
[[email protected] yum.repos.d]# yum repolist #显示可用的repo;
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
c6-test                     | 2.9 kB     00:00 ... 
c6-test/primary_db          | 3.2 kB     00:00 ... 
repo id       repo name                status
c6-test       CentOS-6 - test           1
repolist: 1
[[email protected] yum.repos.d]# yum -y install zsh #安装zsh;
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package zsh.i686 0:4.3.10-7.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================
 Package         Arch        Version          Repository       Size
==========================================================================
Installing:
 zsh              i686       4.3.10-7.el6       c6-test        2.1 M

Transaction Summary
==========================================================================
Install       1 Package(s)

Total download size: 2.1 M
Installed size: 4.6 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : zsh-4.3.10-7.el6.i686                                                                                     1/1 
  Verifying  : zsh-4.3.10-7.el6.i686                                                                                     1/1 
Installed:
  zsh.i686 0:4.3.10-7.el6                                                                                                  
Complete!
#安装成功!实验完成!

好啦!可能描写的比较啰嗦,如有总结说明不妥的地方,还请各位见谅!谢谢!

时间: 2024-10-01 12:14:56

Linux系统之前端程序包管理器-yum的相关文章

Linux系统管理-(8)-RPM程序包管理器

Centos下RPM程序包管理器:     安装:     rpm {-i|--install} [install-options] PACKAGE_FILE ...            -v: 显示过程            -vv:  显示更详细的过程            -h: 以#显示程序包管理执行进度:每个#表示2%的进度          其他选项: --test 测试安装 --nodeps:忽略依赖关系:                    --replacepkgs: 重新

YUM前端程序包管理器

一.概述: 1.常见程序包前端管理器: yum:Yellow dog Updater, Modified简写,由Duke University团队,修改Yellow Dog Linux的Yellow Dog Updater开发而成,是一个基于 RPM 包管理的字符前端软件包管理器. apt:Advanced Packaging Tools简写,是Debian及其衍生发行版,基于dpkg包管理器的前端工具. 2.yum特点: 1).可自动解决程序安装或卸载时的依赖性关系问题: 2).可以同时配置多

以rpm为后端及以yum为前端工具的程序包管理器在Linux发行版系统centos中的使用

程序包管理: 应用程序的安装,实际上是解压缩并复制程序包中的文件到指定目录的过程: 程序包管理器: 方便终端用户进行程序的安装.卸载.升级.安装信息查询及校验等工作: 不同的Linux的发行版本中,有不同的程序包管理器: Debian:dpt:Redhat:rpm:S.u.S.E:rpm:Gentoo:借鉴了FREEBSD的portage程序包管理机制,ports方式,emerge工具:ArchLinux:pacman 以CentOS为例,rpm程序包管理器: rpm程序包的命名规则: 源代码包

linux程序包管理之rpm程序包管理器与yum前端工具

这里主要讲以CentOS为例,rpm程序包管理器的相关内容: CentOS的程序包管理器:   1) 程序包的命名规则:        源代码包:            software_name-VERSION.tar.gz            VERSION:major.minor.release                major:主版本号,通常代表重大功能改进的版本分支:                minor:次版本号,通常代表在某个版本的分支中的某个功能发生变化:     

程序包管理的前端工具yum、程序包管理器编译安装、sed命令

下面介绍的是程序包管理的前端工具yum.程序包管理器编译安装.sed命令. 一.Linux程序包管理:程序包管理的[前端工具] 1.yum软件包仓库简介 CentOS系的管理工具有yum和dnf.yum是一款发行版的Linux,其使用的默认程序包管理工具为rpm. URL是yum定位软件包仓库和仓库中程序文件的主要标识方式,表示如下: 例如:schema://[[email protected]]hostname/PATH/TO/DOCUMENT[paramers][methord] (例子中的

CentOS系统之程序包管理器-RPM

在早期我们使用源代码的方式来安装软件时,都需要先把源程序代码编译成可执行的二进制安装程序,然后进行安装.这就意味着每次安装软件都需要经过预处理-->编译-->汇编-->链接-->生成安装文件--> 安装,这个复杂而艰辛的过程.为简化安装步骤,便于广大用户的安装部署程序,程序提供商就在特定的系统上面编译好相关程序的安装文件并进行打包,提供给大家下载,我们只需要根据自己的系统去下载相应的安装包进行安装即可,其类似 Windows 的安装方式,由程序开发者直接在已知的系统上面编译好

【我的Linux,我做主!】rpm包管理器/yum前端工具/编译安装从入门到精通

Linux软件包管理之--rpm网络操作系统都是架构在底层硬件之上的,目前内核有Linux系列,UNIX系类,Windows系列等,再向上是程序库调用,程序的实现方式在不同的操作系统中实现的方式也不尽相同.操作系统向外输出供用户使用的接口称之为API(Application Programming Interface),向用户输出统一的调用接口,这样当一个文件使用调用接口后就可以在不同的操作系统中按照统一的格式输入输出了.(如下图)ABI(Application Binary Interface

linux之程序包管理器(rpm)

linux下的程序包可支持多种工具编写的,如C.C++.PERL等. 但是这种高级语言编写出来的代码是我们人能看懂的,但是计算机是看不懂的,那么计算机怎么执行,怎么了解人要它做什么呢? 这就需要我们做一些转换了,把人能读懂的语言让机器也能识别,这个过程就是由编译器完成的,通常是吧代码语言转换成二进制语言. 过程:预处理.编译.汇编.链接 一个程序的运行大部分时间是离不开库的. 什么是库呢?库也是一种程序,只不过与其他程序不同,库没有执行入口,不能独立运行,只能被其他独立运行的程序调用的时候才能执

Linux的程序包管理器(上)——rpm详解

在使用Linux操作系统的过程中,我们需要的一些服务(例如Nginx)并没有提供,需要用户自行安装相应的程序包,才能使用相应的服务.本文以CentOS6.6为例,分三小节为读者朋友们尽可能详细的讲解rpm.yum以及程序包的编译安装三种程序包的管理方法. rpm rpm包管理工具是Red Hat公司贡献的一款rpm程序包管理器,在RHEL.CentOS.Fedora.SUSE等主流发行版本中,被广泛使用. rpm包管理工具可用于安装,升级,卸载,重新安装程序:也可以用于查询当前系统上安装了哪些程