• Linux – rpm


            rpm是redhat(系列)系统软件安装,管理的工具。相对于针对仓库而言的yum,rpm是针对单个软件包的。通常情况下Linux发布软件是通过源代码方式,一般情况下就是对源码./configure, make,make install。除了这种方式外,比较常用的就是rpm包,它则可提供完整的已经编译好的二进制程序或者其它东西(帮助文件,源码等)。这里不说.deb。

            rpm的使用不说,直接看帮助,常用的就是-qa, -e,-ivh等几个选项。

            下面说说rpm包的制作(在制作过程中发现并不是那么顺利,还不如用源代码方式发布),制作是用rmpbuild这个命令完成的。这里仅说下简单的制作以供以后参考。

            rpm包的结构一般为: name-version-release.architecture.rpm

    name-version-release 命名版本号之类的,如MySQL-server-5.0.i386.rpm
    architecture 适用的结构,如i386, i686, x86_64, noarch

      RPM系统要求有以下几个文件夹(如果是安装系统的时候安装了rmpbuild, 则在redhat系列是在/usr/src/redhat, 如果自行安装的话,可能在你的主目录的rpbbuild的目录下面)。

    BUILD rpmbuild在此目录构建软件
    RPMS rmpbuild存储生成的二进制rpm文件目录
    SOURCES 所要构建软件的源码
    SPECS SPECS文件所在的目录
    SRPMS rmpbuild存储生成的src rpm包的目录

            rpmbuild最重要的是书写SPECS文件,写好的specs文件丢到SPECS目录(也可以不用)。SPECS比较烦琐,下面列出一些常用的,但不完全(#开头表示注释)。

    Summary 软件包简要的描述
    Name 软件包名称
    Version 软件包定义的版本
    Release 软件包发布版本
    License 软件包许可
    Group 软件包分类(在GNOME应用程序可看到)如Applications/Media
    Source 软件包源码下载地址
    URL 源码相关网站
    Distribution 发行版系列
    Packager 打包人的信息
    Requires 如 mysql >= 3.30 或者 mysql
    sources 源码tar包,可以这样设置为通用的:%{name}-%{version}.tar.gz
    Buildroot rmpbuild的暂存区,可以设置为通用的:%{_tmppath}/%{name}-%{version}-root
    %description 软件详细描述,可多行
    %prep 软件编译之前的处理,如解压
    %setup 不知道什么用,不过通常在%prep下面%setup -q
    %build 开始编译软件,如make
    %install 开始安装软件,如make install
    %makeinstall 调用Makefiel的make install
    %clean rmpbuild的clean命令
    %post rmpbuild构建完成的命令
    %files 要打包的文件

           如果用VIM新建.spec文件,在新建的时候会弹出相应的模板给你填,这个不错。

            rmpbuild的编译选项大致有下面几种类型:

    -ba 构建所有的东西,包含二进制和源码的RPM
    -bb 构建二进制的RPM
    -bc 构建(编译)程序,但不生成RPM
    -bp 准备构建RPM
    -bi 构建二进制的RPM并安装之
    -bl 检查RPM文件列表
    -bs 构建源码的RPM

            一人简单的例子:

    Name:           jmm
    Version:        1.0
    Release:        1
    Summary:        Process pool server
    
    Group:          Applications/Internet
    License:        LGPL 2.0
    URL:            www.google.com
    Source0:        jmm-1.0.tar.gz
    BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
    
    #BuildRequires:
    #Requires:       libevent >= 2.0
    
    %description
    Process pool server base on libevent
    
    
    %prep
    %setup -q
    
    %build
    make
    
    %install
    mkdir -p %{buildroot}/usr/local/bin
    #make install DESTDIR=%{buildroot}
    install -m755 jmm %{buildroot}/usr/local/bin/jmm
    
    %clean
    rm -rf %{buildroot}
    
    
    %files
    /usr/local/bin/jmm
    #%defattr(-,root,root,-)
    #%doc
     
    我的机子是x86_64的,在我机子上运行rmpbuil –ba jmm.spec将在RPMS目录生成x86_64/jmm-1.0-1.x86_68.rpm,在SRPMS目录生成jmm-1.0-1.src.rpm。
    要注意一点的就是%files下面的文件是要写buildroot下面的文件。
    查看刚才编译的文件信息(PS这个东西是要libevent2的所以,如果安装的话,是会失败的):
     
    [heidong@CLOUD x86_64]$ rpm -qpi jmm-1.0-1.x86_64.rpm    
    Name        : jmm                          Relocations: (not relocatable)
    Version     : 1.0                               Vendor: (none)
    Release     : 1                             Build Date: Thu Sep 13 07:07:07 2012
    Install Date: (not installed)               Build Host: CLOUD.NODE.0
    Group       : Applications/Internet         Source RPM: jmm-1.0-1.src.rpm
    Size        : 45357                            License: LGPL 2.0
    Signature   : (none)
    URL         : www.google.com
    Summary     : Process pool server
    Description :
    Process pool server base on libevent
    [heidong@CLOUD x86_64]$ rpm -qpl jmm-1.0-1.x86_64.rpm   
    /usr/local/bin/jmm
    [heidong@CLOUD x86_64]$

           查看源RPM的信息:

    [heidong@CLOUD SRPMS]$ rpm -qpi jmm-1.0-1.src.rpm           
    Name        : jmm                          Relocations: (not relocatable)
    Version     : 1.0                               Vendor: (none)
    Release     : 1                             Build Date: Thu Sep 13 07:07:07 2012
    Install Date: (not installed)               Build Host: CLOUD.NODE.0
    Group       : Applications/Internet         Source RPM: (none)
    Size        : 17198                            License: LGPL 2.0
    Signature   : (none)
    URL         : www.google.com
    Summary     : Process pool server
    Description :
    Process pool server base on libevent
    [heidong@CLOUD SRPMS]$ rpm -qpl jmm-1.0-1.src.rpm   
    jmm-1.0.tar.gz
    jmm.spec
    [heidong@CLOUD SRPMS]$ 

            关于源RPM的安装,与编译好的二进制文件不一样,源RPM是要编译的。一般是包含压缩包和SPEC文件。安装后,源码文件是在SOURCE目录,SPEC文件是在SPEC目录。要进得编译方可得到二进制RPM包。

          相关文件下载:jmm-1.0-1.src.rpm.zip,由于不支持rpm后辍文件的上传,因此加个ZIP,使用时去掉。

  • 相关阅读:
    关于编码的两个小点(摘)
    c#中类和成员的修饰符介绍
    jquery/js不支持ie9以下版本的方法或属性
    一次Linux系统被攻击的分析过程
    运维堡垒机(跳板机)系统 python
    puppet 3+Unicorn+Nginx安装配置
    用memcache来同步session
    php+memcache实现的网站在线人数统计
    CentOS yum 源的配置与使用
    Bind+DLZ构建企业智能DNS/DNS
  • 原文地址:https://www.cnblogs.com/imlgc/p/2692390.html
Copyright © 2020-2023  润新知