通过源码包*.src.rpm定制开发rpm

2023-11-20

1. 基本流程

(1) 下载&安装相应的src.rpm包
wget xxx.src.rpm && rpm -ivh xxx.src.rpm
这里的“安装”是指把xxx.src.rpm中的tar.gz、patches、xxx.spec等文件分别输出到/usr/src/redhat/的SOURCES、SPECS等子目录中;

(2) 根据自己的需要修改

相关需求归纳:生成可编译版、打新补丁、使能/禁用某些功能、取消某些限制(如只能root用户才能使用等)。。。 。。。

   1)打新补丁:rpm -ivh xxx.src.rpm && 修改xxx.spec文件(在其中加入Patchnum: $new_patch_name.patch并在%prep中加入相应命令)
2)根据需求修改xxx.spec文件的相应字段;如在CFLAGS上加入-g参数以生成可调试版

如果没有相应的xxx.spec文件&&在发行商的网站上也没有相应的xxx.spec文件,可以通过rpmdev-newspec命令来生成一个spec文件的模板文件,然后根据实际情况编辑生成的spec文件。

(3) 重新生成rpm文件:rpmbuild -ba /usr/src/redhat/SPECS/xxx.spec
这时在/usr/src/redhat/RPMS/i386/下就生成了新的xxx.rpm文件。

(4)使用 Mock 和 Koji 去测试 RPM 包 from “Fedora新维护人员指南”,如果自己使用可略去此步。

参考:“file.src.rpm使用方法简单介绍” @ http://fedora.linuxsir.org/main/src.spec.html

2. 常用的rpm参数组合

(1)rpm -qx file_name, x={f,i,l,a,p...}, file_name可以是命令名、动态库名称、配置文件名等等。

使用此命令的前提:相应的rpm包已经安装。

rpm -qf file:查询文件file是哪个rpm包中的;rpm -qf `which your_cmd`, rpm -qf `locate file_name`

rpm -qi rpm_name:查看指定rpm包安装的详细信息;

rpm -ql installed_rpm_name:列出已经安装的rpm包中包含了哪些文件及他们的安装路径。如rpm -ql iptraf

用以下选项与 -q 连用来指明要查询哪些软件包的信息。这些选项被称之为“软件包指定选项”:
-a 查询所有已安装的软件包。
-f <file> 将查询包含有文件 <file>的软件包。
-p <packagefile> 查询软件包文件名为 <packagefile>的包。

有几种方式来指定查询软件包时所显示的信息。 以下选项可通过读取rpm包头部的办法显示rpm包的信息,这样的选项被称作“信息选择选项”:
-i 显示软件包信息,如描述、发行号、大小、编译日期、安装日期、硬件平台、以及其它一些各类信息。
-l 列出软件包中包含的文件。(列出已经安装的rpm包中包含了哪些文件及他们的安装路径)
-s 显示软件包中所有文件的状态。
-d 列出被标注为文档的文件 (如,man 手册、 info 信息、README,等等) 。
-c 列出被标注为配置文件的文件。这些文件是需要在安装完毕后加以定制的,如 (sendmail.cf, passwd, inittab, 等) 。

如果要在执行上述选项的同时,显示文件列表, 可以同时使用 -v 命令行选项,就能得出与 ls -l 格式类似的输出。

(2)查看未安装的rpm/src.rpm包中包含的文件列表

- 在本地暂时只能使用(4)中提供的方法;

- 通过rpmfind.net等网站进行查询;

(3)rpm -ivh xxx.rpm:重新安装;(和-Uvh相比,建议用-ivh)

rpm -ivh --relocate /=/tmp/test/ xxx.rpm

(4)rpm2cpio xxx.rpm/xxx.src.rpm:将rpm解压为cpio归档;

rpm2cpio xxx.rpm/xxx.src.rpm | cpio -idmv (rpm2cpio xxx.rpm | cpio --extract --make-directories)
参数-i(或--extract)表示提取文件; v表示指示执行进程;-d(或--make-directory)表示根据包中文件原来的路径建立目录;m表示保持文件的更新时间。

【3. 关于rpmbuild -bSTAGE语法的分析】

关于“打包”的说明

使用rpmbuild工具来发布rpm格式的源码包(xxx.src.rpm)或者二进制包(xxx.rpm)。如果已经根据本地源码包建立了spec文件(该文件要以.spec结束,可以用rpmdev-newspec生成spec文件模板)和rpm包构建环境(由 /usr/src/redhat/{BUILD,SOURCE,SPEC,SRPM,RPM}等5个目录组成的rpm构建环境,其中BUILD目录用来存 放打包过程中的源文件,SOURCE用来存放打包是要用到的源文件和patch,SPEC用来存放spec文件,SRPM、RPM分别存放打包生成的 rpm格式的源文件和二进制文件),就可以根据需要来选用不同的参数打包文件。下面总结了几种常见的打包参数组合:

1) 只生成二进制格式的rpm包:rpmbuild -bb xxx.spec。用此命令生成软件包,执行后屏幕将显示如下信息:(每行开头为行号)

1 Executing: %prep
2 + umask 022
3 + cd /usr/src/dist/BUILD
4 + exit 0
5 Executing: %build
6 + umask 022
7 + cd /usr/src/dist/BUILD
生成的文件会输出到RPM目录下。

2)只生成src格式的rpm包:rpmbuild -bs xxx.spec。生成的文件会在刚才建立的SRPM目录下存在。

3) 只需要生成完整的源文件:rpmbuild -bp xxx.spec。源文件存在目录BUILD下,生成相应rpm包后,BUILD下的源文件不会被自动删除。这个命令的作用就是把tar包解开然后把所有的补丁文件合并而生成一个完整的具最新功能的源文件。

4) 完全打包:rpmbuild -ba xxx.spec

5)from rpmbuild's manpage

-ba:"build binary and source packages (after doing the %perp, %build and %install stages)";

-bp:"execute the %prep stage from the spec file. Normally this involves unpacking the sources and applying any patches.";

rpmbuild常用参数: -bb 只编译二进制rpm包 -bs 只编译源码rpm包(src.rpm) -ba 同时编译二进制和源码rpm包(src.rpm) -bp解开tar包然后把所有的补丁文件合并而生成一个完整的具最新功能的源文件

b=build(-b); a=after, p=prep, s=source, b=binary;

参考:

(1)“RPM 打包技术与典型 SPEC 文件分析”一.4打包 @ http://www.ibm.com/developerworks/cn/linux/l-rpm/?S_TACT=105AGX52&S_CMP=tech-51CTO

(2)“Fedora新维护人员指南” fedoraproject.org/wiki/Zh/Fedora新维护人员指南

4. Use alien to convert RPM to Deb or Deb2RPM

========================= 附录:RPM命令手册 ===========================

一、安装

命令格式: rpm -i ( or --install) options file1.rpm ... fileN.rpm

参数: file1.rpm ... fileN.rpm 将要安装的RPM包的文件名

详细选项:

-h (or --hash) 安装时输出hash记号 (``#'')
--test 只对安装进行测试,并不实际安装
--percent 以百分比的形式输出安装的进度
--excludedocs 不安装软件包中的文档文件
--includedocs 安装文档
--replacepkgs 强制重新安装已经安装的软件包
--replacefiles 替换属于其它软件包的文件
--force 忽略软件包及文件的冲突
--noscripts 不运行预安装和后安装脚本(spec文件中的%prep和%clean部分的脚本)
--prefix 将软件包安装到由 指定的路径下 (已验证:仅限于二进制rpm安装包,不支持src.rpm)
--ignorearch 不校验软件包的结构
--ignoreos 不检查软件包运行的操作系统
--nodeps 不检查依赖性关系
--ftpproxy 用 作为 FTP代理(直接安装远程的rpm包,而非先下载到本地再安装)
--ftpport 指定FTP的端口号为

通用选项:

-v 显示附加信息
-vv 显示调试信息
--root 让RPM将指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为

二、删除

命令格式: rpm -e ( or --erase) options pkg1 ... pkgN

参数:pkg1 ... pkgN :要删除的软件包

详细选项:

--test 只执行删除的测试
--noscripts 不运行预安装和后安装脚本程序
--nodeps 不检查依赖性

通用选项:

-vv 显示调试信息
--root 让RPM将指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为

三、升级

命令格式:rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm

参数:file1.rpm ... fileN.rpm 软件包的名字

详细选项:

-h (or --hash) 安装时输出hash记号 (``#'')
--oldpackage 允许"升级"到一个老版本
--test 只进行升级测试
--excludedocs 不安装软件包中的文档文件
--includedocs 安装文档
--replacepkgs 强制重新安装已经安装的软件包
--replacefiles 替换属于其它软件包的文件
--force 忽略软件包及文件的冲突
--percent 以百分比的形式输出安装的进度。
--noscripts 不运行预安装和后安装脚本
--prefix 将软件包安装到由 指定的路径下
--ignorearch 不校验软件包的结构
--ignoreos 不检查软件包运行的操作系统
--nodeps 不检查依赖性关系
--ftpproxy 用 作为 FTP代理
--ftpport 指定FTP的端口号为

通用选项:

-v 显示附加信息
-vv 显示调试信息
--root 让RPM将指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为

四、查询

命令格式:rpm -q ( or --query) options

参数: pkg1 ... pkgN :查询已安装的软件包

详细选项:

-p (or ``-'') 查询软件包的文件
-f 查询属于哪个软件包
-a 查询所有安装的软件包
--whatprovides 查询提供了 功能的软件包
-g 查询属于 组的软件包
--whatrequires 查询所有需要 功能的软件包

信息选项:

显示软件包的全部标识
-i 显示软件包的概要信息
-l 显示软件包中的文件列表
-c 显示配置文件列表
-d 显示文档文件列表
-s 显示软件包中文件列表并显示每个文件的状态
--scripts 显示安装、卸载、校验脚本
--queryformat (or --qf) 以用户指定的方式显示查询信息
--dump 显示每个文件的所有已校验信息
--provides 显示软件包提供的功能
--requires (or -R) 显示软件包所需的功能

通用选项:

-v 显示附加信息
-vv 显示调试信息
--root 让RPM将指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为

五、校验已安装的软件包

命令格式: rpm -V ( or --verify, or -y) options

参数:pkg1 ... pkgN 将要校验的软件包名

软件包选项:

-p Verify against package file
-f 校验所属的软件包
-a Verify 校验所有的软件包
-g 校验所有属于组 的软件包

详细选项:

--noscripts 不运行校验脚本
--nodeps 不校验依赖性
--nofiles 不校验文件属性

通用选项:

-v 显示附加信息
-vv 显示调试信息
--root 让RPM将指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下
--rcfile 设置rpmrc文件为
--dbpath 设置RPM 资料库存所在的路径为

六、校验软件包中的文件

语法: rpm -K ( or --checksig) options file1.rpm ... fileN.rpm

参数: file1.rpm ... fileN.rpm 软件包的文件名

Checksig--详细选项

--nopgp 不校验PGP签名

通用选项:

-v 显示附加信息
-vv 显示调试信息
--rcfile 设置rpmrc文件为


七、其它RPM选项

--rebuilddb 重建RPM资料库
--initdb 创建一个新的RPM资料库
--quiet 尽可能的减少输出
--help 显示帮助文件
--version 显示RPM的当前版本

转载于:https://my.oschina.net/qihh/blog/63037

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过源码包*.src.rpm定制开发rpm 的相关文章

  • plsql更改用户登录密码

    ORACLE数据库系统是美国ORACLE公司 甲骨文 提供的以分布式数据库为核心的一组软件产品 是目前最流行的客户 服务器 CLIENT SERVER 或B S体系结构的数据库之一 比如SilverStream就是基于数据库的一种中间件 O
  • texlive支持中文的简单方法

    1 确保tex文件的编码方式是UTF 8 2 在文档开始处添加一行命令即可 即 usepackage UTF8 ctex 如下所示 documentclass article usepackage UTF8 ctex begin artic
  • System.getProperty用法

    转自 http blog darkmi com 2011 03 16 1666 html System getProperty 用于获取当前的系统属性 比如java版本 操作系统名称 区域 用户名等 这些属性一般由jvm自动获取 不能手工设
  • 线程和进程的区别(面试必备)

    参考文章 https www jianshu com p 2dc01727be45 线程与进程的区别通俗的解释 https www jianshu com p 8ad441510860 附加可参考文章 https baijiahao bai
  • windows下命令行修改系统时间;修改系统时间的软件

    找了很久 都没有找到 还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片 而我由于某些原因想自动化修改系统时间 所以找windows下修改系统时间的软件 没有找到 有一个 意天禁止修改系
  • redis主从同步,总是显示master_link_status:down的解决方法

    前几天 在修改一台从节点的redis的监听端口后 重启了下redis 发现master link status 很长时间一直都是down状态 查看了redis日志 发现日志里出现很多的 I O error trying to sync wi
  • 计算机领域中随处可见的抽象

    想要管理多种具体的东西 那么需要遵守每种东西的规范 如果想要提供一种通用模式来对这些具体的东西统一管理 需要使用一种古老的技术 抽象 抽象是将多种具体的东西 管理时需要遵守的规范 的共同点抽取出来 放入到更高一层的抽象层 在抽象层不定义或少
  • 掉电无法启动数据库问题解决

    由于突然掉电 造成客户在windows平台上10 2 0 1数据库无法驱动 以下是具体解决步骤 一 定位故障问题 1 启动数据库 查看错误 SQL gt startup ora 01113 file 1 needs media recove
  • RTX线程通信之——线程标志

    文章目录 Thread Flags 概念 RTX线程标志API 案例 LED灯同步闪亮 小结 参考资料 Thread Flags In a real application we need to be able to communicate
  • Client-Server问题

    1 实验内容与要求 需要创建客户Client和服务器Server两个进程 它们通过管道进行通信 Client进程派生3个生产者线程 一个管道线程 共享一个20个slots的缓冲区 每个生产者线程随机产生一个数据 打印出来自己的id 进程 线
  • Linux 磁盘与文件系统管理(鸟哥私房菜)

    本文来自 http vbird dic ksu edu tw linux basic 0230filesystem php 第八章 Linux 磁盘与文件系统管理 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统 每个分割槽不可太大也
  • office2013 excel 打开时提示excel词典xllex.dll文件丢失或损坏

    今天打开Excel时 发现报错 xllex dll文件丢失或损坏 我用的是office2013 网上找了好多都是2007的dll文件 导入不了 于是乎重装office 问题解决 但还是把xllex dll烤出来做个备份吧 参考下面步骤即可
  • 深入ftrace kprobe原理解析

    Linux krpobe调试技术是内核开发者专门为了编译跟踪内核函数执行状态所涉及的一种轻量级内核调试技术 利用kprobe技术 内核开发人员可以在内核的绝大多数指定函数中动态插入探测点来收集所需的调试状态信息而基本不影响内核原有的执行流程
  • 03LinuxC线程学习之线程共享和非共享

    1 线程共享和非共享 1 1 线程共享资源 1 文件描述符表 由于线程间共享进程间的内容 而文件描述符表在主线程的PCB当中 各个线程可以直接去请求访问 所以线程间通信就不需要像进程那样通过管道这些方式通信 2 每种信号的处理方式 即当某个
  • Linux学习--CentOS7.5

    CentOS7命令大全 Linux系统简介 Unix Linux发展史 Linux目录结构 树形结构 查看 切换以及创建目录 文本内容操作 grep工具 关机和重启 Linux命令 基本用法 ls list 使用通配符 mkdir 别名 g
  • [架构之路-185]-《软考-系统分析师》-3-操作系统基本原理 - 文件索引表

    目录 一 文件的索引块 二 索引分配表 三 索引表的链接方案 四 多层索引 五 混合索引分配 一 文件的索引块 存放在目录中的文件 并非是文件的真实内容 目录中记录了文件的索引块是几号磁盘块 文件对应的索引表是存放在指定的磁盘块中的 二 索
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • java IO、NIO、AIO详解

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 IO流 同步 阻塞 二 NIO 同步 非阻塞 三 NIO2 异步 非阻塞 正文 回到顶部 概述 在我们学习Java的IO流之前 我们都要了解几个关键词 同步与异步 sy
  • C#实现FTP文件夹下载功能【转载】

    网上有很多FTP单个文件下载的方法 前段时间需要用到一个FTP文件夹下载的功能 于是找了下网上的相关资料结合MSDN实现了一段FTP文件夹下载的代码 实现的思路主要是通过遍历获得文件夹下的所有文件 当然 文件夹下可能仍然存在文件夹 这样就需
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位

随机推荐

  • MySQL服务无法自启动

    出现问题 之前由于电脑C盘空间不足 我重装了MySQL 但重装后发现MySQL的服务无法开机自启动 每次都需要手动开启服务 系统 Win10家庭版 MySQL 8 0 23 检查 首先查看服务 MySQL80服务的启动类型确定是设置为自动
  • SpringBoot中的双数据源配置

    1 引入使用的数据源类型 mysql oracle sqlserver等 依赖 本文配置为oracel和postgresql
  • Linux ubuntu系统修改终端的设备名称

    创建系统设备名称时默认的太长了吧 终端窗口就那么一点点 改掉改掉 第一步 sudo vi etc hostname 跳出窗口 修改红框中名称即可 改完后 用 wq 保存退出 tips 按a可以从光标后开始输入内容 第二步 sudo vi e
  • Python3面向对象编程总结

    自学笔记 逻辑可能比较混乱 想到哪说到哪 可能存在不少的问题欢迎指出 创建一个类 最简单的一个类 在python中类的命名必须以字母或者下画线开头 并且只能包含字母 下画线和数字 另外推荐使用驼峰命名方式 大写字母开头 随后的任意一个单词都
  • BSC(币安智能链)主网链部署

    文章目录 一 BSC主链镜像生成 二 BSC主链容器生成 2 1 下载BSC主网配置文件 2 2 新建初始化创始区块文件脚本 2 3 本地写入创世状态 2 4 新建BSC链启动脚本 2 5 启动BSC主网链 三 查看BSC服务是否部署成功
  • 力扣hot100刷题记录

    二刷hot100 坚持每天打卡3道题 Today 2023 09 08 1 两数之和 先求差 再查哈希表 public int twoSum int nums int target Map
  • 计算机视觉笔记及资料整理(含图像分割、目标检测)

    前言 1 简单聊聊 在我脑海中我能通过这些年听到的技术名词来感受到技术的更新及趋势 这种技术发展有时候我觉得连关注的脚步都赶不上 简单回顾看看 从我能听到的技术名词来感受 最开始耳闻比较多 云计算 这玩意 后来听到比较多的是 数据挖掘 然而
  • osgEarth的Rex引擎原理分析(十四)分页瓦片加载器子节点的作用

    目标 十二 中的问题21 在rex引擎的setMap中创建了分页瓦片加载器子节点 osgEarthDrivers engine rex RexTerrainEngineNode cpp void RexTerrainEngineNode s
  • 完美解决:由于找不到MSVR100.dll ,无法继续执行代码

    当我们在运行某一个软件时 突然提示找不到MSVCR100 dll 我相信有不少用户都遇到过这种情况 并且在重新安装软件后还是无法解决 那么电脑提示找不到MSVCR100 dll该怎办呢 MSVCR100 dll是什么 在解决找不到MSVCR
  • 【Spring Boot】WebSocket 的 6 种集成方式

    介绍 由于前段时间我实现了一个库 Spring Cloud 一个配置注解实现 WebSocket 集群方案 以至于我对WebSocket的各种集成方式做了一些研究 目前我所了解到的就是下面这些了 就一个破ws都有这么多花里胡哨的集成方式了
  • Linux 中的$* $@特殊变量介绍

    1 代表输入的所有参数 但是看做一个整体 代表输入的所有参数 但是每个区分对待 PS 当 不被双引号括起来的时候 都以 1 2 n的形式输出所有参数 也就是说 当你使用这两个特殊变量的时候 如果不适用双引号括起来 这两个特殊变量的功能就没有
  • Linux alien命令

    一 简介 alien是一个用于在各种不同的Linux包格式相互转换的工具 其最常见的用法是将 rpm转换成 deb 或者反过来 二 安装 http toutiao com a6188997768449360129 三 实例 http www
  • sqlmap参数详解

    命令及详解 h 帮助 version 版本号 d 连接数据库 mysql root root 192 168 3 20 3306 db 数据库种类 账号 密码 地址 端口 库 current db 当前数据库 dbs 列出所有数据库 等于s
  • 软件测试是干什么的 1分钟带你快速了解清楚软测的工作性质

    近几年 国内软件测试行业迅猛发展 不少行外人都能经常听到某某软件测试岗位在高薪招聘消息 等 所以很多不了解情况的人就想要问了 软件测试到底是干什么的 什么样的人才能够当软件测试员 关于大家关心这两个问题 小编特做了如下回答 软件测试是干什么
  • Selenium RemoteWebDriver使用—让你的代码与测试分离(远程测试)

    目录 一 写在前面 二 RemoteWebDriver基本使用 2 1 配置环境 2 2 配置环境命令 2 3 代码示例 三 扩展使用 3 1 浏览器版本和平台参数 3 2 浏览器启动相关参数 一 写在前面 在学习Selenium基础的时候
  • 【实践篇】领域驱动设计:DDD工程参考架构

    背景 为什么要制定参考工程架构 不同团队落地DDD所采取的应用架构风格可能不同 并没有统一的 标准的DDD工程架构 有些团队可能遵循经典的DDD四层架构 或改进的DDD四层架构 有些团队可能综合考虑分层架构 整洁架构 六边形架构等多种架构风
  • Python 常用基础模块(四):sys模块

    目录 一 sys模块介绍 1 1 什么是 Python 解释器 说明 1 2 sys 模块的作用 二 常用方法及属性介绍 2 1 modules属性 将模块名称映射到已加载模块的字典 2 2 getdefaultencoding 方法 获取
  • YOGA 14s开机黑屏——试试提高亮度

    联想yoga 14s 开始动画是有的 但开机动画后就黑屏了 折腾了半天 按下亮度增大键后屏幕亮了 好像联想笔记本比较支持亮度最低即为0
  • 一周简报(项目尾声)

    XX海油项目已经进入尾声 大部分的工作都已经完成 目前我们所做的就是完善系统中的Bug 以及面对客户提出的某些部分的需求变更 由于形式所迫 我们的战斗由 城市 转入 农村 由 地上 转入 地下 由 阵地战 转为 游击战 我们当前的任务是以客
  • 通过源码包*.src.rpm定制开发rpm

    为什么80 的码农都做不了架构师 gt gt gt 1 基本流程 1 下载 安装相应的src rpm包 wget xxx src rpm rpm ivh xxx src rpm 这里的 安装 是指把xxx src rpm中的tar gz p