创建rpm包

news/2024/6/19 4:40:35 标签: rpm, yum, centos

一 准备工作

   要制作的linux系统中(centos6.5为例),需要保证有rpmbuild rpmdevtools两个开发工具

   yum install rpm-build

   yum install rpmdevtools

   安装完rpmdevtools后,会创建一些工具,比如

   rpmdev-setuptree    Create RPM build tree within user's home directory
   rpmdev-diff         Diff contents of two archives
   rpmdev-newspec      Creates new .spec from template
   rpmdev-rmdevelrpms  Find (and optionally remove) "development" RPMs
   rpmdev-checksig     Check package signatures using alternate RPM keyring
   rpminfo             Print information about executables and libraries
   rpmdev-md5/sha*     Display checksums of all files in an archive file
   rpmdev-vercmp       RPM version comparison checker
   spectool            Expand and download sources and patches in specfiles
   rpmdev-wipetree     Erase all files within dirs created by rpmdev-setuptree
   rpmdev-extract      Extract various archives, "tar xvf" style
   rpmdev-bumpspec     Bump revision in specfile

二 创建执行目录

   执行rpmdev-setuptree会在当前用户目录下创建rpmbuild的执行目录,创建的目录如下:

   rpmbuild
       BUILD             #创建过程使用
       BUILDROOT  #创建过程使用,执行rpmbuild后会产生
       RPMS             #生成没有源代码的rpm文件目录
       SOURCES     #需要打包的文件目录
       SPECS           #spec文件目录
       SRPMS          #生成包含源代码的rpm文件目录

   将需要打包的文件放到SOURCES下,将spec文件当道SPECS下,rpm只支持tar.bz压缩文件

三 写spec文件

   1.可以使用rpmdev-newspec工具产生一个spec模板文件

    按照模板文件先大体说一下spec文件

  newpackage.spec:

   Name:                                #文件名称
   Version:                             #文件版本
   Release:        1%{?dist}     #发布版本
   Summary:                          #综述

   Group:                               #组织
   License:                            #许可
   URL:                                 #URL地址
   Source0:                           #源文件

   BuildRequires:                 #编译依赖
   Requires:                         #安装依赖

   %description                   #描述

   %prep                             #prep安装前做的工作,使用%是引用宏定义
   %setup -q                       #解压源文件下的压缩包 tar.bz格式的

   %build                                                #创建
   %configure                                         #软件源码编译的步骤configure
   make %{?_smp_mflags}                    #make命令 并行编译

   %install                                                                 #安装,将打包好的文件安装到目标目录中
   rm -rf $RPM_BUILD_ROOT                                 #删除BUILDROOT目录中的临时文件
   make install DESTDIR=$RPM_BUILD_ROOT     # make 编译安装

   %clean                                        #打包结束后clean工作
   rm -rf $RPM_BUILD_ROOT       #删除BUILDROOT目录中的临时文件

   %files                                          #打包好的rpm文件包含的文件或目录
   %defattr(-,root,root,-)                  #打包rpm文件中默认的文件属性  owner=root group=root
   %doc                                          #标示文件doc属性

   %changelog                               #修改日志

   

   2.实例说明

   Name:        xxxxx
   Version:     0.1
   Release:    1
   Summary:   xxxxxx
   License:      GPL-3.0+
   Group:        meituan
   URL:           xxxxx

   BuildArch:  x86_64
   BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-%{_arch}
   Source0:    xxxx.tar.bz

   %description
    xxxxx

    %prep
     tar xzvf %{_sourcedir}/xxxxxx.tar.bz -C %{_builddir} #解压源文件到BUILD目录

    %build

    %install
    %{__install} -d -m644 %{_builddir}/%{name}-%{version}-%{release}-%{_arch}/test   %{buildroot}/usr/local/src/test

     #安装创建test目录
     %{__cp} -f  %{_builddir}/%{name}-%{version}-%{release}-%{_arch}/test/test.c  

             %{buildroot}/test/test.c
     #安装到%{buildroot}后的目录,就是rpm安装包最后安装到系统的目录

     #使用install cp等命令尽量使用rpm提供的宏定义,查看这些宏定义一般在/usr/lib/rpm/macros中
   
    %files
    %defattr(-, root, root, 0644) 
    %attr(655, root, root) /usr/test.c   #对单个文件进行权限控制

    %config(noreplace) /etc/test.conf #标识test.conf文件是配置文件,升级时不删除

    %post      #安装完成后执行的操作
    sup xxxx

    %clean
    rm -rf %{buildroot}

    %changelog

四 执行打包程序

     rpmbuild -ba xxxx.spec

     参数说明:

        -ba  #分别在RPMS SRPMS中生成不带源码的二进制rpm包 和 带源码的 src.rpm

        -bb  #只在RPMS中生成不带源码的二进制rpm

        -bs  #只在SRPMS中生成带源码的src.rpm

        -bp  #执行到prep段结束

        -bc  #执行到build段结束

        -bi   #执行到install段结束

        -bl   #执行files段对打包文件进行检查

        --sign #软件包签名 需要增加%_gpg_name

        --rebuild #编译源码包并安装

        --showrc #查看rpm相关的宏定义

五  执行安装

      正常安装 rpm -ivh xxx.rpm 

      强制安装 rpm -ivh --force xxx.rpm


六  查看rpm

    rpm2cpio XXX.rpm | cpio -div 解压出rpm包中文件

                                    cpio -t 只是输出文件列表



http://www.niftyadmin.cn/n/780406.html

相关文章

循环次数几次_女人一生可以承受几次“剖腹产”?就算身体再好,也别超过这个数...

自从二胎放开以后,以前想要两个宝宝的家庭,现在终于有了机会,有很多女性都加入了备孕阶段。对于这些女性来说,在生孩子的时候,有些人选择顺产,虽然要忍受很高的疼痛度,但是女性的肚子上不需要有…

怎么看登陆哪个用户名_怎么看广州的学位房市场?小区学位房和老破小学位房哪个更有投资价值?...

网友提问:您好!请问一下您怎么看广州的学位房市场,小区学位房和老破小学位房哪个更有投资价值。我们今年是收了越秀一些老破小,没电梯,近地铁的学位房,准备装修再转出。现在下半年客流量好少,想等明年三四月…

centos上安装updatedb

一 安装 linux中locate查找命名依赖updatedb的协助, 安装updatedb命令需要使用mlocate包 yum install mlocate mac上默认会有mdfind命令来替代locate命令 二定时执行 在/etc/crontab中增加 50 6 * * * updatedb

机器学习在流量分析_机器学习在遥感数据分析上的应用 (一)

Contribution of Machine Learning to Remote Sensing Data Analysis Machine Learning (机器学习)机器学习方法是计算机利用已有的数据(经验),得出了某种模型,并利用此模型预测未来的一种方法。根据训练数据是否有标记信息,学习任务可以分为…

安装使用percona版本mysql

下载percona镜像安装 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm 安装后,会在/etc/yum.repo.d中增加了percona-release.repo 安装yum install Percona-Server-server-56.x86_64 安装过程 …

同济子豪兄github_【B站UP主-同济子豪兄】华为云ModelArts零代码开发病虫害识别应用...

大家好,我是B站UP主同济子豪兄,我希望让人工智能和大数据赋能每一个行业,每一个人。今天给大家带来的是使用ModelArts快速开发农作物病虫害识别微信小程序,用人工智能的力量赋能农业,助力乡村振兴、精准扶贫&#xff0…

删除软链接目录文件

删除软链接文件 1.如果链接的目标文件是文件,直接使用rm 删除 2.如果链接的目标文件是目录, 经常出现的错误是 rm后,使用tab补全,会自动补齐为目录 如 A 链接到 目录B 会这样 rm A/ 这种时候会报错删除不掉,即使使…

方法失效_失效分析含义及失效分析方法

失效分析(FA)是一门发展中的新兴学科,近年开始从军工向普通企业普及。它一般根据失效模式和现象,通过分析和验证,模拟重现失效的现象,找出失效的原因,挖掘出失效的机理的活动。在提高产品质量&a…