• rpm打包


    rpm打包

    1. rpm打包步骤

    0)准备工作:安装打包工具rpm-build和rpmdevtools

    (1)在线安装
    yum install rpm-build -y
    yum install rpmdevtools -y
    
    • 1
    • 2

    [释]: 打包主要用rpm-build,而rpmdevtools工具包里面自带的命令rpmdev-setuptree可以用于快速创建结构目录,比手动创建更快。
    [注]: 如果yum下载不了,可参考我的另一篇博文 https://blog.csdn.net/Acegem/article/details/132555841?spm=1001.2014.3001.5501

    (2)离线安装

    到官网将离线包下载好。
    Centos:https://pkgs.org
    麒麟V10:https://update.cs2c.com.cn/NS/V10/V10SP1/os/adv/lic/base/aarch64/Packages/
    将 rpm-build.rpm 和 rpmdevtools.rpm下载下来后,安装的时候如果报错缺失依赖,看情况可以考虑用命令忽略依赖强制安装:

    rpm -ivh rpm-build.rpm --nodeps --force
    rpm -ivh rpmdevtools --nodeps --force
    
    • 1
    • 2

    1)创建初始化目录

    首先要在当前用户的 {$HOME} 下创建目录:rpmbuild,再在该目录下创建目录:BUILD、RPMS、SOURCES、SPECS、SRPMS
    整个过程可以借助 rpmdev-setuptree 快速实现。如下:

    cd # 到主目录下
    rpmdev-setuptree # 创建初始化目录
    
    • 1
    • 2

    结果:
    在这里插入图片描述
    [注]: 默认创建位置是 {$HOME},如果想更改位置,可修改 ~/.rpmmacros 配置。配置默认初始内容:

    在这里插入图片描述

    2)准备打包内容

    将要打包的内容放到 ~/rpmbuild/SOURCES 目录下。
    例:
    在这里插入图片描述

    3)编写打包脚本 spec文件

    cd ~/rpmbuild/SPECS
    touch mytool.spec
    
    • 1
    • 2

    mytool.spec 内容如下:

    Name: mytool   # 软件名称
    Version: 1.0   # 软件版本
    Release: 0%{?dist}   # RPM版本,发布序列号,用来标明第几次打包
    Summary: MyTool Master installer    # 描述
    # Group: test    # 软件组。建议使用 Application/System
    License: GPLv3+   # 协议
    AutoReqProv: no  # 忽略依赖。简单粗暴,依个人习惯。
    # 例:有时rpm -ivh安装时报错某依赖找不到,可能是打包的时候就找不到依赖包。这个语句可以使得忽略依赖关系。功能类似于:rpm -ivh 软件名 --nodeps
    
    BuildRoot: %(mktemp -ud %{_tempath}/%{name}-%{version}-%{release}-XXXXXX)    # 临时编译目录
    
    # 详细描述
    %description -l zh_CN
    "The mytool for test"
    
    # 安装前准备
    %prep
    echo "do not"
    
    # 安装
    %install
    cd %{_sourcedir}    # ~/rpmbuild/SOURCE
    cp -ra * %{buildroot}  # 将 ~/rpmbuild/SOURCE 下的内容全都复制到 ~/rpmbuild/BUILDROOT
    
    # 定义打包文件列表
    %files
    /usr/local/MQ
    /opt/QQ
    
    # 卸载后执行的指令
    %postun
    rm -rf /usr/local/MQ
    rm -rf /opt/QQ
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    附:
    spec常用参数

    # 自定义宏
    %define Name MyTool
    %define Version 1.0
    
    # 软件包
    Name: %{Name}  # 引用宏
    Version: %{Version}  # 引用宏
    Release: 1%{?dist}  # 引用宏(自带宏)
    Summary: 一段软件简概  # 简单描述
    License:  GPLv3+  # 协议
    URL: 地址
    buildroot: %{_topdir}/BUILDROOT  # 生成车间,即编译根目录。
    Source0: %{Name}-%{Version}.tar.gz  # 指定源码编译的文件,默认路径:%{_topdir}/SOURCES
    SOURCE1:  支持多个
    BuildRequires: gcc, make, automake, binutils  # 软件依赖信息
    Requires: bash >=2.0  # 软件依赖, >= 或 <= 表大于或小于特定版本
    
    # 详细描述
    %description -l zh_CN   # 其中 -l zh_CN是参数,可省略
    这是一段软件的详细描述
    
    # 安装前。如:执行脚本
    %pre
    useradd %{Name} -s /sbin/nologin
    
    # 安装前。默认将Source目录内源码包解压到BUILD目录,并在其目录下创建 %{Name}-%{Version}目录。
    %prep
    %setup -q -n %{Name}-%{Version}
    
    # 编译
    %build
    自定义命令
    
    # 安装
    %install
    自定义命令
    
    # 文件
    %files
    
    # 清理制作时产生的缓存
    %clean
    rm -rf %{buildroot}
    
    # 安装后。
    %post
    自定义命令
    
    # 卸载前。
    %preun
    自定义命令
    
    # 卸载后
    %postun
    自定义命令
    
    # 日志
    %changelog
    自定义命令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    代表路径的宏列表

    %{_sysconfdir}        /etc
    %{_prefix}            /usr
    %{_exec_prefix}       %{_prefix}
    %{_bindir}            %{_exec_prefix}/bin
    %{_libdir}            %{_exec_prefix}/%{_lib}
    %{_libexecdir}        %{_exec_prefix}/libexec
    %{_sbindir}           %{_exec_prefix}/sbin
    %{_sharedstatedir}    /var/lib
    %{_datarootdir}       %{_prefix}/share
    %{_datadir}           %{_datarootdir}
    %{_includedir}        %{_prefix}/include
    %{_infodir}           /usr/share/info
    %{_mandir}            /usr/share/man
    %{_localstatedir}     /var
    %{_initddir}          %{_sysconfdir}/rc.d/init.d
    %{_var}               /var
    %{_tmppath}           %{_var}/tmp
    %{_usr}               /usr
    %{_usrsrc}            %{_usr}/src
    %{_lib}               lib (lib64 on 64bit multilib systems)
    %{_docdir}            %{_datadir}/doc
    %{buildroot}          %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
    $RPM_BUILD_ROOT       %{buildroot}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4)打包

    cd ~/rpmbuild/SPECS/
    rpmbuild -bb mytool.spec
    
    • 1
    • 2

    未报错的日志结尾会出现 exit 0,具体信息如下:
    在这里插入图片描述此时,会在 ~/rpmbuild/RPMS/ 目录下生成 rpm 包文件。如下:
    在这里插入图片描述
    注: 可输入

    rpm -qpl mytool-1.0-0.ky10.ky10.x86_64.rpm
    
    • 1

    来查看rpm包的内容:
    在这里插入图片描述
    说明包是没问题的。

    5)安装

    rpm -ivh mytool-1.0-0.ky10.ky10.x86_64.rpm
    
    • 1

    在这里插入图片描述

    可看到rpm包中的MQ和QQ被成功安装在了 /usr/local 和 /opt 下。
    在这里插入图片描述
    附:

    # 查找软件的安装路径
    rpm -ql 软件名
    # 查找软件的相关信息
    rpm -qi 软件名
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    2. 拓展

    1)忽略代码错误进行打包

    一般,如果被打包的内容存在代码错误,会导致打包失败。如有的python代码存在错误时也能运行,如果要忽略代码错误打包。可以在 .spec 文件前加上如下参数:

    %global _enable_debug_package 0
    %global debug_package %{nil}
    %global __os_install_post /usr/lib/rpm/brp-compress %{nil}
    
    • 1
    • 2
    • 3
  • 相关阅读:
    Python+playwright 实现Web UI自动化
    嵌入式驱动初级-阻塞与非阻塞
    MySQL单表查询和多表查询
    尚硅谷SpringMVC (1-4)
    Linux常用指令和选项(一)
    程序员是职业病高发群体,别天真的以为只有秃头那么简单,才不是呢。
    【算法面试题汇总】LeetBook列表的算法面试题汇总---动态规划题目及答案
    docker容器添加对外映射端口
    Linux高负载排查最佳实践
    【Hadoop】7、HBase组件配置
  • 原文地址:https://blog.csdn.net/Acegem/article/details/132596065