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

相关文章

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

mac安装redis全过程

《mac安装redis全过程》文章内容主要介绍了如何从官网下载指定版本的Redis,以及如何在自定义目录下安装和启动Redis,还提到了如何修改Redis的密码和配置文件,以及使用RedisInsig... 目录MAC安装Redis安装启动redis 配置redis 常用命令总结mac安装redis官网下

如何安装 Ubuntu 24.04 LTS 桌面版或服务器? Ubuntu安装指南

《如何安装Ubuntu24.04LTS桌面版或服务器?Ubuntu安装指南》对于我们程序员来说,有一个好用的操作系统、好的编程环境也是很重要,如何安装Ubuntu24.04LTS桌面... Ubuntu 24.04 LTS,代号 Noble NumBAT,于 2024 年 4 月 25 日正式发布,引入了众

如何安装HWE内核? Ubuntu安装hwe内核解决硬件太新的问题

《如何安装HWE内核?Ubuntu安装hwe内核解决硬件太新的问题》今天的主角就是hwe内核(hardwareenablementkernel),一般安装的Ubuntu都是初始内核,不能很好地支... 对于追求系统稳定性,又想充分利用最新硬件特性的 Ubuntu 用户来说,HWEXBQgUbdlna(Har

python中poetry安装依赖

《python中poetry安装依赖》本文主要介绍了Poetry工具及其在Python项目中的安装和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前言1. 为什么pip install poetry 会造成依赖冲突1.1 全局环境依赖混淆:1

详解Java中如何使用JFreeChart生成甘特图

《详解Java中如何使用JFreeChart生成甘特图》甘特图是一种流行的项目管理工具,用于显示项目的进度和任务分配,在Java开发中,JFreeChart是一个强大的开源图表库,能够生成各种类型的图... 目录引言一、JFreeChart简介二、准备工作三、创建甘特图1. 定义数据集2. 创建甘特图3.

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

Linux下MySQL8.0.26安装教程

《Linux下MySQL8.0.26安装教程》文章详细介绍了如何在Linux系统上安装和配置MySQL,包括下载、解压、安装依赖、启动服务、获取默认密码、设置密码、支持远程登录以及创建表,感兴趣的朋友... 目录1.找到官网下载位置1.访问mysql存档2.下载社区版3.百度网盘中2.linux安装配置1.

Kibana的安装和配置全过程

《Kibana的安装和配置全过程》Kibana是一个开源的数据分析和可视化平台,它与Elasticsearch紧密集成,提供了一个直观的Web界面,使您可以快速地搜索、分析和可视化数据,在本文中,我们... 目录Kibana的安装和配置1.安装Java运行环境2.下载Kibana3.解压缩Kibana4.配

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现