惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
WordPress大学
WordPress大学
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
D
Docker
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
U
Unit 42
M
MIT News - Artificial intelligence
B
Blog
GbyAI
GbyAI
C
Check Point Blog
P
Proofpoint News Feed
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
IT之家
IT之家
Google DeepMind News
Google DeepMind News
V
V2EX
Stack Overflow Blog
Stack Overflow Blog

lvbibir's Blog

shell | 磁盘空间分析脚本 Linux cat 和 tee 命令写入文件 python | 使用 uv 管理你的 python 环境 Claude Code 完整配置指南 windows | mihomo 内核独立部署指南 linux | 磁盘扩容 wsl | 释放长久运行占用的磁盘空间 mysql | 线程上限问题处理 麒麟 7.6 安装谷歌 OTP 认证模块 suse 12sp5 升级 openssh 及 openssl suse 12sp5 部署 mysql 5.7 《谁的青春不迷茫》 docker | centos7 部署 docker vim | 基础配置和使用 windows | rime 输入法 & 雾凇方案 shell | sshpass 批量传输文件及执行命令 wsl | 原生 linux 方式安装 docker nodejs | fnm + pnpm 开发环境配置 wsl | 安装配置 miniconda 虚拟环境 wsl | 自动更新系统代理 wsl | bashrc 环境变量不正确加载的处理方法 wsl | win10 安装 wsl2 troubleshooting | ssh 成功但是 scp 失败 linux | 常用命令总结 docker 部署 piclist shell | 检测网站存活并自动钉钉告警 Zabbix | 监控端口连通性并自动追踪 TCP 路由 windows | 自定义开机快速启动项 windows | miniconda 配置 python 虚拟环境 Zabbix | 监控主机到指定 ip 的流量大小
通过反编译修改 rpm 包内的文件
lvbibir · 2021-12-01 · via lvbibir's Blog

0 前言

本文参考以下链接:

要修改 rpm 包中的文件,对于自己编译的 rpm 包,只需要在源码中修改好然后重新编译即可。而对于并不是自己编译的 rpm 包,且不熟悉编译环境的情况下,可以使用 rpm-build 和 rpm-rebuild 工具反编译来修改 rpm 中的文件

这里使用 ceph-mgr 软件包进行演示

1 安装 rpm-build&rpmrebuild

rpmrebuild 官网 rpmrebuild 下载地址

解压 rpmrebuild

[root@localhost ~]# mkdir -p /data/rpmbuild
[root@localhost ~]# tar zxf rpmrebuild-2.15.tar.gz  -C /data/rpmbuild/
[root@localhost ~]# ll /opt/rpmrebuild/

rpm-build 直接使用 yum 安装即可

[root@localhost ~]# yum install -y rpm-build

2 反编译&修改&重新编译

安装准备重新打包的 rpm

[root@localhost ~]# rpm -ivh ceph-mgr-12.2.13-0.el7.x86_64.rpm

查看 rpm 的安装名称

[root@localhost ~]# rpm -qa |grep mgr
ceph-mgr-12.2.13-0.el7.x86_64

配置 rpm 编译目录

vim ~/.rpmmacros

%_topdir /data/rpmbuild

创建目录

mkdir  /data/rpmbuild/BUILDROOT
mkdir  /data/rpmbuild/SPECS

执行脚本

[root@localhost ~]# cd /data/rpmbuild/
[root@localhost rpmbuild]# ./rpmrebuild.sh -s SPECS/abc.spec ceph-mgr
[root@localhost rpmbuild]# cd

解压原版 RPM 包

[root@localhost ~]# rpm2cpio ceph-mgr-12.2.13-0.el7.x86_64.rpm |cpio -idv

这里软件包解压后是两个目录

image-20211206162209187

根据需求替换修改解压后的文件,这里我替换两个文件 /root/usr/lib64/ceph/mgr/dashboard/static/Ceph_Logo_Standard_RGB_White_120411_fa.png/root/usr/lib64/ceph/mgr/dashboard/static/cover-mini.png,并给原先的文件做一个备份

[root@localhost static]# mv cover-mini.png cover-mini.png.bak
[root@localhost static]# mv Ceph_Logo_Standard_RGB_White_120411_fa.png Ceph_Logo_Standard_RGB_White_120411_fa.png.bak
[root@localhost static]# cp kubernetes-logo.svg cover-mini.png
[root@localhost static]# cp kubernetes-logo.svg Ceph_Logo_Standard_RGB_White_120411_fa.png

修改 abc.spec 文件

找到原文件所在的行,添加备份文件

[root@localhost ~]# vim /data/rpmbuild/SPECS/abc.spec

image-20211206164745856

image-20211206164843805

这里创建的 bbb 目录是临时使用,编译过程肯定会报错,因为路径不对,根据报错修改路径

[root@localhost ~]# mkdir -p /data/rpmbuild/BUILDROOT/bbb/
[root@localhost ~]# mv ./usr/ /data/rpmbuild/BUILDROOT/bbb/
[root@localhost ~]# mv ./var/ /data/rpmbuild/BUILDROOT/bbb/
[root@localhost ~]# rpmbuild -ba /data/rpmbuild/SPECS/abc.spec

这里可以看到他请求的路径

image-20211206163921954

修改目录名

[root@localhost ~]# mv /data/rpmbuild/BUILDROOT/bbb/ /data/rpmbuild/BUILDROOT/ceph-mgr-12.2.13-0.el7.x86_64

再次编译

[root@localhost ~]# rpmbuild -ba /data/rpmbuild/SPECS/abc.spec

生成的 rpm 位置在/data/rpmbuild/RPMS/

image-20211206163618292

查看原 rpm 包的文件

[root@localhost ~]# cd /usr/lib64/ceph/mgr/dashboard/static
[root@localhost static]# ll
total 16
drwxr-xr-x 5 root root  117 Dec  6 03:11 AdminLTE-2.3.7
-rw-r--r-- 1 root root 4801 Jan 30  2020 Ceph_Logo_Standard_RGB_White_120411_fa.png
-rw-r--r-- 1 root root 1150 Jan 30  2020 favicon.ico
drwxr-xr-x 7 root root   94 Dec  6 03:11 libs
-rw-r--r-- 1 root root 1811 Jan 30  2020 cover-mini.png

安装新 rpm 包,查看文件

[root@localhost ~]# cd /data/rpmbuild/RPMS/x86_64
[root@localhost x86_64]# rpm -e --nodeps ceph-mgr
[root@localhost x86_64]# rpm -ivh ceph-mgr-12.2.13-0.el7.x86_64.rpm
[root@localhost x86_64]# cd /usr/lib64/ceph/mgr/dashboard/static
[root@localhost static]# ll
total 24
drwxr-xr-x 5 root root  117 Dec  6 03:53 AdminLTE-2.3.7
-rw-r--r-- 1 root root 1877 Dec  6 03:44 Ceph_Logo_Standard_RGB_White_120411_fa.png
-rw-r--r-- 1 root root 4801 Dec  6 03:41 Ceph_Logo_Standard_RGB_White_120411_fa.png.bak
-rw-r--r-- 1 root root 1150 Dec  6 03:41 favicon.ico
drwxr-xr-x 7 root root   94 Dec  6 03:53 libs
-rw-r--r-- 1 root root 1877 Dec  6 03:44 cover-mini.png
-rw-r--r-- 1 root root 1811 Dec  6 03:41 cover-mini.png.bak

至此,rpm 包中的文件修改以及重新打包的所有步骤都已完成

以上