RPM包简介

  • RPM 全名 RedHat Package Managerment,一开始只是Red Hat Linux的软件包格式,它最初的名字为Red Hat软件包管理程序。从那以后,RPM逐渐称为许多其他Linux发行版所接受的一种软件包格式。Linux标准化规范将RPM作为其官方软件包格式。

RPM的主要优点

  • 使用广泛。许多Linux发行版至少都可以安装RPM软件包,或者将RPM作为它的标准软件包格式。
  • 能够只用一条命令来安装软件包。同样,删除或升级软件包也只需要一条命令。
  • 只需要处理一个文件。一个RPM软件包就保存在一个单独的文件中,这使得在不同系统之间传输软件包变得非常容易。
  • RPM自动处理软件包之间的依赖关系检查。RPM系统包含一个数据库,该数据库中记录了已安装的所有软件包的信息,包括每个软件包所提供的内容以及安装每个软件包的要求。
  • RPM软件包设计为由 “最干净” 的源代码而来,从而可以对它进行重新编译。RPM支持如patch这样的linux工具,可以在编译过程中为软件的源代码打上补丁。

RPM包目录结构

  • BUILD:rpmbuild命令在这个目录中建立软件
  • RPMS:制作完成后的RPM存放目录
  • SOURCES:存放应用程序源文件的目录
  • SPECS:存放SPEC文件的目录
  • SRPMS:rpmbuild命令将在这个目录中放置RPM源代码软件包
  • BUILDROOT:虚拟安装目录,在整个install的过程中临时安装到此目录,把这个目录当做根来使用。所有在这个目录下的文件才是真正的目录文件,最后SPEC文件中有清理阶段,这个目录下的内容将被删除。

SPEC文件介绍

  • RPM包的SPEC文件有许多配置信息,包含:软件基础信息、安装卸载前后执行的脚本、对源码包打补丁、解压、编译、安装等。
  • Name : 软件名称
  • Summary: 软件包的内容
  • Version: 软件版本号
  • Release: 发布序列号,为1表示第一次创建
  • Group: 软件分组,建议使用:Applications/System
  • License: 软件授权方式GPLv2
  • Source: 源码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用
  • BuildRoot: 这个是安装或编译时使用的临时目录,即模拟安装完以后生成的文件目录:%_topdir/BUILDROOT 后面可使用$RPM_BUILD_ROOT 方式引用。
  • URL: 软件的URI
  • Vendor: 打包组织或者人员
  • %description: 软件的详细说明
  • %define: 预定义的变量,例如定义日志路径: _logpath /var/log/weblog
  • %prep: 预备参数,通常为 %setup -q
  • %build: 编译参数 ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/……
  • %install: 安装步骤,此时需要指定安装路径,创建编译时自动生成目录,复制配置文件至所对应的目录中
  • %pre: 安装前需要做的任务,如:创建用户
  • %post: 安装后需要做的任务 如:自动启动的任务
  • %preun: 卸载前需要做的任务 如:停止任务
  • %postun: 卸载后需要做的任务 如:删除用户,删除/备份业务数据
  • %clean: 清除上次编译生成的临时文件,就是上文提到的虚拟目录
  • %files: 设置文件属性,包含编译文件需要生成的目录、文件以及分配所对应的权限

制作RPM包

  • 创建目录

    • 创建以下目录结构
      在这里插入图片描述
  • 制作spec文件。

    • 直接在SPECS下创建一个spec文件,无特殊需求可使用以下模板
    •   Name: smallwolf
        Version: 1.0.0
        Release: 1%{?dist}
        Summary: this is small gray wolf
        Buildroot: %{_tmppath}/%{name}-%{version}-root
        License: GPL
        URL: http://www.csdn.net
        Source0: %{name}-%{version}.tar.gz
        
        %description
        This package is small gray wolf
        
        %prep
        %setup -q
        
        
        %install
        rm -rf %{buildroot}
        mkdir -p %{buildroot}/opt/smallwolfres
        cp -r %{_builddir}/smallwolf-1.0.0/opt/smallwolfres/* %{buildroot}/opt/smallwolfres
        
        %post
        mkdir -p /opt/smallwolfres
        chmod 0755 /opt/smallwolfres
        
        %files
        /opt/smallwolfres
        
        %postun
        rm -rf /opt/smallwolf
        echo "clean /opt/smallwolf"
        
        
        %changelog
        * Wed Jul 4 2018 VBird Tsai <vbird@mail.vbird.idv.tw> 0.1
        - Build the program
      
      
  • 制作打包文件

    • 在SOURCES目录下压缩smallwolf-1.0.0目录
    •   tar -zcvf smallwolf-1.0.0.tar.gz smallwolf-1.0.0/
      
    • 拷贝 SOURCES/smallwolf-1.0.0.tar.gz到rpmbuild/BUILD下,在rpmbuild目录下执行
    •   rpmbuild --define "_topdir ${PWD}" -bb "${PWD}/SPECS/smallwolf.spec"
      
    • 执行完该命令,如果成功,会在rpmbuild/RPMS/x86_64目录下生成一个rpm后缀的安装包

RPM包安装和卸载

  • 安装
  • rpm -ivh smallwolf-1.0.0-1.el8.x86_64.rpm
  • 卸载
  • rpm -e --nodeps smallwolf
  • 解压rpm包
  • rpm2cpio smallwolf-1.0.0-1.el8.x86_64.rpm | cpio -ivdm
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐