rpm软件程序包存在的问题:依赖关系


依赖关系解决方法:

程序包管理器的前端工具:yum (Yellowdog Update Modifier)

yum是rpm的补充,为了提升用户体验的工具。

yum的核心功能:自动解决依赖关系:X --> Y --> Z


文件服务器(共享rpm包):通过yum所支持的文件共享机制将各rpm包通过文件服务共享

该服务器是一个repository: yum仓库

组成部分:

1、各rpm包; 

2、依赖关系、程序包安装后所能够生成文件列表等元数据文件; 


ftp, http, nfs, file


yum客户端:

1、配置文件:指定各可用的yum仓库;

2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地; 

3、分析元数据:根据具体操作请求完成元数据分析, 可能包括检查依赖关系、文件列表等信息;

4、执行具体操作:


客户端配置文件指定对应服务器访问方式:

ftp   ftp://server/path/to/repo

http  http://server/path/to/repo

nfs   nfs://server/nfs_path

file  file:///path/to/repository


yum [options] COMMAND

  COMMAND命令有如下这些:

check          Check for problems in the rpmdb

check-update   Check for available package updates

clean          Remove cached data

deplist        List a package's dependencies

distribution-synchronization Synchronize installed packages to the latest available versions

downgrade      downgrade a package

erase          Remove a package or packages from your system

groupinfo      Display details about a package group

groupinstall   Install the packages in a group on your system

grouplist      List available package groups

groupremove    Remove the packages in a group from your system

help           Display a helpful usage message

history        Display, or use, the transaction history

info           Display details about a package or group of packages

install        Install a package or packages on your system

list           List a package or groups of packages

load-transaction load a saved transaction from filename

makecache      Generate the metadata cache

provides       Find what package provides the given value

reinstall      reinstall a package

repolist       显示当前yum可以使用的仓库

resolvedep     Determine which package provides the given dependency

search         Search package details for the given string

shell          Run an interactive yum shell

update         Update a package or packages on your system

update-minimal Works like update, but goes to the 'newest' package match which fixes a problem that affects your system

updateinfo     Acts on repository update information

upgrade        Update packages taking obsoletes into account

version        Display a version for the machine and/or available repos.



要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中:

/etc/yum.conf   这里存放的是yum的核心配置

/etc/yum.repos.d/*.repo   仓库的配置文件,yum.repos.d目录下所有以repo结尾的都是yum仓库配置文件


配置文件格式:由两段组成,类似windows的ini配置文件

[main] :主配置段,在/etc/yum.conf中

[root@xuanxuan rpm]# cat /etc/yum.conf    

[main]

cachedir=/var/cache/yum/$basearch/$releasever  yum仓库的元数据信息

后面几个是yum可用的宏

keepcache=0    是否存rpm包缓存

debuglevel=2

logfile=/var/log/yum.log   安装日志文件

exactarch=1   要与本机arch精确匹配

obsoletes=1   

gpgcheck=1   是否检查来源合法性和完整性,gpg是检查用的

plugins=1   是否使用插件

installonly_limit=5

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum

distroverpkg=centos-release

[repo] :仓库配置段,在/etc/yum.repos.d/目录的.repo文件里

配置repo:

[repo_ID]

name=String

baseurl=仓库的访问路径

enabled={1|0}   不指定的话默认启用

gpgcheck={1|0}

gpgkey=公钥文件(可以在本地,也可是服务器端路径) 如gpgcheck是1的话

cost=定义此仓库开销,默认为1000


要查看本机内核的版本可以使用  uname -a 指令,然后再根据这个去选择使用哪些yum源

如i386是指intel的32位的cpu处理器的


配置yum源仓库信息

[base]  这个名字可以任意,指明这是一个仓库

name=CentOS 6.5 X86_64 relase 

baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/

enabled=1

gpgcheck=1

gpgkey=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/RPM-GPG-KEY-CentOS-6

仓库的元数据信息都存在这里

[root@xuanxuan base]# pwd

/var/cache/yum/i386/6/base

yum clean all  可以清空所有的元数据信息

yum在运行时,会先在/var/cache/yum/$basearch/$releasever里存入新仓库的元数据,在使用yum进行安装时,则会对应的找元数据查找下载安装



yum的各命令:

repolist [all|enabled|disabled]: 列出所有可用yum仓库


clean [all|packages|metadata|expire-cache|rpmdb|plugins]: 清理所有的元数据(/var/cache/yum..)

     全部   包       元数据 


list [all|installed|available]: 列出rpm包

  all:可用和已安装的都显示,仓库中的包,一般在安装rpm之前会使用其查找


info package_name: 列出包的描述信息

分为几个类别  available package  如果未安装则显示这个

 installed package  安装好之后显示这个


grouplist: 列出所有包组

列出了仓库中的包组,也就是把所有的rpm分成组显示出来,每个组里有很多rpm

一般在安装整个包组时需要查询时用到


groupinfo "package_group_name":显示包组信息

包组的意思:里面有很多的rpm,共同组成了一个包

三个跟开发相关的包组:

Desktop Platform Development:有图形程序时需安装此组;

Server Platform Development:服务器平台使用的组

Development Tools:基本的工具组


install package_name ...(可以一次装多个): 安装指定的程序包


reinstall package_name ...: 重新安装指定的程序包


check-update: 检查可升级的包


update package_name ...: 升级指定的程序包


现在的版本:x-1.2.1, x-1.2.2, x-1.2.3

要升级到指定版本:yum update x-1.2.2


downgrade package_name:降级


erase|remove  package_name ...:

依赖于该卸载掉的包也会被卸载


whatprovides|provides /path/to/somefile: 查询某文件是由哪个包安装生成的 

这个和rpm -qf ..是近似的功能

[root@xuanxuan base]# which useradd

/usr/sbin/useradd

[root@xuanxuan base]# rpm -qf /usr/sbin/useradd

shadow-utils-4.1.4.2-13.el6.i686


groupinstall "group_name":安装指定的包组


groupremove "group_name": 卸载指定的包组


[root@xuanxuan base]# yum history

使用这个去看操作的yum有哪些


安装本地包:

yum install /path/to/package_file

手动禁止检查来源及完整性:--nogpgcheck

yum install /tmp/zsh-2.3.1-2.el6.x86_64.rpm --nogpgcheck



提示:如果系统为CentOS 5,常用的开发包组为“Development Tools”和“Development Libraries”

           CentOS 6,常用的开发包组为“Development Tools”和“Server Platform Development”


练习:安装相关的包组,确保如下命令可执行 

# gcc --version

gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)

Copyright (C) 2010 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


yum配置文件中可用常用的四个宏:

例子:

[root@xuanxuan rpm]# cat /etc/yum.conf    

[main]

cachedir=/var/cache/yum/$basearch/$releasever 

说明:

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

$arch: 系统架构

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

$YUM0-9: 在系统中定义的环境变量,可以在yum中使用;

yum可以识别系统的各种结构并赋值,也就是以上的这些变量,在读配置文件时,替换使用


获取当前系统相应宏替换结果的办法:

# python

Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) 

[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import yum,pprint

>>> yb = yum.YumBase()

>>> pprint.pprint(yb.conf.yumvar,width=1)

Loaded plugins: fastestmirror, refresh-packagekit

{'arch': 'ia32e',

'basearch': 'x86_64',

'releasever': '6',

'uuid': 'ea249181-2f82-4c40-8c42-d51b3fce319a'}

>>> quit()


[fedora-epel]

name=Fedora Community EPEL

baseurl=http://172.16.0.1/fedora-epel/6/x86_64/

enabled=1

gpgcheck=0


[fedora-epel]

name=Fedora Community EPEL

baseurl=http://172.16.0.1/fedora-epel/$releasever/$basharch/

enabled=1

gpgcheck=0


总结:yum客户端是依赖于 yum repository 工作的

yum: /etc/yum.conf, /etc/yum.repos.d/*.repo 这些配置文件指明yum的基本属性以及仓库的属性



自建yum仓库:

yum repository: 文件服务器

yum仓库的元数据存在/var/cache/yum/i386/6/...中,在base这个仓库中又有配置文件

repodata这一层是元数据层,仓库找到这一层即可

yum是找的repodata的元数据,实际包时,找的是同一层的packages

repodata/:

repomd.xml: 


测试实现yum repository的配置:

1、准备文件服务器;使用httpd为例,请事先确保已经安装httpd程序包;

2、在/var/www/html目录,使用一个目录来保存准备制作成为yum仓库的所有rpm包;

# cd /var/www/html

在该下建立一个目录,如openstack,把rpm包都放入该目录下

# bye

3、创建yum仓库

# rm -rf /var/www/html/openstack/repodata

# createrepo /var/www/html/openstack   对openstack下的rpm创建元数据

4、启动httpd服务

# service httpd start

对外可以通过ip地址和路径访问

5、配置使用自建的yum仓库

[openstack]

name=Openstack Repository

baseurl=http://ip地址/openstack/

enabled=1

gpgcheck=0

6、配置好epel的yum源

7、测试使用

# yum install openstack-keystone


如果是本地的镜像,可以使用file协议作为访问协议,访问本地的yum源,如file:///media/..

这里的baseurl可以是file:///...找本地的repodata做为元数据访问