修改、重新生成和安装RPM包

本文介绍RHEL/CentOS系统中RPM与SRPM软件包管理方式,包括如何利用SRPM源码包构建定制化的RPM包,并提供详细的命令行操作指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自http://blog.youkuaiyun.com/shendl/article/details/19992993


RHEL/CentOS/Fedora/SuseLinux发行版都使用rpm包作为软件包格式。另外还有一个相关的格式srpm包(后缀是.src.rpm),它包含了源代码,可以用它重新生成rpm包。

当前最新发行的RHEL/CentOS6.X版本。目前最新版是RHEL6.5/CentOS6.5。(CentOSRHEL的免费版本,与RHEL对应版本完全等价,除了去掉了RedhatLOGO。)

在如下地址,可以找到RHEL6的所有rpm包的源码包:*.src.rpm

http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/

CentOS就是使用这些*src.rpm源码包构建出所有RPM包,生成CentOS操作系统的。

*src.rpm源码包解压出来后,可以看到有该软件的源代码压缩包和一些patch文件。

如果rpm包有问题,我们可以去http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/下载对应的src.rpm包,然后把它解开后修改源代码,重新编译和生成rpm包,进行分发和安装。


直接安装*src.rpm源码包

有时,我们没有找到可用的rpm包,但找到了其对应的*src.rpm源码包,此时我们可以安装这个*src.rpm源码包。步骤与直接安装rpm包很不相同。

<span style="font-size: 18px;"><span lang="en-US">rpm -i /tmp/mypackage-1.0.0-1.src.rpm</span></span>
<span style="font-size: 18px;">此时还没有安装完成。只是在<span lang="en-US">~/rpmbuild/ </span>目录下准备了该<span lang="en-US">src.rpm</span>源码包的资源,可用于进一步生成<span lang="en-US">rpm</span>包。
<span lang="en-US">[user@host ~]$ cd ~/rpmbuild/SPECS</span>
<span lang="en-US">[user@host SPECS]$ rpmbuild -ba mypackage.spec</span></span>
<span style="font-family: 'Liberation Serif', serif; font-size: 18px;"><span lang="en-US">*src.rpm</span></span><span style="font-family: Arial; font-size: 18px;">源码包的构建,使用的是<span style="font-family: 'Liberation Serif', serif;"><span lang="en-US">rpmbuild</span></span>命令。看一下这个命令的选项。</span>

rpmbuild -bSTAGE|-tSTAGE [ rpmbuild-options]FILE ...

The argument used is -b if a spec file is being used to build the packageand -t if rpmbuild should look inside of a (possibly compressed) tar

file for the spec file to use. After the first argument, the nextcharacter (STAGE) specifies the stages of building and packaging tobe done

andis one of:


-ba Build binary and source packages (after doing the %prep, %build,and %install stages). 构建RPM包和SRPM包。


-bb Build a binary package (after doing the %prep, %build, and%install stages).构建RPM包。

-bp Executes the "%prep" stage from the spec file. Normallythis involves unpacking the sources and applying any patches.

执行spec文件的%prep阶段。一般是解压源码和应用源码到~/rpmbuild/BUILD/目录下。


-bc Do the "%build" stage from the spec file (after doingthe %prep stage). This generally involves the equivalent of a"make".

执行spec文件的%build阶段,一般是执行make。


-bi Do the "%install" stage from the spec file (after doingthe %prep and %build stages). This generally involves the equivalentof a "make

install".

执行spec文件的%install阶段,一般是执行make install。


-bl Do a "list check". The "%files" section from the spec file is macro expanded, and checks are made to verify that each file exists.

执行spec文件的%%files阶段,一般是执行验证每一个文件是否存在。

-bs Build just the source package.

只构建源码包。


上述命令构建了rpm包和src.rpm包。可以在~/rpmbuild/RPMS/x86_64/或者其他架构的目录下找到新生成的rpm包。

你可以使用sudo  rpm -i *.rpm命令安装rpm包。


你也可以直接使用如下命令:

<span style="font-size: 18px;"><span lang="en-US">rpmbuild --rebuild /tmp/mypackage-1.0.0-1.src.rpm</span></span>
<span style="font-size: 18px;">这个命令一步即可在~<span lang="en-US">/rpmbuild/RPMS/</span>目录下重新生成<span lang="en-US">rpm</span>包。</span>


基于*src.rpm源码包修改代码后生成rpm包并安装

rpmbuild命令基于.spec文件和源码tar.gzpatch文件生成src.rpmrpm包。

因此,我们只需要修改.spec文件,或者对应的源码和patch文件,然后再执行

rpmbuild -ba mypackage.spec

<span style="font-size: 18px;">命令,就可以生成更新后的<span lang="en-US">src.rpm</span>包和<span lang="en-US">rpm</span>包。<span lang="en-US">rpm</span>包在<span lang="en-US">~/rpmbuild/RPMS</span>目录下,<span lang="en-US">
src.rpm</span>包在<span lang="en-US">~/rpmbuild/SRPMS</span>目录下。

<span lang="en-US"></span><strong>注意,要修改<span lang="en-US">~/rpmbuild/SOURCES/</span>目录下的文件</strong>:
1,你可以重新打包<span lang="en-US">~/rpmbuild/SOURCES/</span>目录下的<span lang="en-US">tar.gz</span>源文件。
2,你可以修改<span lang="en-US">.spec</span>文件,增加或者减少对<span lang="en-US">patch</span>的应用。
3,推荐你修改<span lang="en-US">.spec</span>的<span lang="en-US">Release: 8%{?dist}  </span>宏,增加它的数值。  
这样,你生成的<span lang="en-US">rpm</span>包和<span lang="en-US">src.rpm</span>包的小版本号就比原始的<span lang="en-US">rpm</span>包要高,从而你可以使用
<span lang="en-US">sudo rpm -U ../RPMS/x86_64/bzip2-1.0.5-8.el6.x86_64.rpm </span>
这样的命令来升级<span lang="en-US">rpm</span>包。如果你不把<span lang="en-US">Release</span>数字改大,则你必须首先卸载已经安装的<span lang="en-US">rpm</span>包,
然后才能重新安装我们新生成的<span lang="en-US">rpm</span>包。     </span>
<span style="font-size: 18px;">
</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值