rpm打包要點


1. 查看變量:

rpmbuild --showrc

2. spec文件

 

 

 

頭部

多行的部分,如 %changelog 或 %description 由指令下一行開始,空行結束。
一些不需要的行 (如 BuildRequires 和 Requires) 可使用 ‘#’ 注釋。

 

BuildRequires: <=== 在本機編譯rpm包時需要的輔助工具,以逗號分隔。假如,要求編譯myapp時,gcc的版本至少為4.4.2,則可以寫成gcc >=4.2.2。還有其他依賴的話則以逗號分別繼續寫道后面。
Requires: <=== 編譯好的rpm軟件在其他機器上安裝時,需要依賴的其他軟件包,也以逗號分隔,有版本需求的可以

 

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

%{_tmppath}代表的路徑為 /var/tmp

 

%install 階段

rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT

$RPM_BUILD_ROOT等於前面定義的BuildRoot變量,也可以寫成%{buildroot},必須全部用小寫,不然要報錯。

 

%files 階段

主要用來說明會將%{buildroot}目錄下的哪些文件和目錄最終打包到rpm包里:
%files
%defattr(-,root,root,-)
%doc

%defattr(文件權限,用戶名,組名,目錄權限)
如果不牽扯到文件、目錄權限的改變則一般用%defattr(-,root,root,-)這條指令來為其設置缺省權限。

所有需要打包到rpm包的文件和目錄都在這個地方列出,例如:
%files
%{_bindir}/*
%{_libdir}/*
%config(noreplace) %{_sysconfdir}/*.conf
在安裝rpm時,會將可執行的二進制文件放在/usr/bin目錄下,動態庫放在/usr/lib或者/usr/lib64目錄下,配置文件放在/etc目錄下,並且多次安裝時新的配置文件不會覆蓋以前已經存在的同名配置文件。 這里在寫要打包的文件列表時,既可以以宏常量開頭,也可以為“/”開頭,沒任何本質的區別,都表示從%{buildroot}中拷貝文件到最終的rpm包里;如果是相對路徑,則表示要拷貝的文件位於%{_builddir}目錄,這主要適用於那些在%install階段沒有被拷貝到%{buildroot}目錄里的文件,最常見的就是諸如README、LICENSE之類的文件。

如果不想將%{buildroot}里的某些文件或目錄打包到rpm里,則用:
%exclude dic_name或者file_name

關於%files階段有兩個特性要牢記:

1. %{buildroot}里的所有文件都要明確被指定是否要被打包到rpm里。什么意思呢?假如,%{buildroot}目錄下有4個目錄a、b、c和d,在%files里僅指定a和b要打包到rpm里,如果不把c和d用exclude聲明是要報錯的;
2. 如果聲明了%{buildroot}里不存在的文件或者目錄也會報錯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM