zoukankan      html  css  js  c++  java
  • linux RPM 打包流程

    一、RPM 打包准备

    1.因为打RPM包需要 rpmbuild 命令,所以需要先安装 rpmbuild 相应工具,安装过程可在网上查找;

    2.输入命令  rpmbuild xx.spec 即可在自动当前用户的 $HOME 目录下创建 RPM 相关的文件夹,也可手动创建;

     1 [xx@localhost ~]$ rpmbuild xx.spec
     2 错误:stat ~/xx.spec 失败:没有那个文件或目录
     3 [xx@localhost ~]$ tree ~/rpmbuild/
     4 rpmbuild/
     5 ├── BUILD
     6 ├── BUILDROOT
     7 ├── RPMS
     8 ├── SOURCES
     9 ├── SPECS
    10 └── SRPMS

      BUILD:源码包被解压至此,并在该目录的子目录完成编译,宏为 %_builddir

      BUILDROOT:保存 %install 阶段安装的文件,宏为 %_buildrootdir

      RPMS:生成/保存二进制 RPM 包,宏为 %_rpmdir

      SOURCES:保存源码包(如 .tar 包)和所有 patch 补丁,宏为 %_sourcedir

      SPECS:保存 RPM 包配置(.spec)文件,宏为 %_specdir

      SRPMS:生成/保存源码 RPM 包(SRPM),宏为 %_srcrpmdir

      ~/rpmbuild 的宏为 %_topdir

    二、编辑 SPEC 文件

    1.创建 SPEC 文件如下所示:

    [xxx@localhost rpmbuild]$ rpmdev-newspec xxx.spec
    xxx.spec created; type minimal, rpm version >= 4.12.

    2.将 SPEC 文件放在 ~rpmbuild/SPECS/ 下面,然后编辑 SPEC 文件,如下所示:

    Name:    #软件名称
    Version:  #版本号
    Release:  #发布编码
    Summary:  #简要说明
    License:  #协议版本
    URL:
    Source0:  #源码包
    %description
    #描述
    %prep
    #预处理

    %build
    #编译
    %pre
    #安装前
    %install
    #安装

    %post
    #安装后
    %files #安装的文件列表
    %clean
    #清理临时文件

    %preun
    #卸载前

    %postun
    #卸载后
    %changelog * Fri Aug 7 2020 -

    3.安装的各个阶段说明:

    %prep阶段 - 预处理,主要对源代码包进行解压和打补丁

      一般使用  %setup  -c 或者 %setup -q 命令来解压源码包,直接会将文件解压到%{_builddir}

    %build阶段 - 对源代码包进行编译

      编译阶段,非 GNU configure 配置的程序可以不关注这个阶段

    %install阶段 - 将软件安装到虚拟根目录, 同时 Install 阶段也有如下阶段

      %pre阶段 - 安装前

        $1 == 1 代表安装

        $1 == 2 代表升级

      %post阶段 - 安装后

        $1 == 1 代表安装

        $1 == 2 代表升级

      %preun阶段 - 卸载前

        $1 == 0 代表卸载

        $1 == 1 代表升级

      %postun阶段 - 卸载后

        $1 == 0 代表卸载

        $1 == 1 代表升级

    这个阶段主要从 %{_builddir} 复制相关文件到 %{buildroot} (虚拟根目录)目录,如下所示:

    rm -rf $RPM_BUILD_ROOT
    cp -rf xxx $RPM_BUILD_ROOT

    %files阶段-列出被打包的文件和目录

      首先要设定默认权限,同时要列出打包的目录和文件,设定默认权限的命令如下:

    %defattr(<文件权限>, <用户>, <用户组>, <目录权限>)

      第 4 个参数通常会省略。常规用法为 %defattr(-,root,root,-),其中 “-” 表示默认权限。

      在列出文件的目录时,尽量使用内建宏来代替目录名,常用的内建宏如下所示:

    %{_sysconfdir}        /etc
    %{_prefix}            /usr
    %{_exec_prefix}       %{_prefix}
    %{_bindir}            %{_exec_prefix}/bin
    %{_lib}               lib (lib64 on 64bit systems)
    %{_libdir}            %{_exec_prefix}/%{_lib}
    %{_libexecdir}        %{_exec_prefix}/libexec
    %{_sbindir}           %{_exec_prefix}/sbin
    %{_sharedstatedir}    /var/lib
    %{_datadir}           %{_prefix}/share
    %{_includedir}        %{_prefix}/include
    %{_oldincludedir}     /usr/include
    %{_infodir}           /usr/share/info
    %{_mandir}            /usr/share/man
    %{_localstatedir}     /var
    %{_initddir}          %{_sysconfdir}/rc.d/init.d 
    %{_topdir}            %{getenv:HOME}/rpmbuild
    %{_builddir}          %{_topdir}/BUILD
    %{_rpmdir}            %{_topdir}/RPMS
    %{_sourcedir}         %{_topdir}/SOURCES
    %{_specdir}           %{_topdir}/SPECS
    %{_srcrpmdir}         %{_topdir}/SRPMS
    %{_buildrootdir}      %{_topdir}/BUILDROOT
    %{_var}               /var
    %{_tmppath}           %{_var}/tmp
    %{_usr}               /usr
    %{_usrsrc}            %{_usr}/src
    %{_docdir}            %{_datadir}/doc
    %{buildroot}          %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
    $RPM_BUILD_ROOT       %{buildroot}
    %clean阶段 - 完成后的一些清理工作

      主要是清理 %{_builddir}和%{_buildrootdir}两个目录里的中间文件

    %changelog阶段 -- 主要记录每次打包时的修改日志
    %changelog
    * Fri Aug  7 2020 - Your Name <youremail@xxx.xxx> - Release
    - Update log1
    * Fri Aug 7 2020 - Your Name <youremail@xxx.xxx> - Release
    - Update log2

    三、运行 RPMBUILD 命令完成打包

    在 SPEC 目录下执行 rpmbuild -xx xxx.spec 命令完成打包,rpmbuild 命令选项如下所示:

    #rpmbuild
    -bp 预处理
    -bc 编译
    -bi 编译并安装
    -bl 检验文件是否齐全
    -ba 编译后做成*.rpm和src.rpm
    -bb 编译后做成*.rpm
    -bs 只做成*.src.rpm

     

  • 相关阅读:
    【面试题】java基础(一)
    【java集合总结】-- ArrayList源码解析
    【java集合总结】-- 数组总结+自己封装数组类
    【MySQL高可用架构设计】(一)-- mysql复制功能介绍
    【Linux】-- 认识bash shell
    【ORM框架】Spring Data JPA(一)-- 入门
    【数据结构】-- 理解哈希表
    【spring】-- springboot配置全局异常处理器
    【spring】-- jsr303参数校验器
    【web安全】-- springboot实现两次MD5加密
  • 原文地址:https://www.cnblogs.com/huowenjie/p/13467750.html
Copyright © 2011-2022 走看看