rpmbuild反编译软件

481人浏览 / 0人评论

注:如果用户目录下没有目录 请创建目录

mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

 

 

一、提取sepc文件

1、将sepc文件保存到本地

rpmrebuild --package --notest-install --spec-only=rsyslog.spec rsyslog-8.24.0-12.el7.x86_64.rpm

 

2、直接打包sepc文件

rpmrebuild -e -p rsyslog-8.24.0-12.el7.x86_64.rpm

 

二、将spec文件放入到指定目录中

cp -rp rsyslog.spec ~/rpmbuild/SPECS

 

三、解压原src rpm包

cd ~/rpmbuild/BUILDROOT/

cp -rf rsyslog-8.24.0-12.el7.x86_64.rpm .

mkdir rsyslog-8.24.0-12.el7.x86_64

 

解压

cd rsyslog-8.24.0-12.el7.x86_64

rpm2cpio *.rpm | cpio -idv

cd .. && rm -rf rsyslog-8.24.0-12.el7.x86_64.rpm

 

四、重新构建rpm包

rpmbuild -ba rsyslog.spec

 

重新生成的RPM包在~/rpmbuild/RPMS/

 

五、rpmbuild目录简介

BUILD:源代码解压以后放的位置,只需提供BUILD目录,具体里面放什么,不用我们管,所以真正的制作车间是BUILD目录。

BUILDROOT:假根,使用install临时安装到这个目录,把这个目录当作根来用的,所以在这个目录下的目录文件,才是真正的目录文件。当打包完成后,在清理阶段,这个目录将被删除。

RPMS:制作完成后的rpm包存放目录,为特定平台指定子目录(i386,i686,ppc)。

SOURCES:收集的源文件,源材料,补丁文件等存放位置。

SPECS:存放spec文件,作为制作rpm包的领岗文件,文件以.spec结尾。

SRPMS:src格式的rpm包位置 ,既然是src格式的包,就没有平台的概念了

 

六、spec文件介绍

Name: 软件包的名称,在后面的变量中即可使用%{name}的方式引用
Summary: 软件包的内容
Version: 软件的实际版本号,例如:1.12.1等,后面可使用%{version}引用
Release: 发布序列号,例如:1%{?dist},标明第几次打包,后面可使用%{release}引用
Group: 软件分组,建议使用:Applications/System
License: 软件授权方式GPLv2
Source: 源码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用
BuildRoot: 这个是安装或编译时使用的临时目录,即模拟安装完以后生成的文件目录:%_topdir/BUILDROOT 后面可使用$RPM_BUILD_ROOT 方式引用。
URL: 软件的URI
Vendor: 打包组织或者人员
Patch: 补丁源码,可使用Patch1、Patch2等标识多个补丁,使用%patch0或%{patch0}引用
Prefix: %{_prefix} 这个主要是为了解决今后安装rpm包时,并不一定把软件安装到rpm中打包的目录的情况。这样,必须在这里定义该标识,并在编写%install脚本的时候引用,才能实现rpm安装时重新指定位置的功能
Prefix: %{_sysconfdir} 这个原因和上面的一样,但由于%{_prefix}指/usr,而对于其他的文件,例如/etc下的配置文件,则需要用%{_sysconfdir}标识
Requires: 该rpm包所依赖的软件包名称,可以用>=或<=表示大于或小于某一特定版本,例如:
libxxx-devel >= 1.1.1 openssl-devel 。 注意:“>=”号两边需用空格隔开,而不同软件名称也用空格分开

%description: 软件的详细说明
%define: 预定义的变量,例如定义日志路径: _logpath /var/log/weblog
%prep: 预备参数,通常为 %setup -q
%build: 编译参数 ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/……
%install: 安装步骤,此时需要指定安装路径,创建编译时自动生成目录,复制配置文件至所对应的目录中(这一步比较重要!)
%pre: 安装前需要做的任务,如:创建用户
%post: 安装后需要做的任务 如:自动启动的任务
%preun: 卸载前需要做的任务 如:停止任务
%postun: 卸载后需要做的任务 如:删除用户,删除/备份业务数据
%clean: 清除上次编译生成的临时文件,就是上文提到的虚拟目录
%files: 设置文件属性,包含编译文件需要生成的目录、文件以及分配所对应的权限
%changelog: 修改历史

 

 

八、參考鏈接

https://blog.csdn.net/qq_37865420/article/details/106327992

 

==其他

重新打包后,上传到yum源中 安装失败,各种报错。

 

1、首先重新打包后,改包的md5和签名会发生变化,导致在安装的时候效验失败。

2、将新包上传到yum仓库中,一定要更新索引文件,否则无法安装。

3、一定要将包上传到对应的Repo目录中。 yum info 查看。

 

解决方法:

1、修改所有的机器的 /etc/yum.repos.d/liepin-os-7.7.repo 添加 #enabled=1 #gpgcheck=0

2、将base原的包删除掉,将包放入到其他不需要效验的Repo中。

3、使用源码包 src的包 来进行重新编译。

全部评论