天天看點

如何将apache源碼打成rpm安裝包

如果你對RPM沒有什麼好印像的話,我相信原因就是它的過複雜的包依賴關系。

  但如果自己動手來編繹RPM包的話,這個問題你可以很愉快的進行控制

  如果你有一個很好的軟體版本控制系統的話,你完全可以把你所有要用的軟體包都編繹成RPM, 這樣可以提高一些正常軟體部署效率,比如apache mysql這樣的軟體。

  本次目标:在新裝的一台centos6.4 x86_64位系統上生成根據apache的源碼包生成個apache的rpm檔案

yum-y install wget -y

yuminstall rpm-build -y

這些檔案的下載下傳可以放在一個文檔,比如/usr/local/src,本博寫的檔案是直接下載下傳在/root目錄下的

RPM的建立可以直接從Apache httpd源碼壓縮包中使用以下指令:

rpmbuild-tb httpd-2.4.4.tar.bz2

但是如果下載下傳好httpd的源碼包就直接使用這個指令的話是會有如下錯誤提示的

<a href="http://blog.51cto.com/attachment/201312/143724576.png" target="_blank"></a>

相應的“開發”被安裝在您的建構系統之前建立的RPM包将被要求,rpmbuild的指令會自動計算需要什麼的RPM,并列出在您的系統中缺少的任何依賴。這些“開發”包不會被建構完成後,可以安全地删除。

根據上面的提示要安裝的包,我們要下載下傳apr 1.4以上的相關的包和distcache的包,在系統自帶的包裡面的apr的版本太低的。

如下所示下載下傳好apr的包要是直接用rpmbuild打包也還是不行,還是要安裝相關的元件

<a href="http://blog.51cto.com/attachment/201312/143811191.png" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201312/143830580.png" target="_blank"></a>

結和上面關于apr和httpd相關的元件整合在一起安裝如下所示:除了freetds的元件,這個元件要從别的源下載下傳的如epel

yum -y install autoconf libtool doxygen expat expat-devel libuuid-develdb4-devel mysql-devel unixODBC-devel postgresql-devel sqlite-devel pcrepcre-devel lua-devel libxml2-devel openldap-devel nss-devel zlib-devel libselinux-develmake

  安裝“freetds freetds-devel”這個相關的元件的,隻是這個包在系統自帶的那個包裡是沒有的,須要用外網的源,比如epel、remi等。這裡我就用epel的源

rpm -ivh epel-release-6-8.noarch.rpm

yum -y install freetds freetds-devel

安裝好上面相關的元件後就可以使用這個指令“rpmbuild-tb apr-1.5.0.tar.bz2”編譯apr的rpm包了。

打包好之後會/root/rpmbuild/RPMS/x86_64/下生成rpm的包的,這裡的這個rpmbuild這個目錄是我在做第一步的時候使用這個指令時“rpmbuild -tb httpd-2.4.6.tar.bz2”它自動生成的,當然也可以自己建這個目錄的及這個目錄下面的這幾個目錄的(BUILD  BUILDROOT  RPMS SOURCES  SPECS  SRPMS)

下面就是安裝apr的包

rpm–ivh /root/rpmbuild/RPMS/x86_64/apr-1.5.0-1.x86_64.rpm

rpm-ivh /root/rpmbuild/RPMS/x86_64/apr-devel-1.5.0-1.x86_64.rpm

rpmbuild -tb apr-util-1.5.3.tar.bz2

rpm -ivh /root/rpmbuild/RPMS/x86_64/apr-util-*  //安裝轉為rpm包的apr-util的所有的包

最後要安裝distcache這個元件:

rpmbuild --rebuild distcache-1.4.5-23.src.rpm   //從源碼包建立二進制包

rpm -ivh /root/rpmbuild/RPMS/x86_64/distcache-*  //安裝所有制作好的distcache的rpm的包

所有和httpd制作相關的元件都安裝好了,接下來就可以編譯httpd的rpm包了

rpmbuild -tb httpd-2.4.4.tar.bz2

httpd的rpm包打包好之後就可以安裝了如下所示,不過在安裝httpd的rpm包之前要先安裝mailcap元件的,不然會提示“

[root@localhost~]# rpm -ivh rpmbuild/RPMS/x86_64/httpd-2.4.4-1.x86_64.rpm

error: Failed dependencies:

      /etc/mime.types is needed by httpd-2.4.4-1.x86_64”

yum install mailcap -y

安裝完mailcap元件後再安裝下面的httpd的相關的rpm包:

rpm–ivh /root/rpmbuild/RPMS/x86_64/httpd-2.4.4-1.x86_64.rpm

rpm–ivh /root/rpmbuild/RPMS/x86_64/httpd-devel-2.4.4-1.x86_64.rpm

rpm–ivh /root/rpmbuild/RPMS/x86_64/httpd-tools-2.4.4-1.x86_64.rpm

rpm -ivh /root/rpmbuild/RPMS/x86_64/httpd-manual-2.4.4-1.x86_64.rpm

rpm -ivh /root/rpmbuild/RPMS/x86_64/mod_authnz_ldap-2.4.4-1.x86_64.rpm

rpm -ivh /root/rpmbuild/RPMS/x86_64/mod_lua-2.4.4-1.x86_64.rpm

rpm -ivh /root/rpmbuild/RPMS/x86_64/mod_proxy_html-2.4.4-1.x86_64.rpm

rpm -ivh /root/rpmbuild/RPMS/x86_64/mod_socache_dc-2.4.4-1.x86_64.rpm

rpm -ivh /root/rpmbuild/RPMS/x86_64/mod_ssl-2.4.4-1.x86_64.rpm

service httpd start

rpmbuild --help 指令的解釋說明如下:

————————————————————————————————————————————

*使用指令:rpmbuild ·[OPTION]

Build options with [ &lt;specfile&gt; | &lt;tarball&gt; | &lt;sourcepackage&gt; ]:

*建立包的選項有:[ 從檔案&lt;specfile&gt;建立 |從 &lt;tarball&gt;包建立 |從 &lt;source package&gt;包建立]

*從檔案&lt;specfile&gt;建立

 -bp     build through %prep (unpack sources and apply patches) from&lt;specfile&gt;

             * -bp 從&lt;specfile&gt;檔案的%prep段開始建立(解開源碼包并打更新檔)

 -bc     build through %build (%prep, then compile) from &lt;specfile&gt;

             *-bc 從&lt;specfile&gt;檔案的%build

 -bi      build through %install (%prep,%build, then install) from &lt;specfile&gt;

 -bl       verify %files section from&lt;specfile&gt;

             *檢查&lt;specfile&gt;檔案的%files段

 -ba     build source and binary packages from &lt;specfile&gt;

             *建立源碼和二進制包

 -bb     build binary package only from&lt;specfile&gt;

             *隻建立二進制包

 -bs     build source package only from &lt;specfile&gt;

             *隻建立源碼包

*從 &lt;tarball&gt;包建立

 -tp     build through %prep (unpack sources and apply patches) from&lt;tarball&gt;

 -tc     build through %build (%prep, then compile) from &lt;tarball&gt;

 -ti       build through %install (%prep, %build,then install) from &lt;tarball&gt;

 -ta     build source and binary packages from &lt;tarball&gt;

            *建立源碼和二進制包

 -tb     build binary package only from &lt;tarball&gt;

            *隻建立二進制包

 -ts     build source package only from &lt;tarball&gt;

            *隻建立源碼包

*從 &lt;source package&gt;包建立

 --rebuild   

           build binary package from&lt;source package&gt;

            *建立二進制包

 --recompile 

          build through %install (%prep,%build, then install) from &lt;source package&gt;

番外的,整合了一下上面所述的指令的,如下所示:

以上的apache的源碼包就打包成了rpm的包,還是有很多rpm包的。将這些在/root/rpmbuild/RPMS/x86_64/下生成rpm的包或拷貝整個rpmbuild這個目錄到别的伺服器上,那些相關的元件也還是要安裝的,才能安裝這些打包好的rpm包的。這樣就友善多了,不用編譯要等那麼長的時間了,步驟如下所示:

yum -y install autoconf libtool doxygen expat expat-devel libuuid-devel db4-develmysql-devel unixODBC-devel postgresql-devel sqlite-devel pcre pcre-devellua-devel libxml2-devel openldap-devel nss-devel zlib-devel libselinux-develmake freetds freetds-devel mailcap

rpm –ivh /root/rpmbuild/RPMS/x86_64/apr-1.5.0-1.x86_64.rpm

rpm -ivh /root/rpmbuild/RPMS/x86_64/apr-devel-1.5.0-1.x86_64.rpm

rpm -ivh /root/rpmbuild/RPMS/x86_64/apr-util-*

rpm -ivh /root/rpmbuild/RPMS/x86_64/distcache-*

rpm –ivh /root/rpmbuild/RPMS/x86_64/httpd-2.4.4-1.x86_64.rpm

rpm –ivh /root/rpmbuild/RPMS/x86_64/httpd-devel-2.4.4-1.x86_64.rpm

rpm –ivh /root/rpmbuild/RPMS/x86_64/httpd-tools-2.4.4-1.x86_64.rpm

      本文轉自ling118 51CTO部落格,原文連結:http://blog.51cto.com/meiling/1340577,如需轉載請自行聯系原作者