如果你對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 [ <specfile> | <tarball> | <sourcepackage> ]:
*建立包的選項有:[ 從檔案<specfile>建立 |從 <tarball>包建立 |從 <source package>包建立]
*從檔案<specfile>建立
-bp build through %prep (unpack sources and apply patches) from<specfile>
* -bp 從<specfile>檔案的%prep段開始建立(解開源碼包并打更新檔)
-bc build through %build (%prep, then compile) from <specfile>
*-bc 從<specfile>檔案的%build
-bi build through %install (%prep,%build, then install) from <specfile>
-bl verify %files section from<specfile>
*檢查<specfile>檔案的%files段
-ba build source and binary packages from <specfile>
*建立源碼和二進制包
-bb build binary package only from<specfile>
*隻建立二進制包
-bs build source package only from <specfile>
*隻建立源碼包
*從 <tarball>包建立
-tp build through %prep (unpack sources and apply patches) from<tarball>
-tc build through %build (%prep, then compile) from <tarball>
-ti build through %install (%prep, %build,then install) from <tarball>
-ta build source and binary packages from <tarball>
*建立源碼和二進制包
-tb build binary package only from <tarball>
*隻建立二進制包
-ts build source package only from <tarball>
*隻建立源碼包
*從 <source package>包建立
--rebuild
build binary package from<source package>
*建立二進制包
--recompile
build through %install (%prep,%build, then install) from <source package>
番外的,整合了一下上面所述的指令的,如下所示:
以上的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,如需轉載請自行聯系原作者