1. 程式人生 > >修改、重新生成和安裝RPM包

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

RHEL/CentOS/Fedora/SuseLinux發行版都使用rpm包作為軟體包格式。另外還有一個相關的格式srpm包(字尾是.src.rpm),它包含了原始碼,可以用它重新生成rpm包。

當前最新發行的RHEL/CentOS6.X版本。目前最新版是RHEL6.5/CentOS6.5。(CentOSRHEL的免費版本,與RHEL對應版本完全等價,除了去掉了RedhatLOGO。)

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

CentOS就是使用這些*src.rpm原始碼包構建出所有RPM包,生成CentOS作業系統的。

*src.rpm原始碼包解壓出來後,可以看到有該軟體的原始碼壓縮包和一些patch

檔案。

直接安裝*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">[us
[email protected]
~]$ cd ~/rpmbuild/SPECS</span> <span lang="en-US">[[email protected] 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>