linux RPM 打包流程
------------恢復內容開始------------
1.因為打RPM包需要 rpmbuild 命令,所以需要先安裝 rpmbuild 相應工具,安裝過程可在網上查詢;
2.執行rpmdev-setuptree 即可在自動當前使用者的 $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
3.建立 SPEC 檔案如下所示:
[xxx@localhost rpmbuild]$ rpmdev-newspec xxx.spec
xxx.spec created; type minimal, rpm version >= 4.12.
4.將 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 -
5.安裝的各個階段說明:
%prep階段 - 預處理,主要對原始碼包進行解壓和打補丁
一般使用 %setup -c 或者 %setup -q 命令來解壓原始碼包,直接會將檔案解壓到%{_builddir}
%build階段 - 對原始碼包進行編譯
編譯階段,非 GNU configure 配置的程式可以不關注這個階段
%install階段 - 將軟體安裝到虛擬根目錄, 同時 Install 階段也有如下階段
%pre階段 - 安裝前
%post階段 - 安裝後
%preun階段 - 解除安裝前
%postun階段 - 解除安裝後
這個階段主要從%{_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 <[email protected]> - Release
- Update log1
* Fri Aug 7 2020 - Your Name <[email protected]> - Release
- Update log2