首先认识一下Linux系统中的rpm包的样子,只以.rpm结尾的包即是。

比如:zsh-4.3.10-4.1.el6.x86_64.rpm

 

 

 

linux系统中软件包的组成:

    1、二进制程序,这些一般是命令,存放路径/bin ,/sbin/ , /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin

    2、库文件:软件的运行和安装都需要库文件的支持,存放路径:/lib , /usr/lib , /usr/local/lib

    3、配置文件:用于配置软件的属性,方便用户修改:/etc/

    4、帮助文档:对软件程序功能和使用的说明 ,软件程序写好后,需要有解释文档跟随,如果没有,时间长了,这个程序的使用和维护都会不知所从。手册、README 、INSTALL;/usr/share/man、/usr/share/doc

        

软件工具对软件包的管理,需要提供如下功能:

    1、软件包文件的清单

    2、软件包安装前后存放的位置

    3、软件包功能的说明

    4、依赖关系的提示或者解决

 

 

rpm管理工具提供的功能:打包、安装、查询、校验、升级、卸载

    打包功能后续介绍

    

    安装:

        软件包的安装方式:

            1、绿色安装:

            2、软件工具安装

            3、源代码安装

 

        命令格式:

            rpm [option] /PATH/TO/RPM_FILE

                -i | --install   :安装

                -v,-vv,-vvv:显示安装详细信息,v越多信息越详细

                -h:以#显示安装进度,

                合在一起就是-ivh,这个是常用选项

                --nodeps:忽略依赖关系,在软件包的安装过程中依赖关系有时很复杂,比方循环依赖,就需要忽略依赖关系                   

                --test:测试安装:

                --replacepkgs:重新安装,有的软件包已经安装过了,可是由于某个原因我需要重新安装覆盖一下,可是有时因为原有软件已经安装完成,不让覆盖,就需要这个选项了。

    卸载:

        rpm -e rpm_name:一般包名不用全名,以便卸载全面

        --nodeps:忽略依赖关系:

 

    查询:查询工作非常重要,rpm提供了详细的查询功能

        查询所有已经安装的包:

            rpm -qa:

            小技巧:rpm -qa | grep ‘pattern’

        查询包的摘要信息:

            rpm -qi rpm_name

        查询包安装完成后生成的文件的清单:

            rpm -ql rpm_name

        查询某个文件是由哪个rpm包安装生成的:

            rpm -qf /path/to/some_file

        查询安装后,生成的包的配置文件在哪里:

            rpm -qc rpm_name

        查询包安装完成,生成的帮助文档在哪里:

            rpm -qd rpm_name

        查询包安装后的相关脚本:

            rpm -q --script rpm_name

                脚本分为四种:preinstall(安装前运行的脚本)、postinstall(安装后运行的脚本)、preuninstall(卸载前运行的脚本)、postuninstall(卸载后运行的脚本)

        查询尚未安装的包的相关信息:

        只需要在上述查询命令的选项中添加-p选项即可使用。

    校验:

            检查软件包的签名是否被修改:

                导入:rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-rhx

                校验:-K    

                    例如:

                        # rpm -K zip-2.31-2.el5.i386.rpm 

                        zip-2.31-2.el5.i386.rpm: (sha1) dsa sha1 md5 gpg OK

                        结果是OK的,就是说,签名是没有问题的。

            检查软件包是否被修改:

                先导入:rpm --import PUBKEY ...

                例如:[root@localhost rpm-gpg]# rpm --import RPM-GPG-KEY-CentOS-6

                    然后在使用校验命令:rpm -V rpm_name:当包内信息被修改,就可以显示相关内容。

                            # rpm -V zsh

                            S.5....T  c /etc/zshrc

                            文件前的信息解释如下:

                            S file Size differs

                            M Mode differs (includes permissions and file type)
                             5 MD5 sum differs
                            D Device major/minor number mismatch
                           L readLink(2) path mismatch
                           U User ownership differs
                           G Group ownership differs
                           T mTime differs
                           P caPabilities differ

    升级:

        -U:升级+安装,就是安装并升级到新的版本

        -F:只是更新软件包

       升级时,依赖关系的解决:

        --force:在有冲突的时候,强行升级

        --nodeps:不检测依赖关系

 

rpm软件包工具管理,是依赖rpm包数据库的,如果这个数据库/var/lib/rpm,损坏,就会导致rpm不可使用,这就需要重建数据库:

        使用命令如下:

            --initdb:新建但保留原有库

            --rebuilddb:重新创建,覆盖原有库,不保留

 

 

yum工具的使用

yum(全称 Yellow dog Updater Modified)是一个在Fedora和Redhat以及SUSE中的前端软件管理器。能够指定yum源,可以在本地,也可以在网络,下载并安装,可以自动解决依赖关系,并一并安装所依赖的软件包,实现自动管理,不再用手动繁琐的安装。

 

yum的全局配置文件:

 

/etc/yum.conf

[main]

cachedir=/var/cache/yum

keepcache=0

debuglevel=2

logfile=/var/log/yum.log  #安装过程的信息

distroverpkg=redhat-release

tolerant=1

exactarch=1

obsoletes=1

gpgcheck=1 #自动检查rpm包的签名

plugins=1

# Note: yum-RHN-plugin doesn't honor this.

metadata_expire=1h

# Default.

# installonly_limit = 3 

# PUT YOUR REPOS HERE OR IN separate files named file.repo

# in /etc/yum.repos.d

 

客户端:

客户访问yum源的建立:

在/etc/yum.reops.d/下创建*.repo结尾的文件

内容如下:

[repository_ID]  #全局唯一

name=

baseusr=  # 本地用file://打头

enabled={0 | 1}

gpgcheck={0 | 1}

gpgkey=

cost=   #代价,设置优先级别。数字越小优先级越高

 

yum支持在仓库中使用变量:

    $releasever

        当前系统版本

    $arch

        uname -m显示的结果

    $basearch

        i386或者ix86

 例如:

 

yum使用命令

yum SUBCOMMAND

    查询:

    list:{all | install | available}列出软件包,全部的、已安装的、可使用的

    repolist {all | enable | disabled}repo的使用情况

    info packet_name:安装和未安装的包的信息。

    search:模糊匹配查询

    查询显示包由哪个软件包安装:

    provides | whatprovides packet_name

    groupinfo “group_name”:包组信息

    缓存:

    clean [ packages | headers | metadata | dacache | all ] 清理缓存信息 

    makecache:创建缓存信息

    安装:

    install packet_name ...

        -y:自动回答为yes

    reinstall:重新安装

    groupinstall:包组安装

    localinstall:本地yum安装软件包(rhel5实用),rhel6使用install即可

        --nogpgcheck:避开签名检测

    升级:

    check-update:检查可升级包信息

    update packet_name :升级软件包

    update-to:把软件包升级到哪个版本

    history:查询历史命令

   

源码包的编译安装,用如下几个步骤即可:

# ./configure 在这里可以指定参数,定制软件的性能

# make  在上一步骤里生成makefile文件后,即可进行这步

# make install 查看README或者INSTALL文档查看安装的步骤,如果有就继续吧,come on

 

 

 

        

源码包的安装的路径不是系统默认的路径,有四个问题需要解决:

    1、软件使用的命令不在PATH中,需要在/etc/profile.d/目录下写入一个脚本,比方:# cat /etc/profile.d/apache.sh

PATH=/usr/local/apache2/bin:$PATH

      2、软件的库文件, 不在系统默认的/etc/ld.so.conf/下,只需要在其下写入一个文件,使软件的库可以被重新搜索到即可:# cat /etc/ld.so.conf.d/apache.conf

/usr/local/apache2/lib

    3、帮助文档不在系统的搜索范围之内,把帮助文件的路径添加到系统可以搜索到的路径下即可:比方:vim /etc/man.config 添加man路径 MANPATH /usr/local/apache/man

    4、头文件:软件安装和运行需要系统的头文件的支持,所以把系统的头文件的路径链接到软件的头文件的路径下即可:比方:ln -sv /usr/local/apache/include/ /usr/include/httpd

 

 

 

源码包的rpm格式,制作成为rpm包:

在这个目录里:

[root@localhost rpmbuild]# ls

SOURCES  SPECS

可以看到有两个文件,我们只需要使用在SPECS目录中使用命令就可以创建生成rpm包了。

这个rpmbuild目录是rpm -ivh *.src.rpm包生成的。

在rpmbuild目录里使用命令:rpmbuild -ba package.spec即可生成rpm包和rpm格式的源码包

如果使用-bb即只生成rpm包。

如果上面的步骤遇见依赖关系,使用yum解决即可。