linux RPM 打包流程


一、RPM 打包准備

1.因為打RPM包需要 rpmbuild 命令,所以需要先安裝 rpmbuild 相應工具,安裝過程可在網上查找;

2.輸入命令  rpmbuild xx.spec 即可在自動當前用戶的 $HOME 目錄下創建 RPM 相關的文件夾,也可手動創建;

 1 [xx@localhost ~]$ rpmbuild xx.spec  2 錯誤:stat ~/xx.spec 失敗:沒有那個文件或目錄  3 [xx@localhost ~]$ tree ~/rpmbuild/
 4 rpmbuild/
 5 ├── BUILD  6 ├── BUILDROOT  7 ├── RPMS  8 ├── SOURCES  9 ├── SPECS 10 └── SRPMS

  BUILD:源碼包被解壓至此,並在該目錄的子目錄完成編譯,宏為 %_builddir

  BUILDROOT:保存 %install 階段安裝的文件,宏為 %_buildrootdir

  RPMS:生成/保存二進制 RPM 包,宏為 %_rpmdir

  SOURCES:保存源碼包(如 .tar 包)和所有 patch 補丁,宏為 %_sourcedir

  SPECS:保存 RPM 包配置(.spec)文件,宏為 %_specdir

  SRPMS:生成/保存源碼 RPM 包(SRPM),宏為 %_srcrpmdir

  ~/rpmbuild 的宏為 %_topdir

二、編輯 SPEC 文件

1.創建 SPEC 文件如下所示:

[xxx@localhost rpmbuild]$ rpmdev-newspec xxx.spec xxx.spec created; type minimal, rpm version >= 4.12.

2.將 SPEC 文件放在 ~rpmbuild/SPECS/ 下面,然后編輯 SPEC 文件,如下所示:

Name:    #軟件名稱 Version:  #版本號 Release:  #發布編碼 Summary:  #簡要說明 License:  #協議版本 URL:
Source0:  #源碼包
%description
#描述
%prep
#預處理

%build
#編譯
%pre
#安裝前
%install
#安裝

%post
#安裝后
%files #安裝的文件列表
%clean
#清理臨時文件

%preun
#卸載前

%postun
#卸載后
%changelog * Fri Aug 7 2020 -

3.安裝的各個階段說明:

%prep階段 - 預處理,主要對源代碼包進行解壓和打補丁

  一般使用  %setup  -c 或者 %setup -q 命令來解壓源碼包,直接會將文件解壓到%{_builddir}

%build階段 - 對源代碼包進行編譯

  編譯階段,非 GNU configure 配置的程序可以不關注這個階段

%install階段 - 將軟件安裝到虛擬根目錄, 同時 Install 階段也有如下階段

  %pre階段 - 安裝前

    $1 == 1 代表安裝

    $1 == 2 代表升級

  %post階段 - 安裝后

    $1 == 1 代表安裝

    $1 == 2 代表升級

  %preun階段 - 卸載前

    $1 == 0 代表卸載

    $1 == 1 代表升級

  %postun階段 - 卸載后

    $1 == 0 代表卸載

    $1 == 1 代表升級

這個階段主要從 %{_builddir} 復制相關文件到 %{buildroot} (虛擬根目錄)目錄,如下所示:

rm -rf $RPM_BUILD_ROOT cp -rf xxx $RPM_BUILD_ROOT

%files階段-列出被打包的文件和目錄

  首先要設定默認權限,同時要列出打包的目錄和文件,設定默認權限的命令如下:

%defattr(<文件權限>, <用戶>, <用戶組>, <目錄權限>)

  第 4 個參數通常會省略。常規用法為 %defattr(-,root,root,-),其中 “-” 表示默認權限。

  在列出文件的目錄時,盡量使用內建宏來代替目錄名,常用的內建宏如下所示:

%{_sysconfdir}        /etc %{_prefix}            /usr %{_exec_prefix}       %{_prefix} %{_bindir}            %{_exec_prefix}/bin %{_lib} lib (lib64 on 64bit systems) %{_libdir}            %{_exec_prefix}/%{_lib} %{_libexecdir}        %{_exec_prefix}/libexec %{_sbindir}           %{_exec_prefix}/sbin %{_sharedstatedir}    /var/lib %{_datadir}           %{_prefix}/share %{_includedir}        %{_prefix}/include %{_oldincludedir}     /usr/include %{_infodir}           /usr/share/info
%{_mandir}            /usr/share/man
%{_localstatedir}     /var %{_initddir}          %{_sysconfdir}/rc.d/init.d %{_topdir}            %{getenv:HOME}/rpmbuild %{_builddir}          %{_topdir}/BUILD %{_rpmdir}            %{_topdir}/RPMS %{_sourcedir}         %{_topdir}/SOURCES %{_specdir}           %{_topdir}/SPECS %{_srcrpmdir}         %{_topdir}/SRPMS %{_buildrootdir}      %{_topdir}/BUILDROOT %{_var}               /var %{_tmppath}           %{_var}/tmp %{_usr}               /usr %{_usrsrc}            %{_usr}/src %{_docdir}            %{_datadir}/doc %{buildroot}          %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch} $RPM_BUILD_ROOT %{buildroot}
%clean階段 - 完成后的一些清理工作

  主要是清理 %{_builddir}和%{_buildrootdir}兩個目錄里的中間文件

%changelog階段 -- 主要記錄每次打包時的修改日志
%changelog * Fri Aug  7 2020 - Your Name <youremail@xxx.xxx> - Release
- Update log1
* Fri Aug 7 2020 - Your Name <youremail@xxx.xxx> - Release
- Update log2

三、運行 RPMBUILD 命令完成打包

在 SPEC 目錄下執行 rpmbuild -xx xxx.spec 命令完成打包,rpmbuild 命令選項如下所示:

#rpmbuild -bp 預處理 -bc 編譯 -bi 編譯並安裝 -bl 檢驗文件是否齊全 -ba 編譯后做成*.rpm和src.rpm -bb 編譯后做成*.rpm -bs 只做成*.src.rpm

 


免責聲明!

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



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