為了在Linux系統中管理軟件,Linux的各種版本都使用軟件包。軟件包的好處就是,在安裝過程中系統會追蹤那些安裝文件,這使得日後進行管理更加簡單。在把定制軟件添加到你的Linux服務器之前,把它捆綁成一個RPM包會是一個好主意。本文中,你將學習如何創建自己的RPM包。
RPM是Red Hat Enterprise Linux和SUSE Linux Enterprise Server以及它們衍生版本默認的包格式。如果你想在多台Linux服務器上安裝定制軟件,創建一個RPM包很有用。把這個RPM包放在資料庫中,所有能夠連接到這個資料庫的服務器以後更新軟件時會更加方便。
RPM包包含兩個文件:一個shell腳本以及一個README文件,README文件描述了如何使用該shell腳本。如果你能創建有兩個文件的軟件包,那麼你也可以創建更大的軟件包。
創建簡單RPM包的過程
請注意,特定任務的用戶帳戶之間有明確的區別。如果會有錯誤發生,那麼請使用普通用戶帳戶,你如果使用根用戶帳戶進行操作則可能會讓你意外地抹去磁盤中的許多文件。請按照以下過程建立自己的RPM包:
1.創建一個目錄結構,把RPM包所需要的文件包含進去。這個結構的名字通常以RPM包的名字命名,包括它的版本號。這個目錄放在什麼地方關系不大。在這個例子中,它處於當前用戶帳戶的home目錄下。我們把這個目錄命名為test-1.0.下面的命令告訴你如何創建並命名這個目錄,已經如何把所需要的文件放在裡面:
$ 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.現在,RPM包所需要的全部文件都在這裡了。下一步就是創建一個包含RPM文件的。tar.gz文件。這個目錄還讓創建檔案文件更加簡單。該。tar.gz文件需要位於名為rpmbuild/SOURCES的目錄下---這個文件夾通常也位於當前用戶的home目錄中。你還需要一個。specs文件,這個文件包含所有建立RPM包的規范說明。該。specs文件是RPM包的核心組件,裡面包括全部文件的指示,RPM包中的文件按照這些指示進行安裝。該。specs文件應該放置在一個SPECS目錄下。
第一個cd命令確保rpmbuild目錄位於當前用戶的home目錄下。請以普通用戶身份執行以下命令:
$ cd
$ mkdir -p ~/rpmbuild/SOURCES
$ mkdir -p ~/rpmbuild/SPECS
$ tar -cvzf ~/rpmbuild/SOURCES/test-1.0.tar.gz test-1.0
3.現在文件都各就各位,請以普通用戶身份創建一個說明文件。Rpmbuild命令將會找到所有需要的指示來創建該文件。在最近的Red Hat和衍生版本中,創建說明文件很容易:只需要用vim編輯器創建一個包含所有內容的文件,擴展名設為。spec即可。下面是test-1.0rpm包中該文件的樣子(模板改變的地方已用粗體標出):
Name名稱: test測試
Version 版本: 1.0
Release發布: 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%的所有條目都是內部宏。為了簡單演示,其中有些宏已經禁用。這些條目中最重要的是%configure和%make宏,必須在他們名字的前面加上a #並把%去掉,以便禁用這些宏。
開始的宏很清楚,不需要做任何說明。最重要的宏是Source0定義。它被定義為%{name}-%{version}.tar.gz,而且必須與你之前創建的tar ball名字完全一致。
另外一個元素是BUILD_ROOT.這是自動生成的環境,rpmbuild命令將會利用這個環境做自己的工作。請記住,BUILD_ROOT是自動消失的。這是為什麼在創建RPM包時不使用根用戶的原因。%build部分也可以用於諸如軟件編譯之類的工作。
在%install部分中,你之前創建的腳本被復制。在這個例子中,只需要一個簡單的cp命令就可以了,但是對於更加復雜的軟件包來說,這些任務將會非常復雜。
該spec文件的最後一部分內容是%attr宏,它把權限模式設置為0755,並讓根用戶和root組成為安裝文件的主人。
現在。spec文件創建完成,是時候完成最終的工作了。請使用根目錄用戶身份安裝rpmbuild命令。在Red Hat中,請用yum install rpm-build完成這項工作。接下來,請確保所有的文件都呆在正確的地方。Tar存檔文件必須位於創建軟件包的當前用戶帳戶的~/rpmbuild/SOURCES 目錄下,demo.spec文件必須位於~/rpmbuild/SPECS目錄下。現在你可以用rpmbuild -ba test.spec命令來創建軟件包了。這會在~/rpmbuild/RPMS目錄下創建你的RPM文件。
作者:Sander van Vugt 譯者:Dan