RPM、SRPM和YUM,linux包rpm包管理工具

1.软件安装方式对比:
   a.利用利用源代码来安装,也就是用厂商提供的tarball来进行安装,详尽请看开放源码的软件安装。缺点:每次安装软件都需要检测操作系统的与环境,设置编译参数,实际的编译还要按照个人喜好的方式来安装软到定位。
   b.RPM软甲管理器:厂商先在他们的系统上编译好我们用户所需要的软件,然后将这个编译好的可执行的软件直接发布给用户安装。
2.RPM与SRPM
   a.RPM的特点:将你安装的软件已经编译过,并且打包成rpm机制的安装包,通过安装好的的软件里默认的数据库记录这个软件安装是必需的依赖属性软件,当你安装你的linux主机时,RPM会先安装软件里面的数据查询linux主机依赖属性软件是否满足要求,若满足要求则予以安装,不满足则不装。安装的时候就将软件的信息写入RPM的数据库中,方便未来的查询,验证与反安装。
      RPM的优点: 1.由于已经编译完成并且打包完毕,所以软件的传输和安装都很方便的(不需要重新编译)
                 2.RPM文件本身提供软件的信息版本,依赖性软件名称,软件用途说明,软件所含文件等信息,便于了解软件。
                 3.由于软件的信息已经记录在linux主机的数据库中,很方便查询,升级和反安装。
      RPM的缺陷:1.该软件文件只能安装在原本默认的硬件和操作系统版本中。也就是说你的主机系统环境必须与当初建立的这个主机的环境相同才行。         2.通常不同的distribution所发布的RPM文件并不能用在其他的distribution上。
      RPM软件管理的注意事项:1.软件装环境必须与打包的时的环境一致或者相当。
            2.需要软件的依赖性需求。      3.反安装时需要特别小心,最底层的软件不可删除,否则会造成整个系统的问题。
    b.SRPM:顾名思义,source RPM的意思,,也就是说这个文件中含有源代码,特别注意的是,这个SRPM提供的软件内容时没有编译的,他提供的是源代码。通常他的扩展名是*.src.rpm这种格式来命名的。
      SRPM与tarball的区别:为什么不直接用tarball安装了?是因为SRPM文件内容虽然是源代码,但是他仍然提供了该软件所需要的依赖性说明以及所有RPM文件所提供的数据。
      SRPM与RPM区别:SRPM提供了参数设置文件(configure和makefile),所以我们下载的时SRPM,那么安装该软件,必须要:
            1.先讲软件以RPM管理的方式编译,此时SRPM会被编译成RPM文件。
            2.然后将编译完成的RPM文件安装到linux系统中。
      为什么使用SRPM文件?:一般软件发布的时候都会释放SRPM和RPM文件,RPM主要在相同的linux环境中安装才行,而SRPM既然是源代码的格式,自然我们就可以通过修改SRPM中的参数设置文件,然后重新编译成适合我们linux环境的RPM文件,这样就可安装在我们的系统中。
3.YUM在线升级:RPM软件安装时无法解决软件的依赖性问题,如果RPM在安装时检查数据库,看是否安装依赖性软件,没有安装的话是默认不能安装该软件的。因此YUM在线安装升级应运而生。
      YUM在线升级的机制:由于RPM文件会提供依赖属性的软件列表,因此在有安装软件需求的时候,将依赖属性的软件列表与系统内已安装的软件对比,将没有安装的依赖性软件一口气安装,这样就可以安装该软件了。这就是YUM的优势。


4.RPM软件管理程序:rpm
    1.rpm默认的安装路径:完成安装后的该软件相关的信息会被写入/var/lib/rpm目录下的数据库。软件的查询和数字证书信息等内容都在这个目录下。     软件内的文件主要存在在文件系统中 如/etc /usr/lib /usr/bin /usr/share/doc /usr/share/man等目录中
    2.RPM安装(install)
             命令:rpm -ivh rpm包
             常用选项:--force 强制安装      --test测试软件是否适合安装到当前环境下
    3.RPM 升级和跟新 使用-Uvh和-Fvh来升级    rpm -Uvh/-Fvh rpm包
             -Uvh:后面接的软件即使没有安装过,则系统讲进行安装,若是安装的旧版本则予以更新
             -Fvh:如果后面的软件未安装,则软件不进行安装
    4.RPM查询(query)
            1)我的系统中安装了那些rpm软件包。 
                rpm -qa 讲列出所有安装过的包 
                rpm -qa | grep sql  查找所有安装过的包含某个字符串sql的软件包
            2)查看已安装rpm包命令的安装路径   
                rpm -ql 包名(不带后缀.rpm) 也可以使用: which 命令
            3)查看rpm包中包含那些文件。 
                一个没有安装过的软件包,使用rpm -qlp ****.rpm 
                一个已经安装过的软件包,还可以使用rpm -ql ****.rpm 
            4)查看软件包的详细信息
                一个没有安装过的软件包,使用rpm -qip ****.rpm 
                一个已经安装过的软件包,还可以使用rpm -qi ****.rpm
            5)查看程序是哪个软件包安装的,或者哪个软件包包含这个程序。 
                rpm -qf `which 程序名` #返回软件包的全名 
                rpm -qif `which 程序名` #返回软件包的有关信息 
                rpm -qlf `which 程序名` #返回软件包的文件列表
    5.有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译。这类软件包有两种安装方法: 
    方法一: rpm -i(vh) your-package.src.rpm (也可以指定当前目录 --define "_topdir `pwd`")
             cd /usr/src/redhat/SPECS 
             rpmbuild -bp your-package.specs #一个和你的软件包同名的specs文件 
             cd /usr/src/redhat/BUILD/your-package/ #一个和你的软件包同名的目录 
             ./configure #这一步和编译普通的源码软件一样,可以加上参数 
             make 
             make install 
    方法二: rpm -i(vh) you-package.src.rpm (也可以指定当前目录 --define "_topdir `pwd`")
             cd /usr/src/redhat/SPECS 前两步和方法一相同 
             rpmbuild -bb your-package.specs #一个和你的软件包同名的specs文件,这时在/usr/src/redhat/RPM/i386/(根据具体包的不同,
也可能是i686,noarch等等)在这个目录下,有一个新的rpm包,这个是编译好的二进制文件。 
            执行rpm -i new-package.rpm即可安装完成。 
    6.如何卸载rpm软件包:
            rpm -e包名,包名可以包含版本号等信息,但是不可以有后缀.rpm
    比如卸载软件包proftpd-1.2.8-1,可以使用下列格式: rpm -e proftpd-1.2.8-1  rpm -e proftpd 不可以是下列格式:
rpm -e proftpd-1.2.8-1.i386.rpm rpm -e proftpd-1.2.8-1.i386 rpm -e proftpd-1.2 rpm -e proftpd-1 
    7.如何不安装但是获取rpm包中的文件:使用工具rpm2cpio和cpio 
            rpm2cpio xxx.rpm | cpio -vi 
            rpm2cpio xxx.rpm | cpio -idmv 
            rpm2cpio xxx.rpm | cpio --extract --make-directories 
参数i和extract相同,表示提取文件。v表示指示执行进程,d和make-directory相同,表示根据包中文件原来的路径建立目录,m表示保持文件的更新
时间。 

    8.RPM验证(verify)
             命令:rpm -Va                       列出当前系统所有被改动过的文件
                  rpm -V 已安装的软件名            若该软件的文件被修改过才会列出
                  rpm -Vp rpm文件名              列出软件内可能被修改的文件    
    
5.SRPM的使用:rpmbuild

    1.不修改原代码和配置文件,使用默认安装的方式
                命令:rpmbuild --rebuild *.src.rpm  编译打包后生成rpm文件,但是不安装,他生成的安装包需要用绝对路径。
                     rpmbuild --recompile *.src.rpm  编译打包后生成rpm文件,但同时会安装
    2.SRPM使用的路径和需要的软件  
        无论如何都在/usr/src目录中。里面的文件夹包含以下参数:
           SPECS、SOURCE、BUILD、RPMS、SRPMS,编译成功后,SPECS、SOURCE、BUILD等文件会被杀掉,只剩RPMS文件存在。
        如果编译不成功,会产生错误文件在/tep下面,此时需要这个文件进行排错处理。
    3.设置文件的主要内容:*.spec
        除了直接使用源代码编译之外,我们还可以修改设置文件来进行编译。具体做法如下:
            1.rpm -ivh *.src.rpm  将SRPM文件解开后安装放置在/usr/src中。
            2.find /usr/src/***/ -type f    查看/usr/src/目录文件中文件内容
                搜索结果中包含源代码,*.spec一个重要的配置文件,补丁文件,脚本文件等,其中主要含源代码和*.spec配置文件。
            通过以上方法,可知道*.spec文件在/usr/src/***/SPECS内。
            3.cd /usr/src/***/SPECS   ; vim *.spec  查看设置文件.spec的内容,主要内容有以下几个部分:
                1)介绍整个软件相关信息,不论是版本还是发布次数
                2)设置依赖属性需求的地方
                3)编译前预处理以及编译过程当中所需要进行的命令都写这了。%build下面的数据几乎就是makefile里面的信息,%prep这部分时预先处理,大致就是patch软件。%install安装过程
                4)列出软件发布的文件有哪些
                5)软件的更改历史记录
            他的基本规则是这样的:1)整个文件是以SUmmery开始的,这部分的设置都是最基础的说明内容
                              2)然后每个不同的段落都是以%作为开头的,如%install %prep等
    4.SRPM的编译命令(-ba/-bb)
        命令:rpmbuild -ba *.spec文件 编译并生成RPM和SRPM文件
             rpmbuild -bb *.spec文件 仅编译生成RPM文件
6.YUM 在线升级机制
    1.利用YUM进行查询,安装,升级和删除功能
            查询命令:yum [list|info|search|provides|whatprovides]
                list:列出目前yum所管理的所有软件和版本,类似rpm -qa
                info:同上,类似rpm -qai
                search:搜索某个软件名称或者描述(discription)的重要关键字
            安装/升级:yum[install|update] 软件名 
            删除软件:yum remove 软件名
    2.YUM的设置文件: vim /etc/yum.repos.d/*.repo    查看内容如下
            [base] 代表容器名。容器名可以随便取,但是不能有相同的容器名
            name:说明容器的意义,重要性不高
            mirrorlist=:列出这个容器可以使用的镜像站点,如果不想使用可以批注这行//
            baseurl:这个是最重要的,因为后面跟的是容器的实际网址,morrolist是由yum程序自行去寻找镜像站点,baseurl则是指定固定的一个容器地址。
            enable=1:就是让这个容器被启动
            gpgcheck=1:指定是否查阅RPM文件的数字证书
            gpgkey=:数字证书公钥所在位置,使用默认即可。
    3.列出目前yum server所使用的容器有哪些   yum repolist all
    4.配yum源
        repository 部分定义了每个源/服务器的具体配置,可以有一到多个。常位于/etc/yum.repo.d 目录下的各文件中。
        配置yum源的方法:
            # cd /etc/yum.repos.d/
            # ls 
    显示 CentOS-Base.repo 是yum 网络源的配置文件 CentOS-Media.repo 是yum 本地源的配置文件,也可以按自己的
意图创建。
        a、配本地yum源:vim  CentOS-Media.repo
            [c5-media](是用于区别各个不同的repository,必须有一个独一无二的名称)
            name=CentOS-$releasever - Media(name 是对repository 的描述,支持像$releasever $basearch这样的变量)
            baseurl=file:///media/CentOS/(光盘挂载点)
                    file:///mnt/cdrom/
                    file:///media/cdrecorder/            
            gpgcheck=1(此处为0,可以没有gpgkey选项)
            enabled=1(是否使能此yum源,1是使能)
            gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
        b、配网络yum源:vim  CentOS-Base.repo    
            [c5-media](是用于区别各个不同的repository,必须有一个独一无二的名称)
            name=CentOS-$releasever - Media(name 是对repository 的描述,支持像$releasever $basearch这样的变量)
            baseurl=url://server1/path/to/repository/(其中url 支持的协议有 http:// ftp:// file:// 三种)
                 url://server2/path/to/repository/
                  url://server3/path/to/repository/(配网络yum源)
            gpgcheck=1(此处为0,可以没有gpgkey选项)
            enabled=1(是否使能此yum源,1是使能)
            gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
            
                
                    
        

                

                                
            
        
      
      
 

猜你喜欢

转载自blog.csdn.net/hzj_001/article/details/81587787