RPM包详解以及如何制作RPM包
RPM 全名 RedHat Package Managerment,一开始只是Red Hat Linux的软件包格式,它最初的名字为Red Hat软件包管理程序。从那以后,RPM逐渐称为许多其他Linux发行版所接受的一种软件包格式。Linux标准化规范将RPM作为其官方软件包格式。
·
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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献30条内容
所有评论(0)