系統大全為您提供總結:rpm包如何制作之個人經驗?一RPM介紹RPM前是RedHatPackageManager的縮寫,本意是RedHat軟件包管理,顧名思義是RedHat貢獻出來的軟件包管理;現在應為RPMPackageManager的縮寫。在Fedora、Redhat、Mandriva、SuSE、YellowDog等主流發行版本,以及在這些版本基礎上二次開發出來的發行版采用;RPM包中除了包括程序運行時所需要的文件,也有其它的文件;一個RPM包中的應用程序,有時除了自身所帶的附加文件保證其正常以外,還需要其它特定版本文件,這就是軟件包的依賴關系。?RPM可以讓用戶直接以binary方式安裝軟件包,并且可替用戶查詢是否已經安裝了有關的庫文件;在用RPM刪除程序時,它又會聰明地詢問用戶是否要刪除有關的程序。如果使用RPM來升級軟件,RPM會保留原先的配置文件,這樣用戶就不用重新配置新的軟件了。RPM保留一個數據庫,這個數據庫中包含了所有的軟件包的資料,通過這個數據庫,用戶可以進行軟件包的查詢。RPM雖然是為Linux而設計的,但是它已經移值到SunOS、Solaris、AIX、Irix等其它UNIX系統上了。RPM遵循GPL版權協議,用戶可以在符合GPL協議的條件下自由使用及傳播RPM。?二RPM包分類我個人認為rpm分為兩大類,1二進制類包,包括rpm安裝包(一般分為i386和x86等幾種)和調式信息包等。2源碼類包,源碼包和開發包應該歸位此類。?它們之間的關系是,最先我們按rpm打包要求改造軟件項目源碼,當符合要求之后就可以使用rpmbuild命令來生成不同的rpm包,同時生成的包之間版本是直接對應的,比如相同的源碼包將生成完全相同的二進制rpm包。當你在網上查找rpm包時,一般你可以在RPMS目錄中找到預編譯的二進制包,而源碼包則會在SRPMS目錄內。?我們這里提到的RPM制作就是指改造軟件源代碼使之符合RPM打包要求的過程,這也可以等價為RPM源碼包的制作過程,因為當你有了源碼包就可以直接編譯得到二進制安裝包和其他任意包。?三RPM包制作介紹?RPM包的制作,即是RPM源碼包的制作。?這里我想說說RPM包工作的原理,這將有助于全面的了解RPM包管理系統的知識。?RPM是為解決源碼包不易安裝(需要編譯)和軟件包相互之間依賴(是RPM包管理器可以一定程度解決依賴問題)問題,它通過在探測源碼包在build和install階段的動作獲得最終生成的需要安裝的系統里的文件,并記錄下一些必要的操作(比如安裝完成后執行某項操作),然后把此組成為一個整體,當在用戶安裝此包時把前面獲得的所有問題和記錄的所有操作原原本本的作用的實際系統上。?為一個普通的源碼打RPM包,需要下面一些操作,首先需要對項目的Makefile作必要的改造以支持RPM打包操作(實際上此操作不是絕對的,SPEC文檔和Makefile的是協調統一工作的,只要他們之間配合好了其他都無所謂,我們一般只是推薦大家盡量按行業標準規范操作而已);其次是針對當前項目撰寫SPEC文檔,SPEC文檔包括了RPM打包過程的操作內容和新生成的RPM包的基本信息等,它的作用對象是打包程序rpmbuild。?四RPM包制作過程1準備打包環境fedora系統下使用如下命令安裝rpmbuild#yuminstallrpmbuildrpmbuild的工作目錄如下,?~/rpmbuild?~/rpmbuild/SOURCES?~/rpmbuild/Specs?~/rpmbuild/BUILD?~/rpmbuild/RPMS?~/rpmbuild/RPMS/i386?~/rpmbuild/SRPMS?如果你的用戶目錄主目錄下沒有類似目錄結構,你可以通過一個工具軟件來自動配置和生成,如下。?#yuminstallrpmdevtools?下了運行自動配置命令自動生成如上目錄,并配置一些必要操作。?#rpmdev-setuptree?rpmdev-setuptree命令默認將再當前用戶主目錄下創建一個RPM構建根目錄結構,?如果需要改變次默認位置,可以修改配置文件:~/.rpmmacros中變量_topdir對應的值即可。?一般rpmbuild會在當前用戶的主目錄下自動建立如上目錄結構,如果在你對應用戶的構建目錄中沒有自動建立如上目錄,你可以通過手動方式建立。上面目錄的使用是這樣分配的,SOURCES放置打包資源,包括源碼打包文件和補丁文件等;Specs目錄放置SPEC文檔;BUILD打包過程中的工作目錄;RPMS目錄存放生成的二進制包,RPM包根據硬件平臺不同分類,i386表示生成i386結構的包將存放在該目錄下;SRPMS目錄存放生成的源碼包。?2撰寫SPEC文檔SPEC撰寫是打包RPM的核心,也算是最難的一步,好在我們可以從參照一個簡單的模板文件開始,在可以實現基本功能的基礎上再一步一步的擴充文檔內容,直至完全達到要求。下面是一個簡單的SPEC文檔,其中包括了一些說明信息(注:#后面的內容為說明信息),該SPEC文檔是對一個測試的軟件項目hellorpm寫的,hellorpm軟件包編譯后僅有一個執行文件、一個手冊文件和一個項目說文件。hellorpm.spec文檔的內容如下:-----------------------------------------------------------------------------#軟件包簡要介紹Summary:hellorpmisatestprogram。?#軟件包的名字?Name:hellorpm?#軟件包的主版本號?Version:2.2.6?#軟件包的次版本號?Release:1?#源代碼包,默認將在上面提到的SOURCES目錄中尋找?Source0:%{name}-%{version}.tar.gz?#授權協議?License:GPL?#定義臨時構建目錄,這個地址將作為臨時安裝目錄在后面引用?buildroot:%{_tmppath}/%{name}-%{version}-%{release}-root?#軟件分類?Group:Development/Tools?#軟件包的內容介紹?%description?Thehellorpmprogramisatest.?#表示預操作字段,后面的命令將在源碼代碼BUILD前執行?%prep?#構建BUILD環境,將解壓源碼壓縮包到BUILD目錄?%setup-q?#BUILD字段,將通過直接調用源碼目錄中自動構建工具完成源碼編譯操作?%build?#調用源碼目錄中的configure命令?./configure?#在源碼目錄中執行自動構建命令make?make?#安裝字段?%install?#調用源碼中安裝執行腳本?makeDESTDIR=$RPM_BUILD_ROOTinstall?#文件說明字段,聲明多余或者缺少都將可能出錯?%files?#設置文件權限屬性?%defattr(-,root,root)?#聲明/usr/local/bin/hellorpm將出現在軟件包中?/usr/local/bin/hellorpm?#聲明并設置文件屬性?%doc%attr(0444,root,root)/usr/local/man/man1/hellorpm.1?#同上,聲明文檔文件?%docREADME-------------------------------------------------------------------------------這個文檔需要說明的一點:?buildroot:%{_tmppath}/%{name}-%{version}-%{release}-root?上面buildroot變量表示的是源碼的臨時按照目錄,rpmbuild就是通過次目錄獲得將要按照到系統中的所有文件,而在SPEC文檔后面makeinstall命令中的參數DESTDIR=$RPM_BUILD_ROOT即是對該參數的引用,這個參數將傳給Makefile文件一告訴自動構建工具應該安裝文件那里(實際上我再前文提到過的Makefile需要作一些改造以適應RPM的構建就包括此操作,你的Makefile文件中至少要知道在RPM構建過程中引用此參數的值去控制安裝操作的目標)。?如上一個簡單的SPEC文檔撰寫完成,下面把一個名為hellorpm-2.2.6.tar.gz的源碼壓縮文件放到?rpmbuild根目錄下的SOURCES目錄下(注,確保此歸檔文件解壓后的目錄為hellorpm-2.2.6,否則會有問題)。?到此一個完整的rpm打包環境已經構建完成,下面我們就可以開始構建二進制和源代碼RPM包。?3構建RPM包?構建RPM包是有命令rpmbuild在SPEC的指導下完成。?開始構建操作,首先進入到當前用戶的rpmbuild根目錄(即上面提到的目錄環境)。?#cd~/rpmbuild/?執行如何命令,-ba表示buildall,即生成包括二進制包和源代碼包的所有RPM包,下來如果正常的話,rpmbuild將正常退出,同時在RPMS目錄和SRPMS目錄中將生成對應的RPM包。?#rpmbuild-baSpecs/hellorpm.spec?這里僅僅介紹了一個最簡單軟件的最簡單的RPM的打包操作過程,諸如帶有共享文件的需要進行復雜配置的具有復雜依賴關系的等等的項目的打包以及后期的維護,包括補丁的制作我將在下來的時間完成補充更新,今天時間不早了,該休息了!注:費了大半夜的功夫,搞出這么個令人不滿意的文檔,我思考著,這樣做有多少意義呢?不敢重復發明輪子的,站到巨人的肩膀你才能看得更遠,是這樣嗎?是不是下周開始立個計劃,每周至少翻譯三篇fedora官網的文檔給自己練練手。???以上就是系統大全給大家介紹的如何使的方法都有一定的了解了吧,好了,如果大家還想了解更多的資訊,那就趕緊點擊系統大全官網吧。??本文來自系統大全http:///如需轉載請注明!推薦:win7純凈版