如何在Linux中創(chuàng)建RPM包?
為了在Linux系統(tǒng)中管理軟件,Linux的各種版本都使用軟件包。軟件包的好處就是,在安裝過程中系統(tǒng)會追蹤那些安裝文件,這使得日后進行管理更加簡單。在把定制軟件添加到你的Linux服務器之前,把它捆綁成一個RPM包會是一個好主意。本文中,你將學習如何創(chuàng)建自己的RPM包。
RPM是Red Hat Enterprise Linux和SUSE Linux Enterprise Server以及它們衍生版本默認的包格式。如果你想在多臺Linux服務器上安裝定制軟件,創(chuàng)建一個RPM包很有用。把這個RPM包放在資料庫中,所有能夠連接到這個資料庫的服務器以后更新軟件時會更加方便。
RPM包包含兩個文件:一個shell腳本以及一個README文件,README文件描述了如何使用該shell腳本。如果你能創(chuàng)建有兩個文件的軟件包,那么你也可以創(chuàng)建更大的軟件包。
創(chuàng)建簡單RPM包的過程
請注意,特定任務的用戶帳戶之間有明確的區(qū)別。如果會有錯誤發(fā)生,那么請使用普通用戶帳戶,你如果使用根用戶帳戶進行操作則可能會讓你意外地抹去磁盤中的許多文件。請按照以下過程建立自己的RPM包:
1.創(chuàng)建一個目錄結構,把RPM包所需要的文件包含進去。這個結構的名字通常以RPM包的名字命名,包括它的版本號。這個目錄放在什么地方關系不大。在這個例子中,它處于當前用戶帳戶的home目錄下。我們把這個目錄命名為test-1.0。下面的命令告訴你如何創(chuàng)建并命名這個目錄,已經(jīng)如何把所需要的文件放在里面:
$ mkdir ~/test-1.0 $ cd ~/test-1.0 $ echo echo this is a test > test.sh $ chmod +x test.sh $ echo just launch the script > README
2.現(xiàn)在,RPM包所需要的全部文件都在這里了。下一步就是創(chuàng)建一個包含RPM文件的.tar.gz文件。這個目錄還讓創(chuàng)建檔案文件更加簡單。該.tar.gz文件需要位于名為rpmbuild/SOURCES的目錄下---這個文件夾通常也位于當前用戶的home目錄中。你還需要一個.specs文件,這個文件包含所有建立RPM包的規(guī)范說明。該.specs文件是RPM包的核心組件,里面包括全部文件的指示,RPM包中的文件按照這些指示進行安裝。該.specs文件應該放置在一個SPECS目錄下。
***個cd命令確保rpmbuild目錄位于當前用戶的home目錄下。請以普通用戶身份執(zhí)行以下命令:
$ cd $ mkdir -p ~/rpmbuild/SOURCES $ mkdir -p ~/rpmbuild/SPECS $ tar -cvzf ~/rpmbuild/SOURCES/test-1.0.tar.gz test-1.0
3.現(xiàn)在文件都各就各位,請以普通用戶身份創(chuàng)建一個說明文件。Rpmbuild命令將會找到所有需要的指示來創(chuàng)建該文件。在最近的Red Hat和衍生版本中,創(chuàng)建說明文件很容易:只需要用vim編輯器創(chuàng)建一個包含所有內容的文件,擴展名設為.spec即可。下面是test-1.0rpm包中該文件的樣子(模板改變的地方已用粗體標出):
Name名稱: test測試
Version 版本: 1.0
Release發(fā)布: 1%{?dist}
Summary摘要: A test package一個測試包
Group分類: Test Packages 測試包
License許可證: GPL
URL: http://test.example.com
Source0: %{name}-%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: /bin/rm, /bin/mkdir, /bin/cp
Requires: /bin/bash, /bin/date
%description
部署單一文件包的演示
%prerp %setup –q %build #configure #make %{? _smp_mflags} %install rm -rf $RPM_BUILD_ROOT #make install DESTDIR=$RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/usr/local/bin cp myscript $RPM_BUILD_ROOT/usr/local/bin %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-root,root,-) #%doc %attr(0755,root,root)/usr/local/bin/myscript %changelog * Today - Creation of initial RPM
你需要記住幾件事。前綴為a%的所有條目都是內部宏。為了簡單演示,其中有些宏已經(jīng)禁用。這些條目中最重要的是%configure和%make宏,必須在他們名字的前面加上a #并把%去掉,以便禁用這些宏。
開始的宏很清楚,不需要做任何說明。最重要的宏是Source0定義。它被定義為%{name}-%{version}.tar.gz,而且必須與你之前創(chuàng)建的tar ball名字完全一致。
另外一個元素是BUILD_ROOT。這是自動生成的環(huán)境,rpmbuild命令將會利用這個環(huán)境做自己的工作。請記住,BUILD_ROOT是自動消失的。這是為什么在創(chuàng)建RPM包時不使用根用戶的原因。%build部分也可以用于諸如軟件編譯之類的工作。
在%install部分中,你之前創(chuàng)建的腳本被復制。在這個例子中,只需要一個簡單的cp命令就可以了,但是對于更加復雜的軟件包來說,這些任務將會非常復雜。
該.spec文件的***一部分內容是%attr宏,它把權限模式設置為0755,并讓根用戶和root組成為安裝文件的主人。
現(xiàn)在.spec文件創(chuàng)建完成,是時候完成最終的工作了。請使用根目錄用戶身份安裝rpmbuild命令。在Red Hat中,請用yum install rpm-build完成這項工作。接下來,請確保所有的文件都呆在正確的地方。Tar存檔文件必須位于創(chuàng)建軟件包的當前用戶帳戶的~/rpmbuild/SOURCES 目錄下,demo.spec文件必須位于~/rpmbuild/SPECS目錄下?,F(xiàn)在你可以用rpmbuild -ba test.spec命令來創(chuàng)建軟件包了。這會在~/rpmbuild/RPMS目錄下創(chuàng)建你的RPM文件。
原文:http://www.searchsv.com.cn/showcontent_47965.htm
【編輯推薦】