rpmbuild,编译、安装、修改、生成patch

2024-01-01 08:38

本文主要是介绍rpmbuild,编译、安装、修改、生成patch,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文件结构

*.patch从原始源码版本升级至当前源码版本所需要的所有补丁(patch)
helloworld.tar.gz原始源码包
LICENSE版权许可证
README.md使用文档
helloworld.spec将当前源码编译为二进制包所需的spec文件

构建rpm包并运行

  1. 确保已安装rpm-buildgcc-c++
dnf install rpm-build
dnf install gcc-c++
  1. helloworld.tat.gz和所有patch文件放到/root/rpmbuild/SOURCES目录下
  2. helloworld.spec放到/root/rpmbuild/SPECS目录下
  3. root用户执行
    rpmbuild -ba /root/rpmbuild/SPECS/helloworld.spec
    这一步将在/root/rpmbuild/BUILD目录下生成源码src,其中包含a.cpp

相关选项:-babuild all-bp准备,解压与打补丁。

  1. 还会根据spec文件自动生成源码包(.src.rpm) 和二进制包。最后会有两个write to指明包所在的目录。生成SPRMS目录,存储src.rpm包;RPMS存储x86_64.rpm包。
    writeto

  2. 安装二进制包rpm -ivh /root/rpmbuild/RPMS/x86_64/helloworld-1-0.fc31.x86_64.rpm

  3. 找到安装目录
    rpm -ql helloworld-1-0.fc31.x86_64
    find

  4. 运行
    /bin/helloworld
    run

现在可以运行程序、查看源码。

修改源码

注意在修改源码之前要先提交一次初始状态。

  1. /root/rpmbuild/BUILD目录下,找到源码那一层,初始化git仓库:
    git init

如果没有采用rpmbuild来构建rpm包运行程序,而是通过自己make编译,那么需要在初始化git仓库之后按照顺序把patch依次打到源码上,再提交初始状态。rpmbuild会自动完成打patch操作。

  1. 将初始状态提交,这样修改之后可以根据这次提交来做patch
git add -A
git commit -m "Package init"

修改前
修改源码……
3. 注意如果使用make,要在修改源码后立即提交,再用make进行编译,否则会将编译出来的二进制包全部作为更新来提交。

基于修改后的提交生成新patch

修改源码后,进行提交,根据提交生成patch

git add -A
git commit -m "[对本次修改的简短介绍]"
git format-patch HEAD^

注:git format-patch HEAD^ 本义为生成上一个改动至今的patch, 若想生成多个改动前至今的patch可以使用命令 git format-patch [commit号]

修改后

修改spec文件中的相关说明

  1. release版本号+1
  2. 添加Patch 000x: patch_name
  3. 添加changelog,格式示例:
%changelog
* Wed Feb 19 2020 fuchangjie <changjie.fu@cs2c.com.cn> - 1.0.0-2
- Add a.cpp to say hello world* Sat Dec 21 2019 user.name <user.name@example.com> - 1.0.0-1
- Package init

完成!

附:

应用patch

由于tar.gz内是初始源码,没有应用过任何patch,所以运行前需要将其解压后,在解压目录下挨个应用patch
git am 0001-add-something.patch
如果出现报错:
Patch format detection failed
则使用git apply来应用patch

这篇关于rpmbuild,编译、安装、修改、生成patch的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/558700

相关文章

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

MySQL底层文件的查看和修改方法

《MySQL底层文件的查看和修改方法》MySQL底层文件分为文本类(可安全查看/修改)和二进制类(禁止手动操作),以下按「查看方法、修改方法、风险管控三部分详细说明,所有操作均以Linux环境为例,需... 目录引言一、mysql 底层文件的查看方法1. 先定位核心文件路径(基础前提)2. 文本类文件(可直

windows下安装Nginx全过程

《windows下安装Nginx全过程》文章介绍了HTTP和反向代理服务器的概念,包括正向代理和反向代理的区别,并详细描述了如何安装和配置Nginx作为反向代理服务器... 目录概念代理正向代理反向代理安装基本属性nginx.conf查询结构属性使用运行重启停止总结概念是一个高性能的HTTP和反向代理we

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

SpringBoot集成iText快速生成PDF教程

《SpringBoot集成iText快速生成PDF教程》本文介绍了如何在SpringBoot项目中集成iText9.4.0生成PDF文档,包括新特性的介绍、环境准备、Service层实现、Contro... 目录SpringBoot集成iText 9.4.0生成PDF一、iText 9新特性与架构变革二、环

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

idea-java序列化serialversionUID自动生成方式

《idea-java序列化serialversionUID自动生成方式》Java的Serializable接口用于实现对象的序列化和反序列化,通过将对象转换为字节流来存储或传输,实现Serializa... 目录简介实现序列化serialVersionUID配置使用总结简介Java.io.Seripyth

kingbase修改权限实现方式

《kingbase修改权限实现方式》该文章详细介绍了如何在数据库中创建用户并赋予其相应的权限,包括创建用户、回收默认权限、创建数据库、赋权数据库权限、创建只读用户以及回收权限等步骤... 目录前言使用步骤总结前言创建用户后对数据库对象的读写权限进行修改使用步骤1、创建用户create user cs