首頁 > 軟體

原始碼包製作成rpm包

2020-06-16 17:21:18

將原始碼包(tar包)製作成rpm 包

一、準備實驗環境
實驗環境 RHEL6
1.下載原始碼軟體包:lsyncd-2.0.5.tar.gz
2.首先檢查原生的編譯環境和 rpm 包製作軟體與相關目錄是否正常
3.rhel6 下的 rpm 包製作原始碼所在目錄/root/rpmbuild,與 rhel5 的/usr/src/RedHat/有所不同
[root@linuxidc ~]# rpmbuild lsyncd-2.0.5.tar.gz //可以生成/root/rpmbuild 目錄
如 果 沒 有 /root/rpmbuild 目 錄 , 執 行 命 令 :rpmbuild lsyncd-2.0.5.tar.gz , 會 自 動 生 成
4.拷貝 lsyncd 原始碼到/root/rpmbuild/SOURCES 目錄下,此時,所有子目錄下只有 SOURCES 下有 lsyncd-2.0.5.tar.gz 一個檔案
[root@linuxidc rpmbuild]# tree

二、生成 spec 規則檔案 (rpm -qpi 檢視的內容來源於此檔案)
[root@linuxidc rpmbuild]# cd SPECS
[root@linuxidc SPECS]# vim lsyncd-2.0.5.spec
注意一定要用 vim 編輯才會自動生成模板檔案。 該檔案內容為自動生成的模板,待會根據需要手工修改,暫時儲存退出即可。

1.重要部分解釋
Source0: //原始碼名稱
BuildRequires: //軟體依賴關係描述(可以省略)
Requires: //該 rpm 包所依賴的軟體包名稱
%build //本段是建立段,所執行的命令為生成軟體包服務,相當於./configure 和 make
%install //這一節主要用於完成實際安裝軟體必須執行的命令,這一節一般是由make install 指令構成,但是有時也會包含 cp、mv、install 等指令
%clean //這一節所描述的內容表示在完成包建立的工作之後,自動執行此節下的指令碼進行附加的清除工作,這一節的內容通常簡單地使用 rm -rf $RPM_BUILD_ROOT 命令,
不需要指定此節的其它內容
%files //這一節指定構成包的檔案的列表,它是使用節字首%files 表示的。此外,它還包含一系列宏控制安裝後的檔案屬性和設定資訊。,分為三類--說明文件(doc),
組態檔(config)及執行程式,也根據提示編寫。%files 下列出應該捆綁到 RPM 中的檔案,並能夠可選地設定許可權和其它資訊

2.編輯 lsyncd 的 spec 規則檔案 (編輯 lsyncd-2.0.5.spec 檔案,先填寫可以確定的部分)

Source0: lsyncd-2.0.5.tar.gz //注意名稱要寫對,檔案名字必須與原始碼一致

%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT //此處沒有填寫完整,需根據“make install”的輸出填寫。

%files //此處還沒有填寫,後面根據提示再修改。

%changelog
//下面填寫編譯時間 5 月 22 日,日期格式為 date +"%a %b %d %Y",必須以*開頭,以--end結尾
* Tue May 22 2012 <root@localhost>
--end

如何確定其它的引數內容呢,可以根據一下步驟,一步步填寫

3.安裝原始碼包
[root@lsyncd lsyncd-2.0.5]# ./configure //看看設定時需要依賴哪些軟體包
//在設定過程中,需要的軟體依賴包為 lua-devel-5.1.4-4.1.el6.i686.rpm,那麼 lsyncd-2.0.5.spec
中,"BuildRequires: Requires:"軟體依賴設定就可以寫上 lua-devel。

[root@linuxidc lsyncd-2.0.5]# make
[root@linuxidc lsyncd-2.0.5]# make install
輸出的內容就是 lsyncd-2.0.5.spec 檔案中“%install”後面需要填寫的內容,表示安裝哪些檔案到哪些路徑下,但要修改格式。
1.將這一段內容中所有的/usr/local 修改為變數$RPM_BUILD_ROOT,因為製作 rpm 包時並不需要將檔案安裝到實際的路徑,所以暫時安裝在$RPM_BUILD_ROOT 中,其實就是/root/rpmbuild/BUILDROOT/lsyncd-2.0.5-1.el6.i386 這個臨時目錄。
2.將這一段內容中所有的單引號去掉或者換成雙引號,因為要允許變數。

到現在,lsyncd-2.0.5.spec 檔案中還有“%files”沒有填寫。%files 表示編譯完成的軟體到底包括那些檔案,可以執行 rpmbuild -bb lsyncd-2.0.5.spec,根據提示可以得到%files 的內容。
[root@vmware1 SPECS]# rpmbuild -bb lsyncd-2.0.5.spec
在最後會有這一段關於這些檔案的錯誤,這裡列出的所有檔案,就是我們需要填寫入
lsyncd-2.0.5.spec 中%files 的內容。

三、到這裡所有 lsyncd-2.0.5.spec 中所有內容編寫完畢,再次執行 rpmbuild 命令
[root@linuxidc SPECS]# rpmbuild -ba lsyncd-2.0.5.spec
//順利通過編譯,使用-ba 生成 rpm 包和 srpm 包,檢視生成的目標 rpm 包
[root@linuxidc rpmbuild]# tree *RPMS
[root@linuxidc rpmbuild]# rpm -qpi RPMS/i386/lsyncd-2.0.5-1.el6.i386.rpm
[root@linuxidc i386]# rpm -ivh lsyncd-2.0.5-1.el6.i386.rpm
[root@linuxidc i386]# rpm -qa | grep lsyncd
[root@linuxidc i386]# rpm -ql lsyncd
通過 rpm 的查詢命令發現 lsyncd 的資訊,都是我們之前設定的內容。

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-02/140720.htm


IT145.com E-mail:sddin#qq.com