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使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python