rpm包管理命令:YUM

借助于YUM软件仓库,可以完成安装、卸载、自动升级rpm软件包等任务,能够自动查找并解决rpm包之间的依赖关系,而无需管理员逐个、手工地去安装每一个rpm包,使管理员在维度护在量linux服务器时更加轻松自如。特别是在拥有大量linux主机的本地网络中,构建一台源服务器可以大大缓解软件安装、升级等对于internet的依赖。

要成功使用YUM机制来更新系统和软件,需要有一个包含各种rpm安装文件的软件仓库,提供软件库的服务器也称为“源”服务器。在客户机中只要正确指定软件仓库的地址等信息,就可以通过对应的“源”服务器来安装或更新软件了。

YUM软件仓库即可以作为本地YUM源,即为本地主机提供软件源服务;也可以措助FTPHTTP协议来进行发布,这样可以面向网络中的所有客户机提供软件源服务。为了便于客户机查询软件包,获取依赖关系等信息,在软件仓库中需要提供仓库数据库(repodata),其中收集了目录下所有rpm包的头部信息。

RHEL6系统的安装光盘中,已针对软件目录Packages/建好了repodata数据,因此只要简单地将整个光盘中的内容或将光盘全部内容复制到硬盘通过HTTPFTP进行发布,就可以作为软件仓库了。

A):本地YUM(光盘源)

以下是rhel_6.0-i386-DVD的目录结构:

HighAvailability  高可用相关软件包,如rhcs等相关套件
Server  常规软件包,如mysql,httpd,开发工具,系统管理工具等
LoadBalancer  负载均衡相关软件包,如lvs,pirihan
ResilientStorage存储
Packages  真正存放所有软件包的目录
p_w_picpaths  rhel安装进程所需要的引导和驱动镜像文件,

isolinux 镜像文件引导时所需要的文件

yum来安装所需要的软件包,先来搭建yum光盘源:

先将RHEL6的光盘挂载到某一目录下,如挂载到/mnt

#mount /dev/cdrom  /mnt

/etc/yum.repos.d目录下创建一个以.repo结尾的文件:

#vi  /etc/yum.repos.d/server.repo

配置内容如下:

[Server]   //仓库名称
name=Server  //
仓库描述信息
baseurl=file:///mnt/Server  //URL
访问路径
enabled=1  //
启用此软件仓库
gpgcheck=1  //
验证软件包的签名
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release  //GPG
公钥文件的位置

[LoadBalancer]
name=LoadBalancer
baseurl=file:///mnt/LoadBalancer
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]
name=HighAvailability
baseurl=file:///mnt/HighAvailability
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[ResilientStorage]
name=ResilientStorage
baseurl=file:///mnt/ResilientStorage
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

Yum命令格式:

yum <options> <command><package...>

参数说明:

options: 常用的有:

-y : 如果在工作过程中如要使用者响应,这个参数可以直接回答yes

command:

list : 列出在yum server 上面有的RPM套件;若执行yum list installed则表示只列出系统中已安装的软件包,yum list available则表示只列出软件仓库中可用(尚未安装)的软件包,yum list update则表示列出可以升级版本的软件包。

install: 安装某个套件

update : 升级某个套件,如果update后面没有接套件名称,即更新目前主机所有已安装的套件.

info  : 列出某个套件的详细信息,相当于rpm -qi package内容

clean : 将已下载到本机的packagesheaders移除

remove : 移除已经安装在系统中的某个套件

yum update 全部更新

yum update package 更新指定程序包package

yum check-update 检查可更新的程序

yum info <package> 显示安装包信息

yum list 显示所有已经安装和可以安装的程序包

yum list <package> 显示指定程序包安装情况

yum search <keyword>查找软件包,当需要根据某个关键词来查找相关的软件包时,可以执行yum  search 关键词,默认仅根据软件包名称和描述信息进行搜索。若执行yum search all 关键词,可以扩大搜索范围,例如,以下将搜索软件仓库并列出与httpd相关的软件包。Yum search allhttpd

yum clean headers 清除header

yum clean packages 清除下载的rpm

yum clean all 清除headerrpm

yum grouplist ,列出所有组

yum groupinstall 安装某个软件组如:yumgroupinstall Virtualization    安装虚拟化

问题解决:

1、如果首次安装软件包之后,再次安装别的软件包的时候,很可能会发现报错了,错误信息如下:
Error: Cannot retrieve repository metadata (repomd.xml) for repository:
InstallMedia. Please verify its path and try again

其实,rhel6在首次读取改软件仓库之后,会把原本光盘根目录下,也就是一同被你拷贝到软件仓库目录的media.repo复制一份到/etc/yum.repos.d/,而该文件也就是导致本地yum源失效的罪魁祸首。

解决方法
删除软件仓库中的media.repo
# rm -f /share/rhel/media.repo
2
、如果安装软件包出现public key for …….rpm isnot install

解决方法:导入完整性验证的公钥

#mount /dev/sr0 /mnt

#rpm –-import /mnt/RPM-GPG-KEY-redhat-release

本地YUM(硬盘源)

在本地创建一个存放YUM源的目录,如mkdir  /yum

RHEL6光盘中的所有内容拷贝到/yum

#mount /dev/cdrom /media

#cp -rf  /media/*  /yum

/etc/yum.repos.d目录下创建一个以.repo结尾的文件:

配置内容参照光盘源的YUM,此处略过

清理YUM缓存

yum clean all

验证本地YUM安装包

B):网络YUM(通过FTPHTTP协议方式实现网络YUM安装RPM包)

Linux主机中使用YUM客户端工具在线升级、安装软件时,由于受到网络连接速度、网络带宽的限制,往往给用户安装带来不必要的麻烦。但是如果在局域网中构建一个基于本地的YUM源服务器,则可以大大解决用户安装软件速度较慢的问题

通过FTP方式:(方式1:硬盘源)

实现步骤:

YUM服务器端配置:

将RHEL6光盘中的所有内容复制到本地硬盘相关目录下,如/var/ftp/rhel6

推荐步骤:

安装vsftpd服务软件包

#mkdir/var/ftp/rhel6

#mount /dev/cdrom /media

#cp /media/*/var/ftp/rhel6

启动vsftpd服务:

service vsftpd start

chkconfig  vsftpd on

在另一台客户端测试,首先创建repo文件指定YUM源位置

vi /etc/yum.repos.d/server.repo,注意文件的扩展名要以repo结尾,文件内容如下

[Server]

name=RedHat Enterprise Linux base

baseurl=ftp://192.168.0.2/rhel6/Server

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


[HighAvailability]

name=RedHat Enterprise Linux base

baseurl=ftp://192.168.0.2/rhel6/HighAvailability

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


[LoadBalancer]

name=RedHat Enterprise Linux base

baseurl=ftp://192.168.0.2/rhel6/LoadBalancer

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


[ResilientStorage]

name=RedHat Enterprise Linux base

baseurl=ftp://192.168.0.2/rhel6/ResilientStorage

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

验证:在客户端上安装RPM包,如samba

若YUM服务器开启了selinux功能,客户端通过YUM安装会失败

解决方法1:关闭selinux功能setenforce 0  

方法2:setsebool allow_ftpd_full_access on

YUM服务器开启了防火墙,客户端通过YUM安装会失败

解决方法1:关闭iptables

方法2:在INPUT规则链上创建允许FTP访问的规则。

通过FTP方式:(方式2:光盘源)

YUM服务器端配置:(IP:192.168.0.2

先将RHEL6系统光盘挂载到/var/ftp/pub目录下

确保vsftpd服务启动

YUM客户端配置:(IP:192.168.0.1)

在/etc/yum.repos/目录下创建一个以.repo为后缀的文件,内容如下:

[Server]

name=RedHat Enterprise Linux base

baseurl=ftp://192.168.0.2/pub/Server

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


[HighAvailability]

name=RedHat Enterprise Linux base

baseurl=ftp://192.168.0.2/pub/HighAvailability

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


[LoadBalancer]

name=RedHat Enterprise Linux base

baseurl=ftp://192.168.0.2/pub/LoadBalancer

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release


[ResilientStorage]

name=RedHat Enterprise Linux base

baseurl=ftp://192.168.0.2/pub/ResilientStorage

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

在客户端上测试

2、通过HTTPD方式:与ftp方式类似

()

对于用户搜集的非RHEL6光盘的更多其他软件包(必须包括存在依赖关系的所有安装文件)除了应准备相应的目录以外,还需要手动创建repodata数据文件,这就要用到createrepo工具(RHEL6光盘中有)

RHEL6安装光盘中Packages/目录的RPM包为例:

安装createrepo工具:

createrepoa主要用于收集目录中的rpm包文件的头信息,以创建repodata软件仓库数据(经gzip压缩的xml文件)。

mount  /dev/cdrom /mnt  //挂载光盘

rpm –ivh /mnt/Packages/createrepo-0.9.8-4.el6.noarch.rpm

注意:安装createrepo包时要依赖以下两个包:deltarpmpython-deltarpm,不能忽略这两个包

安装FTP服务器:

rpm  -ivh /mnt/Packages/vsftpd-2……..(TAB键自动补齐)

配置软件仓库目录:

可参考安装光盘的Server目录

mkdir/var/ftp/pub/Packages

mkdir/var/ftp/pub/repodata

从光盘把所有的RPM包复制到/var/ftp/pub/Packages目录下(要确保硬盘有足够的磁盘空间)

cp  - a /mnt/Packages/* /var/ftp/pub/Packages/

创建软件仓库信息文件:

cd/var/ftp/pub/

createrepo  --database ./

[root@serverpub]# ls  repodata/

filelists.sqlite.bz2  other.sqlite.bz2  primary.sqlite.bz2  repomd.xml

filelists.xml.gz      other.xml.gz      primary.xml.gz

可以看到已经创建好了相应的软件仓库信息文件

在客户端上创建扩展名为.repo的文件,内容参考上面的设置。


v