RPM打包软件流程

本文详细介绍了RPM(Redhat Package Manager)在Redhat系Linux中的使用,包括在中标麒麟等国产系统上的应用。通过helloworld程序,展示了RPM的打包流程,包括创建打包路径、编辑spec文件、执行打包命令。同时,列举了RPM的安装、查询、卸载等常用命令,帮助读者掌握RPM软件包管理的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RPM(Redhat Package Manager)是用于Redhat、CentOS、Fedora等Linux分发版(distribution)常见的软件包管理器。国产操作系统的中标麒麟同样使用RPM包管理工具。
本文以 hello world 程序为例,介绍RPM软件打包流程,最后总结常用的RPM包安装、查询、卸载等命令。

1. 环境准备

1.1 安装RPM打包工具

准备Linux环境,如CentOS。安装RPM打包工具rpmdevtools:

yum install rpmdevtools
1.2 创建RPM打包路径

RPM打包需要一个标准化的“工作空间”,在此空间下可以完成源码编译、打包、虚拟安装、清理等工作。创建标准化“工作空间”的命令为:

rpmdev-setuptree

执行完上述命令就可以在$HOME家目录下看到其创建的rpmbuild文件夹,文件夹下的目录结构为:
|-- rpmbuild
  |-- BUILD
  |-- BUILDROOT
  |-- RPMS
  |-- SOURCES
  |-- SPECS
  |-- SRPMS

文件夹说明:

目录用途macros中的宏
SOURCES存放源码包(如.tar.gz包)和patch补丁%_sourcedir
SPECS存放用于生成RPM包的配置文件(.spec)%_specdir
BUILD源码包的解压路径,并在该目录下进行编译%_builddir
BUILDROOT编译后生成的软件临时安装目录%_buildrootdir
RPMS存放生成的RPM包(以.rpm作为后缀)%_rpmdir
SRPMS存放生成的源码RPM包(以.src.rpm作为后缀)%_srcrpmdir

注:SPECS下包含RPM包的配置文件,通过.spec文件控制rpmbuild进行打包,其中的macros会按照一系列预定的规则替换一定的文本模式,macros宏文件的路径位于/usr/lib/rpm/macros中。

2. RPM打包流程

环境准备完成后,接下来以 hello world 为例,介绍如何通过源码编译的方式将其生成可执行文件并进行打包、安装、卸载。

2.1 SOURCE文件夹下准备源码/文件

在 SOURCE 文件加下创建文件夹 hello-1.0,这里的命名格式一般为 Name-Version ,在该文件夹下创建 hello.c 文件如下

/* Hello world program*/
#include <stdio.h>
int main() {
    printf("Hello, World\n");
    return 0;
}

在 SOURCE 文件夹下将 hello-1.0 文件夹打包为 .tar.gz 格式:
tar -zcvf hello-1.0.tar.gz hello-1.0/

2.2 SPEC文件夹下编辑spec文件

spec 的英文全称为 specification (规范,说明书),通过 spec 文件控制打包过程,spec 文件命名格式可以为 Name-Version.spec,直接通过 vi 创建 .spec 文件会直接出现待填充控制信息的模板,如果没有则需手动创建文件并填写内容。这里创建并填写的 hello.spec 文件如下:

Name: hello
Version: 1.0
Release: 1%{?dist}
Summary: This is Hello world rpm package.
Group: Application/Engineering
License: GPL
Source: %{name}-%{version}.tar.gz

%description
This is the hello world software!

%prep
%setup -q

%build
%define debug_package %{nil}
gcc -o hello hello.c

%install
mkdir -p %{buildroot}/usr/local/bin
install -m 755 hello %{buildroot}/usr/local/bin/hello

%clean

%files
/usr/local/bin/hello

%changelog
* Thu Oct 15 2020 WonderThink <your_email@email.com>
- Create hello rpm.

spec文件参数说明:

参数说明
Name软件包的名称
Version软件包的版本号
Release发布序列号,标明第几次打包
Summary软件包的内容摘要
License授权方式,如GPL、BSD等
Source源代码包,可以用Source1、Source2等表示多个源,用%{source1}、%{source2}引用
URL软件的主页
BuildArch目标处理器架构,不添加该参数则按本机默认配置,如果设置BuildArch: noarch表明该rpm包与架构无关
Group软件包所属类别(下表是具体类别)

Group软件包的标准分组具体类别有:

Group说明
Amusements/Games娱乐/游戏
Amusements/Graphics娱乐/图形
Applications/Archiving应用/文档
Applications/Communications应用/通讯
Applications/Databases应用/数据库
Applications/Editors应用/编辑器
Applications/Emulators应用/仿真器
Applications/Engineering应用/工程
Applications/File应用/文件
Applications/Internet应用/因特网
Applications/Multimedia应用/多媒体
Applications/Productivity应用/产品
Applications/Publishing应用/印刷
Applications/System应用/系统
Applications/Text应用/文本
Development/Debuggers开发/调试器
Development/Languages开发/语言
Development/Libraries开发/函数库
Development/System开发/系统
Development/Tools开发/工具
Documentation文档
System Environment/Base系统环境/基础
System Environment/Daemons系统环境/守护
System Environment/Kernel系统环境/内核
System Environment/Libraries系统环境/函数库
System Environment/Shells系统环境/接口
User Interface/Desktops用户界面/桌面
User Interface/X用户界面/X窗口
User Interface/X Hardware Support用户界面/X硬件支持

下面的是打包的具体阶段:

阶段描述
%prep预处理阶段,通常执行解开一些源程序包的命令
%setup把源码包解压并放好,%setup -q 在安静模式下且最少输出,通常是从/usr/src/asianux/SOURCES里的包解压到/usr/src/asianux/BUILD/%{name}-%{version}
%build编译源码,执行编译代码/脚本
%install把软件安装到虚拟的根目录中
%clean清除编译和安装时生成的临时文件
%preunrpm卸载前执行的脚本
%files用于定义构成软件包的文件列表,定义哪些文件或目录会放入rpm中,还可定义文件存取权限,拥有者及组别。
%changelog变更日志,格式为 * 星期月日 年 修改人 电子信箱,- 修改了什么地方。其中:星期、月份均用英文形式的前3个字母

执行rpmbuild -bb hello-1.0.spec,在SOURCE目录下生成了 rpm 安装包。

rpmbuild打包命令介绍

rpmbuild -bb xxx.spec		# 只生成二进制包(以.rpm为后缀)
rpmbuild -bs xxx.spec 		# 生成源码包(以.src.rpm为后缀)
rpmbuild -ba xxx.spec		# 生成源码包和二进制包

3. rpm安装、卸载等命令

安装:

rpm -i xxx.rpm		# 安装rpm包
rpm -iv xxx.rpm		# 安装rpm包,并在安装过程中显示正在安装的文件信息
rpm -ivh xxx.rpm	# 安装rpm包,并在安装过程中显示正在安装的文件信息及安装进度
rpm -Uvh xxx.rpm	# 升级rpm包

查询已安装的rpm包:

rpm -q	xxx			# 查询xxx安装包
附加查询命令:
-a, --all			查询所有安装的包
-l, --list			列出该包的文件
-i					展示包的信息,包括名字,版本及描述

卸载:

rpm -q xxx			# 查询待卸载的安装包名
rpm -e xxxxx		# 卸载xxxxx安装包

解包:

rpm2cpio xxx.rpm | cpio -idv	# 提取rpm包的内容

参考文献

  1. RPM官方文档
  2. rpm 打包及其命令
  3. CentOS下 rpm软件包的安装与卸载
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值