歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 簡易rpm套件的制作

簡易rpm套件的制作

日期:2017/2/27 14:17:23   编辑:更多Linux
  在使用Linux的過程中可能可能需要安裝新的軟件,升級已安裝的軟件或刪除已安裝的 軟件,這就或多或少要涉及到rpm. Rpm是redhat公司開發的一種源代碼和二進制代碼封裝的方式,這種封裝的方式能讓用 戶輕松的進行軟件包的管理,包括軟件包的安裝、升級、刪除、查詢和管理。由於采用rpm 方式安裝軟件包無論是從二進制和源代碼方面來講,都比用.tar.gz的方式要簡單的多.故用 rpm安裝軟件成了一個linux下安裝軟件的標准.對於一個有志於linux下軟件軟件編程的程 序員來說,掌握簡易的rpm套件的制作對於推廣自己的程序非常有用. Rpm套件的制作大致可分為: 1. 取得.tar.gz格式的軟件源程序和補丁文件. 2. 制作rpm套件的spec規格文件. 3. 執行rpm –ba 產生並測試rpm套件. 整個包裝rpm套件的重心就在於如何定義完整的rpm套件規格文件(specification)以及包 裝後的測試工作.制作rpm套件之前,必須先了解整個系統文件的目錄結構與運行,因為某些 rpm套件的制作會常常牽扯到系統運行的問題,比如安裝了某種新的shell,就必須在/etc/shells 中加入該shell的可執行文件路徑和名稱,才能正確的使用該shell.為了免除考慮這個顧慮,可 以先從無關系統運行的應用軟件做起,等對linux系統相當熟悉了,再嘗試這些涉及到系統運 行的rpm套件制作. Rpm的Spec就如同編譯程序時的Makefile,定義制作Rpm包的所有文件信息及制作流程, 其主要工作將源程序解壓縮,為源程序打補丁,編譯源程序,包裝二進制碼Rpm包,包裝源代碼 Rpm包,清除包裝過程在Build目錄產生的臨時目錄. 它山之石,可以攻玉.多看看他人已經編好的spec文件,是學習spec文件編寫的捷徑,用以 下命令將spec文件取出. $:rpm –qlp *.src.rpm $:rpm2cpio *.src.rpmcpio –ivh *.spec 首先執行rpm –qlp查詢,得知該套件中有個.spec文件,再執行rpm2cpio將rpm文件轉換 成cpio文件格式,並將轉換結果輸出給cpio程序,把source rpm套件中的sepc文件解壓取出. 打開一個spec文件,可以發現它可以分為以下幾個段: %define、 %description、%prep、%build、 %install、%clean、%files、%changelog。 %define段主要用來做一些全局定義,如:版本號:Version;簡單的概要:Summary;程 序的名稱:Name;版權:Copyright;軟件所屬的組:Group;Source名稱是最重要的位置, 這裡定義Source的來源(一些tar.gz文件和一些補丁文件,若該軟件的Source不僅只有一個 文件,可以指定多重源程序,只需要將"Source"和"Patch"標簽編號,依次指定即可),用戶必 須把該文件放在/usr/src/redhat/SOURCES目錄下,rpm才可以進行包裝工作;icon指名該套 件的圖標,前提必須是一個gif文件,且位於/usr/src/redhat/source目錄下;常常在安裝某 些軟件是會出現某些依賴關系信息,告訴用戶必須先安裝某些套件才能安裝這個rpm套件的 情況,需要制作這種功能的rpm套件,就是依賴"Requires"這個標簽, Requires共有<、〉、<=、 =、 >=這五種.若某軟件同時需要用到三四個函數庫,則Requires標簽就必須定義三四行.或 用逗號隔開寫成一行.如: Requires: kdesupport.當然, %define段的標簽還有幾個,不過不 常用,這裡就不再多說了. %description段較為簡單,主要是對該軟件的一個簡要的介紹. %prep 段是spec的准備段,該段主要執行包裝Rpm包的准備工作,檢查標簽語法是否正 確,檢查/usr/src/redhat/SOURCES目錄是否存放源程序及補丁文件,刪除舊的軟件源程序, 並替程序作untar、patch等工作。當然,這些工作可以寫一些shell script來進行指定的 工作,但是如果真的寫shell script來進行這些准備工作,可能會令人苦惱。於是rpm開 發人員為用戶提供了%setup和%patch這兩個命令來替用戶處理這些繁雜的准備工作。 %setup 不加任何選項,僅將軟件包打開。 %setup –n newdir 將軟件包解壓在newdir目錄。 %setup -c 解壓縮之前先產生目錄。 %setup –b num 將第num個source文件解壓縮。 %setup –T 不使用default的解壓縮操作。


%setup –T –b 0 將第0個源代碼文件解壓縮。 %setup –c –n newdir 指定目錄名稱newdir,並在此目錄產生rpm套件。 %patch 最簡單的補丁方式,自動指定patch level。 %patch 0 使用第0個補丁文件,相當於%patch –p 0。 %patch –s 不顯示打補丁時的信息。 %patch –T 將所有打補丁時產生的輸出文件刪除。 %build 段主要是用來完成程序的編譯,通常情況下是一個make命令用來完成編譯。 %install這個段較為復雜,該段主要執行安裝的工作,在這裡你可以寫一些腳本將程序 加入菜單欄中,由於各個發行版不同,各個腳本也不通用,簡單的就是執行make install 來完成程序的安裝(視不同程序的安裝而定)。 %clean段是spec的刪除段,它是使用rm –f命令刪除編譯時的臨時目錄,一般用rm -rf $RPM_BUILD_ROOT即可。 %files、%changelog段分別用來告訴用戶軟件安裝的地方和軟件的一些更新的日志等。 做完這些後,一個spec文件便就完成了,執行rpm –ba 產生並測試rpm套件,如果沒出什麼 錯的話,便就會產生相應的二進制rpm包和源代碼的srpm包。它們分別位於 /usr/src/Redhat/RPMS和/usr/src/Redhat/SRPMS目錄下(注:我使用的是Redhat 7.0,不同的發 行版本路徑有差別). /*寫得比較簡單,不明白的地方我們共同交流*/



Copyright © Linux教程網 All Rights Reserved