歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 源碼包制作成rpm包

源碼包制作成rpm包

日期:2017/2/28 13:39:27   编辑:Linux教程

將源碼包(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 的信息,都是我們之前配置的內容。

Copyright © Linux教程網 All Rights Reserved