zoukankan      html  css  js  c++  java
  • linux下srpm源码包的使用和安装

    一.关于srpm包

    ​ SRPM包是Source RPM的简称,SRPM包里包含有源代码,如果想要安装SRPM包,需要以RPM管理的方式编译,将SRPM编译成为

    RPM文件,然后将编译完成的RPM文件安装到Linux系统中。SRPM 最大的优点就是可以让使用者自行修改设置参数,以符合使用者自己

    的 Linux 环境;

    二.srpm包和rpm包的区别

    文件格式 软件包包名格式 是否可直接安装 内含程序类型 可否修改参数并编译
    RPM xxx.rpm 已编译的二进制文件 不可
    SRPM xxx.src.rpm 不可 源代码

    三.不对srpm包做修改,直接安装srpm包

    1.当我们拿到一个srpm包的时候,我们不准备对srpm包做修改,要直接安装的时候,有两种安装方法:

    • ​ 方法一:rpmbuild --rebuild ***.src.rpm ,这个命令将src.rpm包进行“编译”与“打包”产生 RPM安装包,然后我们可以使用rpm -ivh进行安装;
    • ​ 方法二:rpmbuild --recompile ***.src.rpm,这个命令将src.rpm包进行“编译”,“打包”和安装。执行这个命令后srpm包已经安装好了。

    2.使用第一种方法安装srpm包(rpmbuild --rebuild)

    #准备一个srpm源码包lrzsz
    [root@node5 ~]# ll lrzsz-0.12.20-27.1.el6.src.rpm 
    -rw-r--r-- 1 root root 290240 Oct 25  2018 lrzsz-0.12.20-27.1.el6.src.rpm
    
    [root@node5 ~]# rpm -q lrzsz
    lrzsz-0.12.20-36.el7.x86_64
    
    #首先卸载系统中已经安装的lrzsz程序
    [root@node5 ~]# yum remove lrzsz -y
    
    [root@node5 ~]# rpm -q lrzsz
    package lrzsz is not installed
    
    #将src.rpm包进行“编译”与“打包”产生 RPM安装包
    [root@node5 ~]# rpmbuild --rebuild lrzsz-0.12.20-27.1.el6.src.rpm 
    -bash: rpmbuild: command not found
    
    #发现没有rpmbuild这个命令,需要先安装一下
    [root@node5 ~]# yum install rpm-build
    
    #将src.rpm包进行“编译”与“打包”产生 RPM安装包
    [root@node5 ~]# rpmbuild --rebuild lrzsz-0.12.20-27.1.el6.src.rpm 
    
    [root@node5 ~]# echo $?
    0
    [root@node5 ~]# ls rpmbuild/
    BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
    [root@node5 ~]# ls rpmbuild/RPMS/
    x86_64
    
    #rpmbuild --rebuild这一步产生的rpm安装包放在了/root/rpmbuild/RPMS/x86_64/下面
    [root@node5 ~]# ls rpmbuild/RPMS/x86_64/
    lrzsz-0.12.20-27.1.el7.centos.x86_64.rpm  lrzsz-debuginfo-0.12.20-27.1.el7.centos.x86_64.rpm
    
    #安装rpm包
    [root@node5 ~]# rpm -ivh /root/rpmbuild/RPMS/x86_64/lrzsz-0.12.20-27.1.el7.centos.x86_64.rpm 
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:lrzsz-0.12.20-27.1.el7.centos    ################################# [100%]
     
    #自此,lrzsz已经重新安装
    [root@node5 ~]# rpm -q lrzsz
    lrzsz-0.12.20-27.1.el7.centos.x86_64
    

    四.对srpm包的源码进行修改,然后安装srpm包

    1.srpm包里含有源代码,那肯定就有配置文件和相关目录,下面先介绍srpm包中各个目录的作用。解压srpm包之后,一般会生成一个rpmbuild目录,我们是在/root目录下生成的,所以解压srpm包之后,对应的文件都在/root/rpmbuild/下面:

    #解压srpm包
    [root@node5 ~]# rpm -ivh ntp-4.2.6p5-19.el7.centos.1.src.rpm 
    
    [root@node5 ~]# ls /root/rpmbuild/
    BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
    
    目录名 目录作用描述
    /root/rpmbuild/SPECS 这个目录当中放置的是该软件的配置文件,例如这个软件的信息参数、设置项目等等都放置在这里,SPECS目录里一般有***.spec配置文件;
    /root/rpmbuild/SOURCES 这个目录当中放置的是该软件的原始文件 (*.tar.gz 的文件) 以及 config 这个配置文件;
    /root/rpmbuild/BUILD 在编译的过程中,有些暂存的数据都会放置在这个目录当中;
    /root/rpmbuild/RPMS 经过编译之后,并且顺利的编译成功之后,将打包完成的文件放置在这个目录当中。里头有包含了 x86_64, noarch…. 等等的文件;
    /root/rpmbuild/SRPMS 与 RPMS 内相似的,这里放置的就是 SRPM 封装的文件,有时候你想要将你的软件用 SRPM 的方式释出时, 你的 SRPM 文件就会放置在这个目录中了。

    2.当我们拿到一个srpm包的时候,我们准备对srpm包做修改,一般都是修改SPECS目录下的***.spec文件,然后进行编译成为rpm包或者srpm包,编译指令有两个:

    ​ rpmbuild -ba rpmbuild/SPECS/***.spec #编译产生 RPM 文件与 SRPM 文件

    ​ rpmbuild -bb rpmbuild/SPECS/***.spec #仅编译成 RPM 文件

    #首先下载我们需要的srpm包
    [root@node5 ~]# wget http://vault.centos.org/7.1.1503/updates/Source/SPackages/ntp-4.2.6p5-19.el7.centos.1.src.rpm
    
    #解压srpm包,会有一堆warn,但是不影响
    [root@node5 ~]# rpm -ivh ntp-4.2.6p5-19.el7.centos.1.src.rpm 
    
    #解压srpm包之后,文件都在rpmbuild目录中
    [root@node5 ~]# ls rpmbuild/
    SOURCES  SPECS
    
    [root@node5 ~]# ls rpmbuild/SPECS/
    ntp.spec
    
    [root@node5 ~]# ls rpmbuild/SOURCES/
    ntp-4.2.4p7-getprecision.patch    ntp-4.2.6p4-droproot.patch       ntp-4.2.6p5-fipsmd5.patch     ntp-4.2.6p5-pwcipher.patch       ntp.cryptopw       ntp.keys                       ntp.step-tickers
    ntp-4.2.6p1-cmsgalign.patch       ntp-4.2.6p4-htmldoc.patch        ntp-4.2.6p5-hexpw.patch       ntp-4.2.6p5-refreshroute.patch   ntpdate.service    ntpstat-0.2-clksrc.patch       ntp-wait.service
    ntp-4.2.6p1-linkfastmath.patch    ntp-4.2.6p5-cve-2014-9293.patch  ntp-4.2.6p5-identlen.patch    ntp-4.2.6p5-rootdisp.patch       ntpdate.sysconfig  ntpstat-0.2-errorbit.patch     sntp.service
    ntp-4.2.6p1-retcode.patch         ntp-4.2.6p5-cve-2014-9294.patch  ntp-4.2.6p5-logdefault.patch  ntp-4.2.6p5.tar.gz               ntpdate.wrapper    ntpstat-0.2-maxerror.patch     sntp.sysconfig
    ntp-4.2.6p1-sleep.patch           ntp-4.2.6p5-cve-2014-9295.patch  ntp-4.2.6p5-mlock.patch       ntp-4.2.6p5-updatebclient.patch  ntp.dhclient       ntpstat-0.2-multipacket.patch
    ntp-4.2.6p3-bcast.patch           ntp-4.2.6p5-cve-2014-9296.patch  ntp-4.2.6p5-multiopts.patch   ntp-4.2.6p5-xleap.patch          ntpd.service       ntpstat-0.2-sysvars.patch
    ntp-4.2.6p3-broadcastdelay.patch  ntp-4.2.6p5-delaycalib.patch     ntp-4.2.6p5-noservres.patch   ntp.conf                         ntpd.sysconfig     ntpstat-0.2.tgz
     
    #假设我们已经按照要求修改过rpmbuild/SPECS/ntp.spec配置文件,下面进行编译
    [root@node5 ~]# rpmbuild -ba /root/rpmbuild/SPECS/ntp.spec 
    error: Failed build dependencies:
    	libedit-devel is needed by ntp-4.2.6p5-19.el7.centos.1.x86_64
    	perl-HTML-Parser is needed by ntp-4.2.6p5-19.el7.centos.1.x86_64
    	pps-tools-devel is needed by ntp-4.2.6p5-19.el7.centos.1.x86_64
    	autogen is needed by ntp-4.2.6p5-19.el7.centos.1.x86_64
    	autogen-libopts-devel is needed by ntp-4.2.6p5-19.el7.centos.1.x86_64
     
    #根据报错可知,缺少依赖包,我们先安装一下
    [root@node5 ~]# yum -y install libedit-devel perl-HTML-Parser pps-tools-devel autogen autogen-libopts-devel
    
    #假设我们已经按照要求修改过rpmbuild/SPECS/ntp.spec配置文件,下面进行编译
    [root@node5 ~]# rpmbuild -ba /root/rpmbuild/SPECS/ntp.spec 
    
    [root@node5 ~]# echo $?
    0
    
    [root@node5 ~]# ls /root/rpmbuild/
    BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS
    
    [root@node5 ~]# ls /root/rpmbuild/RPMS/
    noarch  x86_64
    [root@node5 ~]# ls /root/rpmbuild/RPMS/x86_64/
    ntp-4.2.6p5-19.el7.centos.1.x86_64.rpm  ntpdate-4.2.6p5-19.el7.centos.1.x86_64.rpm  ntp-debuginfo-4.2.6p5-19.el7.centos.1.x86_64.rpm  sntp-4.2.6p5-19.el7.centos.1.x86_64.rpm
    
    [root@node5 ~]# ls /root/rpmbuild/SRPMS/
    ntp-4.2.6p5-19.el7.centos.1.src.rpm
    

    自此我们看到已经成功编译出了rpm包和srpm包,现在只需要按照“不对srpm包做修改,直接安装srpm包”安装即可。

    参考链接:

    https://www.bluestep.cc/22-4-srpm-的使用-:-rpmbuild-(optional)/

    https://blog.csdn.net/huangdeijia/article/details/88953444

  • 相关阅读:
    window.onload和document.ready/jquery页面加载事件等的区别
    JAVA面试题大全
    BIO NIO AIO的知识扫盲
    类的加载过程详细解释
    nginx的Rewrite和其他相关配置
    【微服务架构设计】DDD
    【重构】
    【多线程】Lock接口与其实现类
    【三方件】汇总
    【SpringBoot-SpringSecurity】安全响应头+防攻击 ~~ TODO
  • 原文地址:https://www.cnblogs.com/renshengdezheli/p/13954361.html
Copyright © 2011-2022 走看看