Linux系统维护中,安装,卸载应用程序是一件再普通,再常用不过的工作事项,这个过程,可不比在windows中那么方便快捷,在我们日常使用的windows操作系统,通常安装的时候,应用的开发者都有安装程序供我们使用,很便捷的就能把应用程序安装到操作系统中了.

而早期的linux就没那么便捷了,安装极为困难,需要系统管理员源码编译进行安装.而应用程序的安装使用,依赖于某个其它的库,或者包,这是极为常见的情况,想像一下,如果安装好应用程序之后,因为所依赖的库在系统中没找到,无法调用相应的功能,而使得程序无法正常运行,那是一件多么头疼的事情.

在这样的大背景下,程序的开发人员,为了方便自己的作品推广,以得到更广泛的应用,把开发的程序做成了一个有相关数据记录的RPM,这些数据记录着当前需要安装的包所依赖的其它应用包的数据信息,在编译安装的过程中,其依赖的包如果在系统中找不着,就认为安装条件不成熟,给使用者提示,具体缺少的条件,这样就极大的提高了使用者的用户体验.使用者根据提示信息,一步步的将缺失的条件满足,使得应用程序得以正确安装,并正常使用.当要安装的应用程序安装 到系统后,rpm包又会记录其安装信息,以便将来查看.

Rpm的意思是(redhat package manager), .rpm.redhat的工程师参考了debian的工程师制作的dpkg思路做的.我们要使用应用程序的rpm,可以有以下途径

1、发行的光盘或站点服务器

如国内的镜像:

http://mirrors.163.com

ttp://mirrors.sohu.com

2、项目的官网

源代码

rpm

3、很多第三方机构或个人制作并公开发布许多rpm

http://rpmfind.net

http://rpm.pbone.net

较可靠的途径:EPEL

Fedora-EPEL

友情提供一个地址

http://dl.fedoraproject.org/pub/epel/6/x86_64/

 

rpm包的合法性验正:

包制作者通常制作完成之后会附加数字签名于包上;通常我们需要确保包来源合法性

以及包的完整性以免让人给调了包,在程序中留了后门,或者因为包的不完全,提供的功能不能满足应用场景的需要而徒增烦恼.

Rpm包应用方便,能减轻我们的工作负担,那么我们下面就来讨论一下rpm包的使用方法,以及使用场景.

安装程序包:

rpm 

install   安装的意思  

-v view   查看更细部的安装信息画面  [如果你想了解更详细的信息可以使用vv选项,还要更详细?你还可以使用vvv选项.]

-h :以安装信息列显示安装进度,以 # 字符号表示!

 我们常用的组合选项:-ivh 安装,并显示安装信息和安装进度

--test: 仅作测试,并没有真正执行安装

如果要安装的应用依赖于其它包,导致安装无法顺利进行怎么办呢?有两种解决方案:

1、解决依赖关系,找到相应的包组安装上,继续进行安装

2、忽略依赖关系加上长选项 --nodeps强制安装,但有可能无法运行;

哪果我们想重新安装包怎么办?很简单,我们还可以使用 --replacepkgs长选项

我们作个示例

假如我们要安装php

[root@localhost Packages]# rpm -ivh php-5.3.3-26.el6.x86_64.rpm 

warning: php-5.3.3-26.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

error: Failed dependencies:

        php-cli(x86-64) = 5.3.3-26.el6 is needed by php-5.3.3-26.el6.x86_64

        php-common(x86-64) = 5.3.3-26.el6 is needed by php-5.3.3-26.el6.x86_64

安装过程很明显有两个提示,缺少相关的包 php-cli(x86-64)  php-common(x86-64) 

并且缺少相应的验证密钥

我们可以导入密钥文件将其解决

[root@localhostx86_64]#

rpm --import /usr/local/nginx/html/centos/6/base/x86_64/RPM-GPG-KEY-CentOS-6 

rpm -qa gpg-pubkey*显示所有已经导入的gpg格式的公钥

[root@localhost x86_64]# rpm -qa gpg-pubkey*

gpg-pubkey-c105b9de-4e0fd3a3

rpm -qi gpg-pubkey-NAME  显示密钥的详细信息

[root@localhost x86_64]# rpm -qi gpg-pubkey-c105b9de-4e0fd3a3

Name        : gpg-pubkey                   Relocations: (not relocatable)

Version     : c105b9de                          Vendor: (none)

Release     : 4e0fd3a3                      Build Date: Sun 20 Jul 2014 03:59:39 PM CST

Install Date: Sun 20 Jul 2014 03:59:39 PM CST      Build Host: localhost

Group       : Public Keys                   Source RPM: (none)

Size        : 0                                License: pubkey

Signature   : (none)

Summary     : gpg(CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>)

Description :

-----BEGIN PGP PUBLIC KEY BLOCK-----

 

之后,按相应的依赖关系,先后安装包就能把 php-5.3.3-26.el6.x86_64.rpm  装入系统了

rpm -ivh php-common-5.3.3-26.el6.x86_64.rpm 

rpm -ivh php-cli-5.3.3-26.el6.x86_64.rpm 

rpm -ivh php-5.3.3-26.el6.x86_64.rpm 

wKiom1PLjyDDCOwOAAEMYV73w2E470.jpg

很明显,导入密钥之后就没有提示缺少相应的验证密钥了.

 

当然,程序不可能总是停留在一个版本,后续升级怎么办呢?

假如,刚才安装的 php-5.3.3-26.el6.x86_64.rpm 的包,升级到了5.4.0

那么我们可以使用 -U选项,如果安装过了,就进行升级,如果尚未安装,则直接安装

:rpm -Uvh php-5.4.0-26.el6.x86_64.rpm 

如果没安装就不予安装可以使用 -F选项,纯升级

:rpm -Fvh php-5.4.0-26.el6.x86_64.rpm 

Rpm 包的管理之查询操作选项

rpm 

-q query查询,后面的选项,要结合该选项使用

-p 尚未安装的测试通常需要结合-q选项使用

-a 所有满足条件的包

-i information包的详细信息

-l 查看包生成的文件

-c 查询包安装生成的配置文件 

-d 查询某包安装生成了哪些帮助文件

-f 查询某文件是由哪个包安装生成的

--scripts查询程序包的相关脚本

通常脚本有四类:

preinstall:安装前脚本

postinstall: 安装后脚本

preuninstall: 卸载前脚本

postuninstall: 卸载后脚本 

 

用于rpm安装还是比较麻烦的,相互依赖的关系,在安装中,还是比较难找的

为了减轻系统使用者的工作量,于是出现了yum.  Yum基於RPM包管理,是一种基于 C/S的架构服务.能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令.由于其安装方便,简洁,深受广大系统管理员的欢迎.

使用yum机制:

确保有yum repo可用;

Yum服务器,可以是 ftp, http, nfs, file 类型的在yum源上,存放的是各种的rpm,

客户端使用,需要配置相应的配置文件,有主配置文件,/etc/yum.conf,这是指明yum

基础配置信息,通常我们不去动它,我们需要在/etc/yum.repos.d/下建立一个以.repo后缀结尾的文本配置文件,

配置文件格式如下

[REPOID]  => 仓库唯一ID

Name=>该仓库的解释说明通常作到让使用者了解就好了

baseurl =>yum 仓库访问路径 

enabled={0|1}  配置是否启用. 0为禁用,1为启用

gpgcheck={0|1}是否检查来源合法性

gpgkey=URL检查密钥

cost={1..n}指定访问此仓库的开销 数字越小,优先级越高

 

例如,我的配置文件如下

[base]

 name=CentOS $releasever $basearch on local server 172.16.26.1

 baseurl=http://172.16.26.1/centos/$releasever/base/$basearch/

 gpgcheck=0

 enabled=1 

[extra]

 name=CentOS $releasever $basearch extras on local server 172.16.26.1

 baseurl=http://172.16.26.1/centos/$releasever/extend/$basearch/

 gpgcheck=0

 enabled=1

 [epel]

 name=Fedora EPEL for CentOS$releasever $basearch on local server 172.16.26.1

 baseurl=http://172.16.26.1/centos/$releasever/epel/$basearch/

 gpgcheck=0

 enabled=1

Yum服务器使用ngnix, ngnixwebsite目录/usr/local/nginx/html/

创建了以下结构的目录

centos/

└── 6

    ├── base

    │ └── x86_64 

    ├── epel

    │ └── x86_64 

    └── extend

        └── x86_64 

yum clean all 清除所有yum缓存

建立仓库

yum createrepo /usr/local/nginx/html/centos/6/extend/x86_64

yum createrepo /usr/local/nginx/html/centos/6/base/x86_64

yum createrepo /usr/local/nginx/html/centos/6/epel/x86_64

Ok大功告成,可以使用了

 

还是以php的安装为例

[root@localhost epel]# rpm -e php 先把刚才用rpm方式安装的php反安装

开始使用yum安装

[root@localhost epel]# yum install php

Loaded plugins: fastestmirror, refresh-packagekit, security

Repository base is listed more than once in the configuration

Repository extra is listed more than once in the configuration

Repository epel is listed more than once in the configuration

Loading mirror speeds from cached hostfile

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package php.x86_64 0:5.3.3-26.el6 will be installed

--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================

 Package                     Arch                           Version                              Repository                    Size

====================================================================================================================================

Installing:

 php                         x86_64                         5.3.3-26.el6                         base                         1.1 M

Transaction Summary

====================================================================================================================================

Install       1 Package(s)

Total download size: 1.1 M

Installed size: 3.5 M

Is this ok [y/N]: y

Downloading Packages:

php-5.3.3-26.el6.x86_64.rpm                                                                                  | 1.1 MB     00:00     

Running rpm_check_debug

Running Transaction Test

Transaction Test Succeeded

Running Transaction

Warning: RPMDB altered outside of yum.

  Installing : php-5.3.3-26.el6.x86_64                                                                                          1/1 

  Verifying  : php-5.3.3-26.el6.x86_64                                                                                          1/1 

Installed:

  php.x86_64 0:5.3.3-26.el6      

Complete!

 

yum可用选项

repolist 

选项参数有enabled[可用] disabled[关闭] all [所有默认参数为all

yum list 

all [所有] installed[已安装的] available[未安装的]  

    list KEYWORD* 密钥列表

info [该选项结合包名使用,查看包的详细信息]

grouplist  [显示包组的信息]

clean 清理缓存

all[所有] packages[] metadata[数据信息] expire-cache[缓存信息] rpmdb plugins[插件信息]

 

install 安装

einstall 重装

check-update 检查可用的升级包

update 升级

remove 卸载

whatprovides or provides  查看文件是由哪个安装包生成

groupinstall 包组安装

groupremove  包组卸载